【Kylin】【Hive】【hive-testbench】tpch 数据集生成失败,提示报错class org.apache.hadoop.hdfs.web.HftpFileSystem ...

描述

在个人的 apache hadoop3.2.1 版本的集群下,为了验证 kylin 的构建和查询性能,找到了对应的 Kylin 官方推荐使用的 hive-testbench 数据集生成仓库。

在执行了相关命令,如下。

git clone https://github.com/hortonworks/hive-testbench.git
cd hive-testbench/
./tpch-build.sh
./tpch-setup.sh 2

在最后的 ./tpch-setup.sh 2  命令时候,提示报错如下:

# ./tpch-setup.sh 2
ls: `/tmp/tpch-generate/2/lineitem': No such file or directory
Generating data at scale factor 2.
Exception in thread "main" java.lang.IllegalAccessError: class org.apache.hadoop.hdfs.web.HftpFileSystem cannot access its superinterface org.apache.hadoop.hdfs.web.TokenAspect$TokenManagementDelegator
   at java.lang.ClassLoader.defineClass1(Native Method)
   at java.lang.ClassLoader.defineClass(ClassLoader.java:756)
   at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
   at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
   at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
   at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
   at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
   at java.security.AccessController.doPrivileged(Native Method)
   at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:418)
   at java.lang.ClassLoader.loadClass(ClassLoader.java:351)
   at java.lang.Class.forName0(Native Method)
   at java.lang.Class.forName(Class.java:348)
   at java.util.ServiceLoader$LazyIterator.nextService(ServiceLoader.java:370)
   at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:404)
   at java.util.ServiceLoader$1.next(ServiceLoader.java:480)
   at org.apache.hadoop.fs.FileSystem.loadFileSystems(FileSystem.java:3151)
   at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:3196)
   at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:3235)
   at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:123)
   at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:3286)
   at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:3254)
   at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:478)
   at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:226)
   at org.notmysock.tpch.GenTable.genInput(GenTable.java:171)
   at org.notmysock.tpch.GenTable.run(GenTable.java:98)
   at org.apache.hadoop.util.ToolRunner.run(ToolRunner.java:76)
   at org.notmysock.tpch.GenTable.main(GenTable.java:54)
   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
   at java.lang.reflect.Method.invoke(Method.java:498)
   at org.apache.hadoop.util.RunJar.run(RunJar.java:313)
   at org.apache.hadoop.util.RunJar.main(RunJar.java:227)
ls: `/tmp/tpch-generate/2/lineitem': No such file or directory
Data generation failed, exiting.

Root Cause

一开始,看见了对应的目录不存在,立即想到的是对应该hdfs文件夹路径 是不是权限不够,导致了文件目录生成失败,从而导致了和整个流程的失败。

但是简单通过了 hdfs dfs -mkdir -p /tmp/tpch-generate/ 发现,实际没有权限的问题。

之后,查看到了https://github.com/hortonworks/hive-testbench 中Readme,提示说在 hadoop 2.2 版本及以上才可以使用。

这时候就可以怀疑,是不是目前的 这个仓库是不是 hadoop 的版本支持不行。

于是,直接检查 tpch-gen/pom.xml 文件,发现目前的 hadoop-client 版本才是 2.4.0,显然是不能支持当前个人的 apache hadoop 3.2.1 的集群平台的。

直接替换为 hadoop-client 版本为3.2.1 即可。

解决

我们不能直接替换就继续运行,可能还会出现其他的问题。

所以,我们需要移除现有的本地的 hive-testbench 仓库代码,然后重新下载,重复执行整个代码命令行即可。

步骤如下:

1. 移除现有的机器上的 hive-testbench 仓库代码 并重新下载。

# rm -rf /path/to/hive-testbench
# git clone https://github.com/hortonworks/hive-testbench.git

2. 修改 tpch-gen/pom.xml,从 2.4.0 变更为 3.2.1


    org.apache.hadoop
    hadoop-client
    2.4.0
    compile


   org.apache.hadoop
   hadoop-client
   3.2.1
   compile

3. 修改 settings/下的3 个 init.sql, load-flat.sql,load-partioned.sql 文件 中的配置项 set hive.optimize.sort.dynamic.partition.threshold=0; 为 set hive.optimize.sort.dynamic.partition=true;
由于目前 hadoop 集群依赖的也是比较新的 hive 3.1.2 版本,导致在修改了 pom 文件之后,同样的提示了 hive 中的 hive.optimize.sort.dynamic.partition.threshold=0 配置无效,所以一并修改了即可。

4. 重新运行相关的命令行,生成 tpch 数据集。

cd hive-testbench/
./tpch-build.sh
./tpch-setup.sh 2

最后结果:

【Kylin】【Hive】【hive-testbench】tpch 数据集生成失败,提示报错class org.apache.hadoop.hdfs.web.HftpFileSystem ..._第1张图片

 

版权所有,谢绝转载。

你可能感兴趣的:(Apache,Kylin,大数据,hadoop,hive,kylin)