[英]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
,
Map 1
始終處於INITIALIZING
狀態Map 1
的總計數始終為-1
,待處理計數始終為-1
。 (為什么-1
?)已經檢查的事情:
hdfs dfs -ls s3a://bucketname
效果很好。導致此問題的可能原因是什么?
版本信息:
事實證明,問題在於必須在編譯時顯式啟用 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.