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