我从头开始安装了Hadoop + Hive + Tez(这意味着我逐个组件部署了它)。
使用Tez作为执行引擎来设置Hive。

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

如以下屏幕截图所示,
hadoop - 访问S3/MinIO上的数据时,hive-on-tez映射器停留在INITIALIZING中,容器总数为-1-LMLPHP
当执行SELECT COUNT(*) FROM s3_table时,

  • Tez执行永远陷入困境
  • Map 1始终处于INITIALIZING状态
  • Map 1始终具有-1的总计数和-1的未决计数。 (为什么要使用-1?)

  • 事情已经检查了:
  • Hadoop可以毫无问题地访问MinIO / S3。例如,hdfs dfs -ls s3a://bucketname效果很好。
  • Tive的Hive可以针对HDFS上的表进行计算,并且可以成功快速地生成映射器和化简器。
  • Hive-on-MR可以针对MinIO / S3上的表进行计算而不会出现问题。

  • 造成此问题的可能原因是什么?

    附加Tez UI屏幕截图:
    hadoop - 访问S3/MinIO上的数据时,hive-on-tez映射器停留在INITIALIZING中,容器总数为-1-LMLPHP

    版本信息:
  • Hadoop 3.2.1
  • hive 3.1.2
  • Tez 0.9.2
  • MinIO版本.2020-01-25T02-50-51Z
  • 最佳答案

    事实证明,问题在于必须在编译时显式启用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/

    10-12 18:36