sqoop导入命令,从关系型数据库到hdfs

参数说明 

--connect #关系型数据库连接
--username #关系型数据库连接用户名
--password #关系型数据库连接密码
--table #关系型数据库的表
--columns #查询哪些列

--mapreduce-job-name #hadoop作业job运行的名称
-m #指定MapReduce中map数量(并行度),也是生成的hdfs文件的数量

导入没有主键的表使用,如果-m为1可以不指定,否则必须加上此参数,且最好是数值类型
--split-by 

--direct #快速模式,可提高抽取的性能,使用数据库自带的mysqldump导出数据,有些数据库版本不支持 (不要盲目使用)
注意以下几个问题:

  1. 【WARN manager.DirectMySQLManager: Direct-mode import from MySQL does not support column】direct方式仅仅支持所有的列 有column的话direct就无效了
  2. 【Error: java.io.IOException: Cannot run program “mysqldump”: error=2, No such file or directory】 需要把mysqldump复制到从节点:scp /usr/bin/mysqldump cm-slave1:/usr/bin/
  3. 使用direct会使得–null-non-string –null-string无效
  4. 还有些坑,如 主键id搞没了,搞成null、NULL
    https://blog.csdn.net/qq_33792843/article/details/90792702

--null-string #当string类型的字段,值为NULL,替换成指定的字符
--null-non-string #当非string类型的字段,值为NULL,替换成指定字符

--delete-target-dir #如果hdfs的目录已经存在则先删除
--target-dir #导入到hdfs时的目标目录
--export-dir #从hdfs导出时的源目录

--fields-terminated-by #导入到hdfs时的hdfs文件分隔符
--input-fields-terminated-by #从hdfs导出时的hdfs文件分隔符

追加数据相关的参数
注意:1 每追加成功一次,会在 target-dir 目录新添加一个文件
            2 append和delete-target-dir是相互冲突的,不能同时存在
--incremental append   #追加模式
--check-column   #检查新追加数据的列名
--last-value     #成功导入Hadoop的最后一个值。将导入此值之后的所有新添加的数据

--hive-drop-import-delims #导入hive中的数据某列中如果有换行符或回车键可以删除
--hive-database #hive的数据库
--create-hive-table 自动创建hive表,初次导入使用
--hive-table #hive的表
--hive-overwrite #覆盖之前的数据
--hive-partition-key #hive分区字段
--hive-partition-value #hive分区值

导入mysql中的指定表数据到HDFS上
sqoop import   \
--connect jdbc:mysql://127.0.0.1:3306/linshi_1   \
--username root  \
--password 123456   \
--table message   \
--target-dir /user/oozie/oozie_test/dir5  \
--fields-terminated-by '\t'  \ (列分隔字符串)
--m 2 (指定map进程数)


导入mysql中的指定表数据到HDFS上,有where条件
sqoop import   \
--connect jdbc:mysql://127.0.0.1:3306/linshi_1   \
--username root  \
--password 123456   \
--table message   \
--where "g_qq<>''"   \   (where条件)
--target-dir /user/oozie/oozie_test/dir14  \
--fields-terminated-by ','  \
--m 1


导入mysql中的指定表数据到HDFS上,查询指定列
sqoop import   \
--connect jdbc:mysql://127.0.0.1:3306/linshi_1   \
--username root  \
--password 123456   \
--table message   \
--columns "ID,g_reversion,g_brow,g_title,g_man" \   (查询指定列)
--target-dir /user/oozie/oozie_test/dir15  \
--fields-terminated-by ','  \
--m 1


使用自定义sql语句导入数据到HDFS上
sqoop import   \
--connect jdbc:mysql://127.0.0.1:3306/linshi_1   \
--username root  \
--password 123456   \
--query 'SELECT a.l_id,a.l_title,a.c_title FROM article AS a INNER JOIN e_left AS b  ON a.l_id=b.l_id WHERE $CONDITIONS and a.l_id=29' \
--split-by  a.l_id \      (指定主键)
--target-dir /user/oozie/oozie_test/dir18  \
--fields-terminated-by ','  \
--m 2

注意:
1、引号问题,要么外层使用单引号,内层使用双引号,$CONDITIONS的$符号不用转义, 要么外层使用双引号,那么内层使用单引号,然后$CONDITIONS的$符号需要转义
2、自定义的SQL语句中必须带有WHERE \$CONDITIONS


导入没有主键的表到HDFS上
sqoop import \
--connect jdbc:mysql://localhost:3306/linshi_1 \
--username root \
--password 123456 \
--table article \
--split-by l_id \ (关键)
--mapreduce-job-name article_FromMySQL2HDFS \
--columns "title,l_id,l_title,c_title" \
--delete-target-dir \
--fields-terminated-by '\t' \
--m 2 \
--target-dir /tmp/article


字段为null时,替换为指定的值
sqoop import \
--connect jdbc:mysql://158.158.4.52:3306/linshi_1 \
--username root \
--password kn20180806 \
--table e_board_1 \
--mapreduce-job-name e_board_1_FromMySQL2HDFS \
--delete-target-dir \
--fields-terminated-by '\t' \
--m 2 \
--target-dir /tmp/e_board_1 \
--null-string '空' \
--null-non-string 0


增量导入 数据到HDFS
sqoop import  \
--connect jdbc:mysql://127.0.0.1:3306/linshi_1   \
--username root  \
--password 123456   \
--table e_board  \
--fields-terminated-by "\t"  \
--lines-terminated-by "\n"  \
--m 1  \
--target-dir /apps/hive/warehouse/test01.db/e_board  \
--incremental  append  \
--check-column  id \
--last-value 13

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值