sqoop的简单用法
本文最后更新于 2017 天前,其中的信息可能已经有所发展或是发生改变。

emmmmm,为了阐述写这次文章的理由是什么的话?那可能就是最近我那么分析大佬们,天天要我导数据,oracle<—->hive/hdfs,贼浪费我时间!然后哪位拆一代的卢胖子,想教会他自己导,居然不学、不看、不动…这里强烈的谴责!

好了不BB…下面应该是我自己笔记,内容有错的话,自己去看书–>Hadoop大数据挖掘从入门到跑路..


这个用的应该是sqoop..它是hadoop生态圈的一员吧,剩下的自己百度,因为我也是辣鸡的小白,之前教我的大佬走了.不然你们可以坑他一逼(此处要有滑稽脸?)

sqoop操作–从Oracle导入到HDFS

先上导出脚本

sqoop import -Dmapred.job.queue.name=jfa5d_queue --connect jdbc:oracle:thin:@10.201.xx.xx:1522/mmds --username 你数据库账号 --password 数据库密码 --table TEMP_HJX_XL_TT --columns "COMPANY,MSISDN,IMEI,TAC" --target-dir /user/jfa5d/glj_test/TEMP_HJX_XL_TT/ --fields-terminated-by ',' --lines-terminated-by '\n' --null-string '' --null-non-string '0' -m 2;

说明:

-Dmapred.job.queue.name=jfa5d_queue:为指定的资源池/指定队列

–connect jdbc:oracle:thin:@//10.201.29.41:1522/mmds :指定JDBC连接字符串

–username、–password:就是数据库的账号密码啦..

–table :数据库表名

–columns :需要导出的字段,逗号分隔(没有这个参数就是全表字段导出)

–target-dir :导入HDFS的目标路径,如果目录已经存在,则报错;需要先删除你要上传的目录:hadoop fs -rmr /user/hadoop/xxxxx,建议自己先建以自己名字首字母的目录,不然删错了别人了,你跪键盘吧

–fields-terminated-by:字段之间采用什么分隔符,我这里是用逗号

–lines-terminated-by :行之间采用啥分隔符号,我这里用回车..

–null-string:当string类型的字段为空时,使用”代替

–null-non-string :当非string类型的字段为空时,使用0代替

-m n或者–num-mappers n :n为数字,代码启动建立n个并发执行任务

sqoop操作–从HDFS导到ORACLE

也是先上脚本,然后自己分析吧

sqoop export -Dmapred.job.queue.name=jfa5d_queue --connect jdbc:oracle:thin:@//10.201.xxx.xxx:1522/mmds --username xxx --password xxx --table temp_hjx_xl_tt --columns "COMPANY,MSISDN,IMEI,TAC" --export-dir /user/jfa5d/glj_test/pushFile/ --input-fields-terminated-by '\001' --input-lines-terminated-by '\n' --input-null-string '\\N' --input-null-non-string '\\N'  --num-mappers 8

脚本基本上一样,就是参数分别为:export、import,相同的参数我就不再解释

–export-dir:导出数据的HDFS目录。

–input-fields-terminated-by:文件的分隔符,如果是hive自动生成默认为\001

–input-lines-terminated-by:行之间的分隔符

–input-null-string:当非string类型的字段为空时,如果是hive自动生成默认为\N

–input-null-non-string:当非string类型的字段为空时,如果是hive自动生成默认为\N

-m n或者–num-mappers n :n为数字,代码启动建立n个并发执行任务

注意问题

1.分割符的方向问题:

首先sqoop的参数要小心, 如果是从数据库导出数据,写到HDFS的时候,字段分割符号和行分割符号必须要用

–fields-terminated-by 和 –lines-terminated-by

而不是有input的:

–input-fields-terminated-by和 –input-fields-terminated-by的

–input前缀的使用于读文件的分割符号,便于解析文件,所以用于从HDFS文件导出到数据库,两个用法方向不一样。

emmm.快两点了,好了不写了,我的午休时间没有了…如有错误,都是我水平不够,但我不听。


–delete-target-dir  删除目标文件夹(建议少用自己手动删一下)

–where 按条件导入数据  –>–where ‘id<3’

–query  按照sql语句进行导入ps:使用–query关键字,就不能使用–table和–columns,自定义sql语句的where条件中必须包含字符串 $CONDITIONS,$CONDITIONS是一个变量,用于给多个map任务划分任务范围 –>–query “select * from user where id>1 and \$CONDITIONS”
(或者quer使用这种格式:–query ‘select * from user where id>1 and $CONDITIONS’)


评论

  1. Windows Chrome 63.0.3239.132
    6 年前
    2019-5-24 17:25:35

    非技术的路过。

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇