sqoop Mysql 导入到hdfs、hive

sqoop是一个用于在Hadoop和关系型数据库(Oracle,Mysql...)间数据传递的开源工具。下面以mysql、sqlserver为例,介绍使用sqoop将数据从mysql、sqlserver导入到Hadoop中(HDFS、Hive)

#导入命令及参数介绍

通用参数

 

参数名

参数说明

--connect <jdbc-uri>JDBC连接字符串
--username <username>数据库用户名
--password <password>数据库密码
-P导入时,从控制台获取数据库密码
--password-file从指定的文件中获取数据库密码
--verbose导入时,输出更多的日志信息

 

 

 控制参数

参数说明
–append将数据追加到hdfs中已经存在的dataset中。使用该参数,sqoop将把数据先导入到一个临时目录中,然后重新给文件命名到一个正式的目录中,以避免和该目录中已存在的文件重名。
–as-avrodatafile将数据导入到一个Avro数据文件中
–as-sequencefile将数据导入到一个sequence文件中
–as-textfile将数据导入到一个普通文本文件中,生成该文本文件后,可以在hive中通过sql语句查询出结果。
–boundary-query边界查询,也就是在导入前先通过SQL查询得到一个结果集,然后导入的数据就是该结果集内的数据,格式如:–boundary-query ‘select id,no from t where id = 3’,表示导入的数据为id=3的记录,或者 select min(), max() from ,注意查询的字段中不能有数据类型为字符串的字段,否则会报错
–columns<col,col>指定要导入的字段值,格式如:–columns id,username
–direct直接导入模式,使用的是关系数据库自带的导入导出工具。官网上是说这样导入会更快
–direct-split-size在使用上面direct直接导入的基础上,对导入的流按字节数分块,特别是使用直连模式从PostgreSQL导入数据的时候,可以将一个到达设定大小的文件分为几个独立的文件。
–inline-lob-limit设定大对象数据类型的最大值
-m,–num-mappers启动N个map来并行导入数据,默认是4个,最好不要将数字设置为高于集群的节点数
–query,-e从查询结果中导入数据,该参数使用时必须指定–target-dir、–hive-table,在查询语句中一定要有where条件且在where条件中需要包含 \$CONDITIONS,示例:–query ‘select * from t where \$CONDITIONS ‘ –target-dir /tmp/t –hive-table t
–split-by表的列名,用来切分工作单元,一般后面跟主键ID
–table关系数据库表名,数据从该表中获取
–delete-target-dir删除目标目录
–target-dir指定hdfs路径
–warehouse-dir与 –target-dir 不能同时使用,指定数据导入的存放目录,适用于hdfs导入,不适合导入hive目录
–where从关系数据库导入数据时的查询条件,示例:–where “id = 2”
-z,–compress压缩参数,默认情况下数据是没被压缩的,通过该参数可以使用gzip压缩算法对数据进行压缩,适用于SequenceFile, text文本文件, 和Avro文件
–compression-codecHadoop压缩编码,默认是gzip
–null-string可选参数,如果没有指定,则字符串null将被使用
–null-non-string可选参数,如果没有指定,则字符串null将被使用
--fields-terminated-by 自定义行分隔符
--lines-terminated-by 自定义列分割符
--hive-drop-import-delims把导入数据中包含的hive默认的分隔符去掉

##导入数据到HDFS

##Mysql作为元数据
$ sqoop import --connect jdbc:mysql://IP:PORT/ --username USER --password 'PASSWD' --table T_SQOOP_TEST --where "$conditions" --target-dir 'mydir' --delete-target-dir


##SqlServer作为元数据
$ sqoop import --connect 'jdbc:sqlserver://IP:1433;username=NAME;password=PWD;database=DataName' --table T_SQOOP_TEST --where “$conditions” --target-dir 'mydir' --delete-target-dir

###导入到hive

在导入命令中添加--hive-import参数则将数据导入到hive中
$ sqoop import --hive-import --connect jdbc:mysql://IP:PORT/ --username USER --password 'PASSWD' --table T_SQOOP_TEST --m 1--target-dir 'mydir' --delete-target-dir
参数说明:

参数名

参数说明

--hive-import数据导入到Hive
--hive-overwrite覆盖Hive表中已存在的数据
--create-hive-table设置了此参数,导入时如果hive中表已经存在,则导入任务失败。默认为false
--hive-table <table-name>指定导入到Hive中的表名
--hive-drop-import-delims导入Hive时,去除字符型字段中的\n(换行符),\r(回车符)和\01(标题开始符)字符。
--hive-delims-replacement导入Hive时,用用户定义的字符串替换字符型字段中的\n,\r和\01字符。
 
导入时需要注意
1)Hive默认使用\01字符作为列分隔符(字段分隔符),\n和\r作为行分隔符。因此,如果导入的字符型字段的数据中包含这些字符时,就会有问题。
如:T_SQOOP_TEST表ID为2的行,NAME字段值中包含换行符,导入到Hive中,数据出现异常:
可以使用--hive-drop-import-delims参数,将导入数据中的\n,\r,\01字符去掉。也可以使用--hive-delims-replacement替换\n,\r和\01。

 

转载于:https://www.cnblogs.com/GuoSamael/p/8023763.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值