此文章记录个人使用sqoop遇到的问题及方法
(一)基础参数
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46
| ①公共参数 --connect 指定MySQL的Url. --username 指定MySQL用户名数据库密码 --password 指定MySQL数据库密码 --num-mappers 指定map的个数 --null-non-string '\\N' 导入时保证NULL值一致性 --null-string '\\N' 导入时保证NULL值一致性 --input-null-string '\\N' 导出时保证NULL值一致性 --input-null-non-string '\\N' 导出时保证NULL值一致性
②MySQL导入HDFS的参数 --table usertable 指定MySQL的表名 --where "" 指定MySQL表的过滤条件 --query 'and $CONDITIONS' 指定MySQL表及过滤条件(不能和table一起用) --fields-terminated-by '' 指定HDFS文件的字段分隔符 --lines-terminated-by '' 指定HDFS文件的换行符 --delete-target-dir 若目标路径已存在即删除 --split-by 根据哪个字段来分片
③MySQL导入Hive表的参数 --hive-import 设置导入目标为Hive表 --table 指定MySQL的表名 --columns 指定需筛选的字段 --where "" 指定MySQL表的过滤条件 --hive-table 指定目标Hive表 --hive-partition-key 指定Hive分区字段 --hive-partition-value 指定Hive某个分区 --delete-target-dir 若目标路径已存在即删除 --fields-terminated-by '' 指定HDFS文件的字段分隔符 --lines-terminated-by '' 指定HDFS文件的换行符 --hive-overwrite 覆盖模式 --hive-drop-import-delims 把字符串中\n\r\01删除 --hive-delims-replacement '' 用空格替换特殊字符 --create-hive-table 建表,如果表已经存在,该操作会报错! --map-column-hive 为配置的列覆盖从SQL类型到Hive类型的默认映射(id = int格式)
备注: 1.Hive需要手动建表,字段类型必须相对应,否则会出现true或false的值,导致数据不一致。 2.query和table不能一起用,否则有冲突时无法确定源表。 3.map-column-hive参数需要指定列及对应的类型,不如手动建表或写脚本。 4.bit布尔型导入时,1=true ,2=false 5.原表主键为文本格式时:sqoop import "-Dorg.apache.sqoop.splitter.allow_text_splitter=true" 6.hive不支持mysql的binary类型
|
(二)MySQL使用示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69
| sqoop import \ --connect jdbc:mysql://aliyun5201314:3306/jianyeo2o \ --username root \ --password root \ --table usertable \ --num-mappers 1 \ --hive-import \ --delete-target-dir \ --fields-terminated-by "\t" \ --hive-overwrite \ --hive-table rds_jianyeo2o.ods_usertable \ --null-string '\\N' \ --null-non-string '\\N' \ --where "createtime is not null" \ --hive-drop-import-delims
sqoop export --connect jdbc:mysql://520.13.14.9999:250/ads_we7 \ --username root \ --password root \ --table ads_house_cust_first \ --num-mappers 3 \ --input-fields-terminated-by '\001' \ --export-dir /user/hive/warehouse/wxslb.db/ads_house_cust_first \ --input-null-string '\\N' \ --input-null-non-string '\\N' \ --staging-table ads_house_cust_first_tmp \ --clear-staging-table
sqoop import \ --connect jdbc:mysql://520.13.14.9999:250/ods_o2oshop \ --username root \ --password root \ --table iskyshop_goodscart \ --num-mappers 50 \ --hive-import \ --delete-target-dir \ --fields-terminated-by "\t" \ --hive-overwrite \ --hive-table rds_iskyshop.ods_iskyshop_goodscart \ --create-hive-table \ --null-string '\\N' \ --null-non-string '\\N' \ --hive-delims-replacement ' '
sqoop import \ --connect "jdbc:mysql://520.13.14.9999:250/love?tinyInt1isBit=false&serverTimezone=Asia/Shanghai" \ --username root \ --password root \ --table dwd_ann_log_appinfo \ --hive-import \ --num-mappers 40 \ --delete-target-dir \ --fields-terminated-by "\t" \ --hive-overwrite \ --create-hive-table \ --hive-table LeleWeather.dwd_event_appinfo_history1 \ --where "datekey <= 20210601" \ --null-string '\\N' \ --null-non-string '\\N' \ --hive-delims-replacement ''
注:一定记得url加引号,否则&无法正确解析,将报错-bash: --username: 未找到命令
|
(三)sqlServer使用示例:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
sqoop list-databases --connect "jdbc:sqlserver://520.13.14.9999:250" -username root -password 'root'
sqoop list-tables --connect "jdbc:sqlserver://520.13.14.9999:250;DatabaseName=love" -username root -password 'root'
sqoop eval --connect "jdbc:sqlserver://520.13.14.9999:250" -username root -password 'root' --query "SELECT top 1 * from reportHouse.dbo.fact_userInfo"
sqoop import \ --connect "jdbc:sqlserver://520.13.14.9999:250;DatabaseName=love" \ --username root \ --password root \ --query 'select top 2 * from reportHouse.dbo.fact_userInfo WHERE $CONDITIONS' \ --num-mappers 1 \ --hive-import \ --target-dir /user/hive/warehouse/mht.db/ods/fact_userInfo_loadtest \ --delete-target-dir \ --fields-terminated-by "\t" \ --hive-overwrite \ --hive-table mht.fact_userInfo_loadtest \ --create-hive-table \ --null-string '\\N' \ --null-non-string '\\N' \ --hive-delims-replacement ' '
|
(四)函数封装sqoop脚本:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28
| #!/bin/bash
sq() { sqoop import \ --connect jdbc:mysql://520.13.14.9999:250/love \ --username root \ --password root \ --table $1 \ --num-mappers 1 \ --hive-import \ --fields-terminated-by "\t" \ --hive-overwrite \ --hive-database yyplatform \ --hive-table $1 --null-string '\\N' \ --null-non-string '\\N' \ --hive-delims-replacement ' ' }
sq iskyshop_activeinfo sq iskyshop_activeinfo_goods sq iskyshop_address sq iskyshop_area sq iskyshop_brand sq iskyshop_chosengoods sq iskyshop_choseninfo sq iskyshop_chosenuser
|
持续更新中……