hive陷入初始化状态,容器总数为-1

f87krz0w  于 2021-05-27  发布在  Hadoop
关注(0)|答案(2)|浏览(690)

我有一个从头开始的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 效果很好。
tez上的hive可以根据hdfs上的表进行计算,并成功快速地生成Map器和还原器。
mr上的hive可以根据minio/s3上的表进行计算。
这个问题的可能原因是什么?
附加tez ui屏幕截图:

版本信息:
hadoop 3.2.1版
Hive3.1.2
特兹0.9.2
minio版本2020-01-25t02-50-51z

hgb9j2n6

hgb9j2n61#

事实证明,问题是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安装指南并没有提到任何关于支持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
brqmpdu1

brqmpdu12#

我的团队也面临着类似的问题,但是在阅读hdfs的时候,map阶段总是停留在初始化阶段。
这可能有助于其他面临类似问题的人。实际上,应用程序主程序内存不足。将下面的值增加到12GB对我们有用。
tez.am.resource.memory.mb

相关问题