Sqoop常用功能

RDS To HDFS

特殊字符处理
可在执行同步任务时对 RDS 中常见特殊字符('\r' '\n' '\01')进行处理

# hive-drop-import-delims:默认剔除同步过来数据中包含的 '\r' '\n' '\01'
# hive-delims-replacement '\t':默认替换同步过来数据中包含的 '\r' '\n' '\01'为'\t'

# Demo
sqoop import --connect jdbc:mysql://hostname:3306/dbname --user username --password passwd --hive-delims-replacement '\t' --query "select * from tablename where $CONDITIONS" --target-dir /user/warehouse/hive.db/xxx

空值处理
因 RDS 数据库与 HIVE/HDFS 库对空值默认值不一致,直接同步会将 RDS 中空值传输至 HIVE 后变成字符串 "NULL",影响后续流程对空值进行判断, 可在执行同步任务时进行处理

# null-string '\\N':将 RDS 库中字符串类字段空值进行转换
# null-non-string '\\N':将 RDS 库中非字符串类字段空值进行转换

# Demo
sqoop import connect jdbc://mysql:hostname:3306/dbname  --user username --password passwd --null-string '\\N'  --null-non-string '\\N'   --fields-terminated-by '\0001'  --query "select * from tablename  where $CONDITIONS"  --target-dir  /user/warehouse/hive.db/xxx

HDFS To RDS

空值处理
因 RDS 数据库与 HIVE/HDFS 库对空值默认值不一致,直接同步会 Hive 中空值传输至 RDS 中变成字符串 "\N",影响后续流程对空值进行判断, 可在执行同步任务时进行处理

# input-null-string '\\N':声明HIVE/HDFS中字符串空值默认值
# input-null-non-string '\\N':声明HIVE/HDFS中非字符串空值默认值


# Demo
sqoop  export  connect jdbc://mysql:hostname:3306/dbname  --user username --password passwd --input-null-string '\\N'  --input-null-non-string '\\N'  --input-fields-terminated-by '\0001'   --query "select * from tablename  where $CONDITIONS"  --target-dir  /user/warehouse/hive.db/xxx

Sqoop 任务配置 Map 内存

通过添加 MR 参数指定 Sqoop 任务启动的 Map 内存大小避免同步时出现 OOM

# -D mapreduce.map.memory.mb=8192 指定 Map 内存
# -D mapreduce.map.java.opts=-Xmx7000m 指定 jvm 堆内存大小

# Demo
sqoop  export  connect jdbc://mysql:hostname:3306/dbname  --password passwd --input-null-string '\\N'  --input-null-non-string '\\N'  --input-fields-terminated-by '\0001'   -D mapreduce.map.memory.mb=8192 -D mapreduce.map.java.opts=-Xmx7000m --user username --query "select * from tablename  where $CONDITIONS"  --target-dir  /user/warehouse/hive.db/xxx

RDS To Hive强制转换字段类型

# –map-column-java DB_ID=String,id=Integer :强制将rds中数据在同步导入hive过程中转换为指定类型
# –map-column-java DB_ID=String,id=Integer :当通过sqoop创建hive表时,强制指定hive表字段类型

# Demo
sqoop  export  connect jdbc://mysql:hostname:3306/dbname  --user username --password passwd --input-null-string '\\N'  --input-null-non-string '\\N'  --input-fields-terminated-by '\0001'  --map-column-java DB_ID=String,id=Integer  --query "select * from tablename  where $CONDITIONS"  --target-dir  /user/warehouse/hive.db/xxx