[英]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.