nettman 发表于 2014-10-22 22:33:19

sqoop使用经验总结及问题汇总


问题导读
1.导入数据到HDFS,需要注意什么?
2.在测试sqoop语句的时候,如何限制记录数量?
3.sqoop导入时什么情况下会多导入一条数据?


static/image/hrline/4.gif



一、sqoop 导入数据到HDFS注意事项

分割符的方向问题
首先sqoop的参数要小心, 从数据库导出数据,写到HDFS的文件中的时候,字段分割符号和行分割符号必须要用

--fields-terminated-by
而不能是
--input-fields-terminated-by
--input前缀的使用于读文件的分割符号,便于解析文件,所以用于从HDFS文件导出到某个数据库的场景。
两个方向不一样。



参数必须用单引号括起来
官方文档的例子是错的:

The octal representation of a UTF-8 character’s code point. This should be of the form \0ooo, where ooo is the octal value. For example, --fields-terminated-by \001 would yield the ^A character.
应该写成
--fields-terminated-by '\001'
创建Hive表
CREATE EXTERNAL TABLE my_table(
id int,
...
)
PARTITIONED BY (
dt string)
ROW FORMAT DELIMITED
FIELDS TERMINATED BY '\001'
LINES TERMINATED BY '\n'
STORED AS textfile;
要小心hive的bug,如果用\001, hive会友好的转换成\u0001
但是如果直接写\u0001, hive某些版本会变成u0001



STORED AS textfile 可以不用。



static/image/hrline/2.gif

sqoop 使用指定条件导入数据

在测试sqoop语句的时候,一定要限制记录数量,否则就像我刚才,等了1个多小时,才看到测试结果。
sqoop-import --options-file media_options.txt --table my_table --where "ID = 2" --target-dir /user/jenkins/bigdata/import/20140607 -m 1 --fields-terminated-by '\001' --lines-terminated-by '\n'
导入后,可以用hdfs dfs -get命令获取文件到本地目录
然后用bunzip2 命令解压,

最后用emacs的hexl-mode查看文件的16进制格式,检查分割符是否正确。


m 1代表一个mapreduce

static/image/hrline/2.gif

sqoop导入时删除string类型字段的特殊字符


如果你指定了\n为sqoop导入的换行符,mysql的某个string字段的值如果包含了\n, 则会导致sqoop导入多出一行记录。

有一个选项

-hive-drop-import-delims   Drops \n, \r, and \01 from string fields when importing to Hive.
static/image/hrline/2.gif

sqoop导入数据时间日期类型错误


一个问题困扰了很久,用sqoop import从mysql数据库导入到HDFS中的时候一直报错,最后才发现是一个时间日期类型的非法值导致。

hive只支持timestamp类型,而mysql中的日期类型是datetime, 当datetime的值为0000-00-00 00:00:00的时候,sqoop import成功,但是在hive中执行select语句查询该字段的时候报错。

解决方法是在创建hive表时用string字段类型。



static/image/hrline/2.gif



sqoop 从mysql导入hive的字段名称问题

hive中有些关键字限制,因此有些字段名称在mysql中可用,但是到了hive就不行。

比如order必须改成order1, 下面列出了我们发现的一些不能在hive中使用的字段名称

order => order1

sort => sort1

reduce => reduce1

cast => cast1

directory => directory1














anyhuayong 发表于 2014-10-23 08:30:45

沙发,先占位了

韩克拉玛寒 发表于 2014-10-23 09:20:32

谢谢分享。

wjhdtx 发表于 2014-10-23 09:26:41

感谢分享。

hb1984 发表于 2014-10-23 13:38:52

谢谢楼主分享。            

wubaozhou 发表于 2015-1-1 20:15:28

{:soso_e181:}

diandidemeng 发表于 2015-1-31 15:29:43

好资料,谢谢分享。

zhangzh 发表于 2015-5-9 17:46:51

谢谢分享!

巅峰142斤 发表于 2016-6-8 15:27:25

学习了,谢谢楼主

夏洛特猫 发表于 2017-4-13 09:25:36

楼主我想请教下 开源的社区版sqoop可以支持大规模的数据传输吗??例如1GB的数据从mysql传输到hdfs 我这边不知道为什么大于几百兆 传输过程就会报错   谢谢您的回复
页: [1] 2
查看完整版本: sqoop使用经验总结及问题汇总