我从头开始安装了Hadoop + Hive + Tez(这意味着我逐个组件部署了它)。
使用Tez作为执行引擎来设置Hive。
在当前状态下,Hive可以访问HDFS上的表,但不能访问存储在MinIO上的表(使用s3a
文件系统实现)。
如以下屏幕截图所示,
当执行SELECT COUNT(*) FROM s3_table
时,
Map 1
始终处于INITIALIZING
状态Map 1
始终具有-1
的总计数和-1
的未决计数。 (为什么要使用-1
?)事情已经检查了:
hdfs dfs -ls s3a://bucketname
效果很好。 造成此问题的可能原因是什么?
附加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没有提及有关启用S3支持的任何内容。 the default Tez binary releases也不具有S3或Azure支持。
(希望)完整的构建选项和陷阱实际上记录在BUILDING.txt中,其中说:
关于hadoop - 访问S3/MinIO上的数据时,hive-on-tez映射器停留在INITIALIZING中,容器总数为-1,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/60704242/