我有一个从头开始的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
2条答案
按热度按时间hgb9j2n61#
事实证明,问题是tez的s3支持必须在编译时显式启用。对于hadoop 2.8+,要启用s3支持,必须使用以下命令从源代码处编译tez:
之后,放下生成的
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
对于最新版本的hadoop(默认情况下不捆绑aws和azure),可以捆绑aws-s3(2.7.0+)或azure(2.7.0+)支持:
brqmpdu12#
我的团队也面临着类似的问题,但是在阅读hdfs的时候,map阶段总是停留在初始化阶段。
这可能有助于其他面临类似问题的人。实际上,应用程序主程序内存不足。将下面的值增加到12GB对我们有用。
tez.am.resource.memory.mb