INFO-Sqoop常用功能
更新时间: 2024-03-11 02:47:40
阅读 5442
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
文档反馈
以上内容对您是否有帮助?