利用SQOOP将数据从数据库导入到HDFS

 #Oracle的连接字符串,其中包含了Oracle的地址,SID,和端口号

    CONNECTURL=jdbc:oracle:thin:@20.135.60.21:1521:DWRAC2

    #使用的用户名

    ORACLENAME=kkaa

    #使用的密码

    ORACLEPASSWORD=kkaa123

    #需要从Oracle中导入的表名

    oralceTableName=tt

    #需要从Oracle中导入的表中的字段名

    columns=AREA_ID,TEAM_NAME

    #将Oracle中的数据导入到HDFS后的存放路径

    hdfsPath=apps/as/hive/$oralceTableName

    #执行导入逻辑。将Oracle中的数据导入到HDFS中

    sqoop import --append --connect $CONNECTURL --username $ORACLENAME --password $ORACLEPASSWORD --target-dir $hdfsPath  --num-mappers 1 --table $oralceTableName --columns $columns --fields-terminated-by '\001'

    执行这个脚本之后,导入程序就完成了。

    接下来,用户可以自己创建外部表,将外部表的路径和HDFS中存放Oracle数据的路径对应上即可。

    注意:这个程序导入到HDFS中的数据是文本格式,所以在创建Hive外部表的时候,不需要指定文件的格式为RCFile,而使用默认的TextFile即可。数据间的分隔符为'\001'.如果多次导入同一个表中的数据,数据以append的形式插入到HDFS目录中。

    并行导入

    假设有这样这个sqoop命令,需要将Oracle中的数据导入到HDFS中:

    sqoop import --append --connect $CONNECTURL --username $ORACLENAME --password $ORACLEPASSWORD --target-dir $hdfsPath  --m 1 --table $oralceTableName --columns $columns --fields-terminated-by '\001'  --where "data_desc='2011-02-26'"

    请注意,在这个命令中,有一个参数"-m",代表的含义是使用多少个并行,这个参数的值是1,说明没有开启并行功能。

    现在,我们可以将"-m"参数的值调大,使用并行导入的功能,如下面这个命令:

    sqoop import --append --connect $CONNECTURL --username $ORACLENAME --password $ORACLEPASSWORD --target-dir $hdfsPath  --m 4 --table $oralceTableName --columns $columns --fields-terminated-by '\001'  --where "data_desc='2011-02-26'"

    一般来说,Sqoop就会开启4个进程,同时进行数据的导入操作。

    但是,如果从Oracle中导入的表没有主键,那么会出现如下的错误提示:

    ERROR tool.ImportTool: Error during import: No primary key could be found for table creater_user.popt_cas_redirect_his. Please specify one with --split-by or perform a sequential import with '-m 1'.

    在这种情况下,为了更好的使用Sqoop的并行导入功能,我们就需要从原理上理解Sqoop并行导入的实现机制。

    如果需要并行导入的Oracle表的主键是id,并行的数量是4,那么Sqoop首先会执行如下一个查询:

    select max(id) as max, select min(id) as min from table [where 如果指定了where子句];

    通过这个查询,获取到需要拆分字段(id)的最大值和最小值,假设分别是1和1000.

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值