大數據ETL處理時遇到的坑


一、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 任務,假設它的提交時間是在上個月,所以它的開始執行時間也是在上個月。但由於某種原因要把它停掉,或者它自動停掉后,我們再次提交時,任務中里執行時間沒有做修改依然寫的是上個月,提交后它會以為之前都沒跑過,然后瘋狂補回來,所以接下來會不斷反復的執行這個任務,所以我們再次提交時,對開始執行時間也要進行修改。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM