import --connect jdbc:mysql://bigdata113:3306/company --username root --password 000000 --table staff --target-dir /user/company --delete-target-dir --num-mappers 1 --fields-terminated-by "\t" --hive-drop-import-delims --null-string "\\N" --null-non-string "\\N"
配置说明:
在导入数据到hive时,去掉数据中的\r\n\013\010这样的字符。原因是,有很多字段所存储的数据比较复杂,包含回车换行等,如果不做任何处理导入到 hdfs 中,就会发现数据错乱等情况,所以我们在导入完数据后一定要查看一遍表的数据是否有问题。
这两个参数一般是连续使用,并且注意一定是双引号包含 \N,作用就是让原来关系型数据库的表中String类型的字段,并且存储的数据是空值NULL的情况,到hdfs中也是以空值存储。如果不加这两个参数,就会存储字符串型的NULL或null,在查询的的时候不能用 is null来过滤,而是以 =="NULL" 或 =="null" 过滤。
export --connect jdbc:mysql://bigdata113:3306/Andy --username root --password 000000 --export-dir /user/hive/warehouse/staff_hive --table aca --num-mappers 1 --input-fields-terminated-by "\t" --hive-drop-import-delims --input-null-string "\\N" --input-null-non-string "\\N"
这个配置是指定导出数据的分隔符,特别需要注意的是,最好用双引号来包裹 \t ,原因是在不同的执行命令窗口可能会发生导出失败的状况,比如说在Hue中的 Sqoop 执行命令文本框中运行,单引号是不行的。 null-string "\N" 这个参数也是,虽然官方文档中写的也是单引号,但在某些命令窗口中执行代码是失败的。
我们在windows系统下编辑的 .sh 文件,需要把文件编码改成** utf-8-bom **格式,并且档案格式改成 Unix,并且多加两行回车,否则在直接上传文件后,Linux系统执行会出脚本时会出问题。
对此,我们可以直接在Hue中找到该文件,然后在Hue页面中编辑,然后保存,文件会自动变成Linux可以识别并可执行的文件。
还有一种情况,就是在脚本文件中出现中文空格的情况,执行脚本时也会报错。这种情况真的变态,去yarn里面查看日志,也找不到error信息。解决办法是,在Hue界面的 hive 执行命令窗口中把要执行的 Sql 给 Format 一下,然后再粘贴到文件中,这样中文空格就爱去掉了。
原因是,我们停止了原来提交的 Schedule 任务,假设它的提交时间是在上个月,所以它的开始执行时间也是在上个月。但由于某种原因要把它停掉,或者它自动停掉后,我们再次提交时,任务中里执行时间没有做修改依然写的是上个月,提交后它会以为之前都没跑过,然后疯狂补回来,所以接下来会不断反复的执行这个任务,所以我们再次提交时,对开始执行时间也要进行修改。