工作记录

1.sqoop从mysql抽数比较简单,但是oracle一定要严格区分表名的大小写和字段的大小写。
2.mysql,sqlserver虽然表的大小写不是太刻意,但是index_dir一定要区分大小写。hadoop fs –ls /data和hadoop fs –ls /DATA是不一样的。
3.原来一直不理解--query 跟一个查询语句的原理,在使用的时候我们不能指定sourcetable 一定要指定target_dir那么,通过日志我理解到—query其实就可以理解为你语句产生的sourcetable,他下一步获取
Select max(id),min(id) from (--query)在实际的运行中是这个原理,而为什么当你写--query一定要指定$CONDITIONS(前面加转义),这是他执行select * from table where 1=0来获取你表的结构的固定方式。
5.我在从oracle抽取数据的时候,碰到这样一个问题,我访问表需要加上用户如SIEBEL.table那么在执行merge的时候你的sourcetable需要设置成SIEBEL.table,这里有一个大坑,你的CLASSNAME一定要设置成SIEBEL_table注意将.变成下划线。
6.--fields-terminated-by \001是必须的,这个是必须的常识,但偶尔也会忘记。
7.我们平时启的mapreduce任务,会根据输入文件的大小自动的划分map,但是sqoop不会,他默认就是4个,不管你多大的文件,所以大文件--m 20来指定一下吧。
8.其实merge很慢,很慢,很慢,增量抽取再merge真心不如overwrite的平抽。例如订单表,merge需要7个小时,抽取覆盖需要30分钟。
9.超级大坑,超级大坑,超级大坑重要的事情说三遍:
Sqoop currently do not support splitting data on N(LONG)(VAR)CHAR column types. We're however supporting splitting on (LONG)(VAR)CHAR using TextSplitter:
终于找到了这个困扰我很久的问题,很多老的系统ROW_ID设置的是varchar如果用它来split就会出各种问题。
10.我们在使用hive.sh产生表的时候,模版默认是以lzo打进去的,但是表的set fileformat并没有生效,好吧,你select某个字段有数。但是,高能预警!!join select *都没数据。。。大坑。。。。。。。。。。。。。。我踩了。
posted @ 2016-02-26 18:49  dalu610  阅读(140)  评论(0编辑  收藏  举报