本文匯總了Hive使用時的常見問題。

說明

作業長時間處于等待狀態,如何處理?

您可以通過以下步驟定位問題:
  1. 在EMR控制臺的訪問鏈接與端口頁面,單擊YARN UI所在行的鏈接。
  2. 單擊Application ID。
  3. 單擊Tracking URL的鏈接。
    可以看到有多個作業處于等待狀態。 Tracking URL
  4. 在左側導航中,單擊Scheduler
    即可進入隊列,您可以看一下當前隊列的繁忙程度,來分析是因為隊列中沒有空閑資源,還是當前任務確實比較耗時。如果是隊列資源緊張,您可以考慮切換到空閑隊列,否則需要優化代碼。 Scheduler

Map端是否讀取了小文件?

您可以通過以下步驟定位問題:
  1. 在EMR控制臺的訪問鏈接與端口頁面,單擊YARN UI所在行的鏈接。
  2. 單擊Application ID。
    進入Map Task的詳情頁面,可以看到每個Map Task讀取的數據量,如下圖所示,讀取的數據量是2個字節記錄。如果大部分的Map Task讀取的文件量都比較小,就需要考慮小文件合并。 Map

    您也可以通過查看Map Task的Log,獲取更多的信息。

Reduce Task任務耗時,是否出現了數據傾斜?

您可以通過以下步驟定位問題:
  1. 在EMR控制臺的訪問鏈接與端口頁面,單擊YARN UI所在行的鏈接。
  2. 單擊Application ID。
  3. 在Reduce Task列表頁面,按照完成時間逆序排序,找出Top耗時的Reduce Task任務。Reduce Task
  4. 單擊Task的Name鏈接。
  5. 在Task詳情頁面,單擊左側的Counters。Counters
    查看當前Reduce Task中Reduce Input bytes和Reduce shuffle bytes的信息,如果比其他的Task處理的數據量大很多,則說明出現了傾斜問題。 Reduce Input bytes

如何預估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目錄。
  • 解決方法:
    1. 需要您手動指定Partitions目錄。
      alter table storage_log add partition(ds=123);
    2. 查詢返回數據。
      select * from storage_log;
      返回如下數據。
           OK
          abcd    123
          efgh    123