簡體   English   中英

訪問 S3/MinIO 上的數據時,hive-on-tez 映射器卡在初始化中,容器總數為 -1

[英]hive-on-tez mapper stuck in INITIALIZING with total number of containers being -1 when accessing data on S3/MinIO

我從頭開始設置了 Hadoop+Hive+Tez(這意味着我逐個組件地部署了它)。 Hive 是使用 Tez 作為執行引擎設置的。

在當前狀態下,Hive 可以訪問 HDFS 上的表,但無法訪問存儲在 MinIO 上的表(使用s3a文件系統實現)。

如以下截圖所示, 在此處輸入圖片說明 執行SELECT COUNT(*) FROM s3_table

  • Tez 執行永遠卡住
  • Map 1始終處於INITIALIZING狀態
  • Map 1的總計數始終為-1 ,待處理計數始終為-1 (為什么-1 ?)

已經檢查的事情:

  • Hadoop 可以毫無問題地訪問 MinIO/S3。 例如, hdfs dfs -ls s3a://bucketname效果很好。
  • Hive-on-Tez 可以針對 HDFS 上的表進行計算,並成功且快速地生成映射器和化簡器。
  • Hive-on-MR 可以毫無問題地針對 MinIO/S3 上的表進行計算。

導致此問題的可能原因是什么?

附上 Tez UI 截圖: 在此處輸入圖片說明

版本信息:

  • Hadoop 3.2.1
  • 蜂巢 3.1.2
  • Tez 0.9.2
  • MinIO RELEASE.2020-01-25T02-50-51Z

事實證明,問題在於必須在編譯時顯式啟用 Tez 的 S3 支持。 對於 hadoop 2.8+,要啟用 S3 支持,必須使用以下命令從源代碼編譯 Tez:

mvn clean package -DskipTests=true -Dmaven.javadoc.skip=true -Paws -Phadoop28 -P\!hadoop27

之后,將生成的tez-xyztar.gz放到 HDFS 並將tez-xxx-minimal.tar.gz提取到$TEZ_LIB_DIR 然后它對我有用。 針對 MinIO/S3 的 Hive 執行運行流暢。

但是, Tez 安裝指南沒有提到有關啟用 S3 支持的任何內容。 默認的 Tez 二進制版本也不使用 S3 或 Azure 支持構建。

(希望)完整的構建選項和陷阱實際上記錄在BUILDING.txt 中,它說:

但是,要針對高於 2.7.0 的 hadoop 版本進行構建,您需要執行以下操作:

對於 Hadoop 版本 X,其中 X >= 2.8.0

 $ mvn package -Dhadoop.version=${X} -Phadoop28 -P\\!hadoop27

對於最新版本的 Hadoop(默認情況下不捆綁 aws 和 azure),您可以捆綁 AWS-S3 (2.7.0+) 或 Azure (2.7.0+) 支持:

 $ mvn package -Dhadoop.version=${X} -Paws -Pazure

我的團隊遇到了類似的問題,但在從 HDFS 讀取時,映射階段永遠停留在初始化階段。

這可能會幫助其他面臨類似問題的人。 實際上,應用程序大師正在內存不足。 將以下值增加到 12 GB 對我們有用。

tez.am.resource.memory.mb

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM