访问 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(这意味着我一个组件一个组件地部署它)。 使用 Tez 作为执行引擎设置 Hive。

在当前状态下,Hive 可以访问 HDFS 上的 table,但无法访问存储在 MinIO 上的 table(使用 s3a 文件系统实现)。

如下截图所示, 当执行 SELECT COUNT(*) FROM s3_table,

已检查的内容:

导致此问题的可能原因是什么?

附上 Tez UI 屏幕截图:

版本信息:

原来问题是必须在编译时显式启用 Tez 的 S3 支持。对于 hadoop 2.8+,要启用 S3 支持,必须使用以下命令从源代码编译 Tez:

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

之后,将生成的tez-x.y.z.tar.gz拖放到HDFS,将tez-x.x.x-minimal.tar.gz解压到$TEZ_LIB_DIR。然后它对我有用。针对 MinIO/S3 的 Hive 执行运行顺利。

但是,Tez installation guide didn't mention anything about enabling S3 support. Nor does the default Tez binary releases 使用 S3 或 Azure 支持构建。

(希望)完整的构建选项和陷阱实际上记录在 BUILDING.txt 中,它说:

However, to build against hadoop versions higher than 2.7.0, you will need to do the following:

For Hadoop version X where X >= 2.8.0

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

For recent versions of Hadoop (which do not bundle aws and azure by default), you can bundle AWS-S3 (2.7.0+) or Azure (2.7.0+) support:

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

我的团队遇到了类似的问题,但在从 HDFS 读取时,映射阶段永远停留在初始化。

这可能会帮助其他面临类似问题的人。实际上 application-master 正在变得 Out-of-Memory。 将以下值增加到 12 GB 对我们有用。

tez.am.resource.memory.mb