1 Sqoop
要导入的数据里面包含\n,\r,\001之类的特殊字符,那么要使用–hive-drop-import-delims去掉这些特殊字符
1.1 使用 import-all-tables将MySQL业务数据全量同步到HDFS
注意:使用sqoop import-all-tables到hdfs时不能使用–target-dir应使用–warehouse-dir
/usr/bin/sqoop import-all-tables \
--connect "jdbc:mysql://ip:port/database" \
--username '用户名' \
--password '密码' \
--warehouse-dir "/data/hive/warehouse/mysql/zhongmo" \
--autoreset-to-one-mapper --m 1 \
--compress \
--compression-codec com.hadoop.compression.lzo.LzopCodec \
--fields-terminated-by ','
1.2 sqoop 直接导入Hive表的问题
1.1.1 如果采用parquet+snappy压缩,Sqoop导入MySQL或SqlServer的表存在字段类型是tinyint或bit时,到Hive表中默认是boolean
1.1.2 出现问题的原因解释
Sqoop抽取数据到Hive或HDFS时,会自动将tinyint或bit的列转为boolean类型,这就是导致抽取到Hive或HDFS中的数据中只有0和1的原因。因为默认情况下,MySQL JDBC connector 会将Tinyint(1)映射为java.sql.Types.BIT类型,而Sqoop默认会映射为Boolean类型。
**1.1.3 解决方案 1 **
sqoop导入时加
–map-column-java 将其转换为java数据类型
–map-column-hive 将其转换为hive数据类型
import_ods_表名(){
sqoop-impor