Sqoop使用经验
- 导Oracle数据源时要注意对于用户名、库表的大小写
# How to specify Oracle database schema name in Sqoop import command
2.出现报错 exception “GC Overhead limit exceeded”.发现是获取到的数据块大小超过了分配的内存大小。可以在jdbc连接串中加上配置来显性设置大小:
&defaultFetchSize=10000
Handling database fetch size in Sqoop
3.要明确知道sqoop 脚本的password和username参数均指的是连接rdbms所需要的用户名密码,因为sqoop在hadoop的客户端上执行,已经拥有了对应的权限(具体取决于集群的认证配置,比如Kerberos认证),故不包含hive的用户名密码!
4.通过使用--delete-target-dir来避免目标目录已经存在的报错问题,也就不用在sqoop之前加上删除目标目录的语句了。但是这个选项与增量同步模式不能共存(很显然)!
5.增量更新,两部分数据,利用hql合并,但是表有分区,需要指定分区partition(),分区字段如果要显示地写则语句重复且可能有遗漏,可只写字段名而不写字段值,会自动插入。
但是需要在执行insert overwrite之前执行设置,取消自动分区限制
set hive.exec.dynamic.partition.mode=nostrick;
因为hive 默认不允许这种行为,使用不好可能会导致分区暴增。
6.增量同步时的源库表同步字段不能是varchar类型的
7.密码可以使用密码文件 --password-file 而非 --password
但要注意密码文件的写入问题,很可能多写入一个换行符导致密码错误,可使用下列指令写入:
echo -ne "password" > ~/.project.password
另外需要注意密码含有shell中的转义字符(比如$)需要加反斜杠。