本文匯總了Hive使用時的常見問題。
說明
- 對於Hive作業報錯或其他異常問題請參見Hive作業異常排查及處理。
- 對於Hive Metastore和HiveServer等服務相關的異常請參見Hive服務異常排查及處理。
作業長時間處於等待狀態,如何處理?
您可以通過以下步驟定位問題:
- 在EMR控制台的訪問連結與連接埠頁面,單擊YARN UI所在行的連結。
- 單擊Application ID。
- 單擊Tracking URL的連結。可以看到有多個作業處於等待狀態。

- 在左側導航中,單擊Scheduler。即可進入隊列,您可以看一下當前隊列的繁忙程度,來分析是因為隊列中沒有空閑資源,還是當前任務確實比較耗時。如果是隊列資源緊張,您可以考慮切換到空閑隊列,否則需要最佳化代碼。

Map端是否讀取了小檔案?
您可以通過以下步驟定位問題:
- 在EMR控制台的訪問連結與連接埠頁面,單擊YARN UI所在行的連結。
- 單擊Application ID。進入Map Task的詳情頁面,可以看到每個Map Task讀取的資料量,如下圖所示,讀取的資料量是2個位元組記錄。如果大部分的Map Task讀取的檔案量都比較小,就需要考慮小檔案合并。

您也可以通過查看Map Task的Log,擷取更多的資訊。
Reduce Task任務耗時,是否出現了資料扭曲?
您可以通過以下步驟定位問題:
- 在EMR控制台的訪問連結與連接埠頁面,單擊YARN UI所在行的連結。
- 單擊Application ID。
- 在Reduce Task列表頁面,按照完成時間逆序排序,找出Top耗時的Reduce Task任務。

- 單擊Task的Name連結。
- 在Task詳情頁面,單擊左側的Counters。
查看當前Reduce Task中Reduce Input bytes和Reduce shuffle bytes的資訊,如果比其他的Task處理的資料量大很多,則說明出現了傾斜問題。
如何預估Hive作業並發量的上限值?
Hive作業並發量與HiveServer2的記憶體以及master執行個體個數有關係。您可以參考以下公式預估Hive作業並發量的上限值。
max_num = master_num * max(5, hive_server2_heapsize/512)上述公式中涉及到的參數資訊如下:
- master_num:叢集master執行個體的個數。
- hive_server2_heapsize:hive-env.sh中的配置項,預設值是512 MB。
例如:叢集有3個master執行個體,hive_server2_heapsize配置為4 GB,那麼根據上述公式可以預估出Hive作業的並發量上限值為24,即可以同時運行24個指令碼。
為什麼Hive建立的外部表格沒有資料?
- 問題描述:建立完外部表格後查詢沒有資料返回。外部表格建立語句樣本如下。
CREATE EXTERNAL TABLE storage_log(content STRING) PARTITIONED BY (ds STRING) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t' STORED AS TEXTFILE LOCATION 'oss://log-12453****/your-logs/airtake/pro/storage';查詢沒有資料返回。select * from storage_log; - 問題分析:Hive不會自動關聯指定Partitions目錄。
- 解決方案:
- 需要您手動指定Partitions目錄。
alter table storage_log add partition(ds=123); - 查詢返回資料。
select * from storage_log;返回如下資料。OK abcd 123 efgh 123
- 需要您手動指定Partitions目錄。