1. Sqoop import 任务里把原来NULL的转化成字符串‘null’了。
解决方法:
先: alter table ${table_name} SET SERDEPROPERTIES('serialization.null.format' = '\\N');
再: sqoop代码最后面加上 --null-string '\\N' --null-non-string '\\N'
2. sqoop 如果hive to mysql 的时候,会因为hive数据条为0导致任务失败
其实本身任务是没问题的。
方法:直接再后面打印一行就是如,echo `date +%Y%m%d-%H:%M:%S` "cs_live_interaction end"
然后就会跳过前面的失败,却执行成功
但是同时,如果你这个任务真的同步失败的话,调度状态看不出来
3. sqoop import 和 export 样例
import
#!/bin/bashset -vecho `date +%Y%m%d-%H:%M:%S` "table_xxx begin"sqoop import -D mapred.job.queue.name=root.offline \--mapreduce-job-name sqoop_table_xxx \--hive-drop-import-delims \--connect "${datasource_connect}" \--username ${datasource_username} \--password '${datasource_password}' \--split-by id \--boundary-query 'select min(id),max(id) from table_xxx' \--hive-overwrite \--hive-import \--hive-table db_xxx.table_xxx \--query 'select id,column1_xxx,column2_xxx from table_xxx where $CONDITIONS' \--target-dir /tmp/sqoop_table_xxx_`date +%s` \--fields-terminated-by '\t' \
export
#删除mysql数据mysql -u${datasource_username} -p'${datasource_password}' -h${datasource_host} -P${datasource_port} db_xxx -e "truncate table table_xxx";sqoop export -D mapred.job.queue.name=root.offline \--mapreduce-job-name sqoop_table_xxx \--connect "${datasource_connect}" \--driver "${datasource_driver}" \--username ${datasource_username} \--password '${datasource_password}' \--table table_xxx \--columns column1_xxx,column2_xxx \--export-dir /user/hive/warehouse/db_xxx.db/table_xxx \--mapreduce-job-name table_xxx \--input-fields-terminated-by '\t' \--input-null-string '\\N' \--input-null-non-string '\\N'
posted on 2018-12-21 15:18 阅读( ...) 评论( ...)