大数据ETL处理时遇到的坑

2021/9/10 23:09:48

本文主要是介绍大数据ETL处理时遇到的坑,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

目录
  • 一、Sqoop导入时代码规范
  • 二、Sqoop导出时代码规范
  • 三、在Hue中执行的Workflow时,编写Hive Sql脚本注意的点
  • 四、在Hue中的Schedule会突然反复执行

一、Sqoop导入时代码规范

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-drop-import-delims

  在导入数据到hive时,去掉数据中的\r\n\013\010这样的字符。原因是,有很多字段所存储的数据比较复杂,包含回车换行等,如果不做任何处理导入到 hdfs 中,就会发现数据错乱等情况,所以我们在导入完数据后一定要查看一遍表的数据是否有问题。

  • --null-string "\N" --null-non-string "\N"

  这两个参数一般是连续使用,并且注意一定是双引号包含 \N,作用就是让原来关系型数据库的表中String类型的字段,并且存储的数据是空值NULL的情况,到hdfs中也是以空值存储。如果不加这两个参数,就会存储字符串型的NULL或null,在查询的的时候不能用 is null来过滤,而是以 =="NULL" 或 =="null" 过滤。

二、Sqoop导出时代码规范

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"
  • --input-fields-terminated-by "\t"

  这个配置是指定导出数据的分隔符,特别需要注意的是,最好用双引号来包裹 \t ,原因是在不同的执行命令窗口可能会发生导出失败的状况,比如说在Hue中的 Sqoop 执行命令文本框中运行,单引号是不行的。 null-string "\N" 这个参数也是,虽然官方文档中写的也是单引号,但在某些命令窗口中执行代码是失败的。

三、在Hue中执行的Workflow时,编写Hive Sql脚本注意的点

  • 脚本文件的编码格式和档案格式

  我们在windows系统下编辑的 .sh 文件,需要把文件编码改成** utf-8-bom **格式,并且档案格式改成 Unix,并且多加两行回车,否则在直接上传文件后,Linux系统执行会出脚本时会出问题。
  对此,我们可以直接在Hue中找到该文件,然后在Hue页面中编辑,然后保存,文件会自动变成Linux可以识别并可执行的文件。

  • 脚本中出现中文空格

  还有一种情况,就是在脚本文件中出现中文空格的情况,执行脚本时也会报错。这种情况真的变态,去yarn里面查看日志,也找不到error信息。解决办法是,在Hue界面的 hive 执行命令窗口中把要执行的 Sql 给 Format 一下,然后再粘贴到文件中,这样中文空格就爱去掉了。

四、在Hue中的Schedule会突然反复执行

  原因是,我们停止了原来提交的 Schedule 任务,假设它的提交时间是在上个月,所以它的开始执行时间也是在上个月。但由于某种原因要把它停掉,或者它自动停掉后,我们再次提交时,任务中里执行时间没有做修改依然写的是上个月,提交后它会以为之前都没跑过,然后疯狂补回来,所以接下来会不断反复的执行这个任务,所以我们再次提交时,对开始执行时间也要进行修改。



这篇关于大数据ETL处理时遇到的坑的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!


扫一扫关注最新编程教程