本文匯總了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目錄。