sqoop的两种使用方式 命令行 java调用

4.1 sqoop简介
Sqoop是hadoop与关系型数据库之间的数据迁移工具,使用该工具可以实现将关系型数据库中的数据导入到hadoop环境下(包括hdfs,hive,hbase),也可以将hadoop环境下的数据导出到关系型数据库。
在2011年6月之前,sqoop只是hadoop下的一个子模块,2011年6月之后获准进入apache基金会的孵化器,2012年3月开始,sqoop已经成为apache的顶级项目了。目前最新版本是1.4.3。本次分享是基于1.4.2.
4.2 sqoop的安装和配置
第一步:解压sqoop到hadoop集群中任意一台主机。
第二步:修改环境变量/etc/profile SQOOP_HOME和PATH
第三步:将classes12.jar,hadoop-core-1.0.3.jar拷贝到sqoop的lib目录下
4.3 sqoop 命令
列出表:
sqoop list-tables  --connect jdbc:oracle:thin:@172.16.18.192:1521:yiqifadev --username yiqifa_bs_pro --password yiqifa_bs_pro
导入表到hdfs:
sqoop import --connect jdbc:oracle:thin:@172.16.18.192:1521:yiqifadev --username yiqifa_bs_pro --password yiqifa_bs_pro --table APP_INFO --columns CAMPAIGN_ID,PROGRAM_NAME --split-by CAMPAIGN_ID --target-dir hdfs://m.yiqifa.com:9000/test/appinfo
导入到hive:
sqoop import --connect jdbc:oracle:thin:@172.16.18.192:1521:yiqifadev --username yiqifa_bs_pro --password yiqifa_bs_pro --table ADVERTISER_ACCOUNT  --columns ID,ADVERTISER_ID,ADVERTISER_NAME,ADVERTISER_TOTAL_AMOUNT,ADVERTISER_INVESTMENT_AMOUNT,ADVERTISER_CREDIT_AMOUNT,CAMPAIGN_PAYOUT_AMOUNT,ADVERTISER_BALANCE,ADVERTISER_BALANCE_AVAILABLE,ADVERTISER_WITHHOLDING,CREATE_TIME --split-by ID --hive-import --create-hive-table;
导入到hbase:
sqoop import --connect jdbc:oracle:thin:@172.16.18.192:1521:yiqifadev --username yiqifa_bs_pro --password yiqifa_bs_pro --table ADVERTISER_ACCOUNT  --columns ID,ADVERTISER_ID,ADVERTISER_NAME,ADVERTISER_TOTAL_AMOUNT,ADVERTISER_INVESTMENT_AMOUNT,ADVERTISER_CREDIT_AMOUNT,CAMPAIGN_PAYOUT_AMOUNT,ADVERTISER_BALANCE,ADVERTISER_BALANCE_AVAILABLE,ADVERTISER_WITHHOLDING,CREATE_TIME --split-by ID --hbase-table ADVERTISER_ACCOUNT --column-family ac;
hdfs导出到oracle:
sqoop export --connect jdbc:oracle:thin:@172.16.18.192:1521:yiqifadev --username yiqifa_bs_pro --password yiqifa_bs_pro --table analyze_adv_impr --columns advertiser_id,campaign_id,CLICK_AMOUNT,CLICK_IP_AMOUNT,IMPR_AMOUNT,IMPR_IP_AMOUNT,STAT_DATE --export-dir /hive/warehouse/analyze_adv_impr

4.4 sqoop开发
Sqoop的api文档并没有提供java直接调用sqoop工具的方法。如果想在java代码中调用sqoop进行数据的导入导出可以用RunTime.exec()的方式执行命令,但是这种方式不灵活。如果想在java代码中调用sqoop,可以参照如下方式。
public int importHbase(Map<String, String> param) throws Exception {
  ArrayList<String> list = new ArrayList<String>();
  list.add("--connect");
  list.add(param.get("url"));
  list.add("--username");
  list.add(param.get("userName")); // 数据库的用户名
  list.add("--password");
  list.add(param.get("pwd")); // 数据库的密码
  list.add("--table");
  list.add(param.get("tableName")); // 数据库中的表。
  list.add("--columns");
  list.add(param.get("columns")); // 将导入指定字段
  list.add("--hbase-table");
  list.add(param.get("hbaseTableName"));// 导入hbase指定表
  list.add("--column-family");
  list.add(param.get("hbaseColumnFamily"));
  list.add("--hbase-row-key");
  list.add(param.get("rowKey"));// 记录边界
  list.add("--split-by");
  list.add(param.get("split"));
  list.add("-m");
  list.add(param.get("m"));// 定义mapreduce的数量。
  String[] arg = new String[1];
  ImportTool importer = new ImportTool();
  Sqoop sqoop = new Sqoop(importer);
  sqoop.setConf(conf);
  arg = list.toArray(new String[0]);
  return Sqoop.runSqoop(sqoop, arg);
 }
Sqoop 继承了hadoop的Configured类并实现了hadoop的tool接口。runSqoop方法调用ToolRunner类的run方法运行tool完成数据的导入和导出。

 

  • 0
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值