首页 文章

为什么从Hive读取失败并出现“java.lang.ClassNotFoundException:Class org.apache.hadoop.fs.s3a.S3AFileSystem not found”?

提问于
浏览
1

我使用Spark v1.6.1和Hive v1.2.x与Python v2.7

对于Hive,我有一些表(ORC文件)存储在HDFS中,一些存储在S3中 . 如果我们尝试连接2个表,其中一个在HDFS中,另一个在S3中,则抛出 java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3a.S3AFileSystem not found .

例如,这在查询HDFS中的HIVE表时有效 .

df1 = sqlContext.sql('select * from hdfs_db.tbl1')

这在S3中查询HIVE表时有效 .

df2 = sqlContext.sql('select * from s3_db.tbl2')

下面的代码抛出上面的 RuntimeException .

sql = """
select *
from hdfs_db.tbl1 a
 join s3_db.tbl2 b on a.id = b.id
"""
df3 = sqlContext.sql(sql)

我们正在从HDFS迁移到S3,因此这就是存储支持HIVE表(基本上是HDFS和S3中的ORC文件)存在差异的原因 . 一个有趣的事情是,如果我们使用 DBeaverbeeline 客户端连接到Hive并发出连接查询,它就可以工作 . 我也可以使用 sqlalchemy 发出连接查询并获得结果 . 此问题仅在Spark的sqlContext上显示 .

有关执行和环境的更多信息:此代码在 Jupyter 笔记本上的边缘节点上执行(已经有spark,hadoop,hive,tez等...设置/配置) . 对于Python v2.7,Python环境由 conda 管理 . Jupyter以 pyspark 开头如下 .

IPYTHON_OPTS="notebook --port 7005 --notebook-dir='~/' --ip='*' --no-browser" \
 pyspark \
 --queue default \
 --master yarn-client

当我转到 Environment 下的Spark应用程序UI时,以下 Classpath Entries 具有以下内容 .

  • /usr/hdp/2.4.2.0-258/spark/lib/datanucleus-api-jdo-3.2.6.jar

  • /usr/hdp/2.4.2.0-258/spark/lib/datanucleus-core-3.2.10.jar

  • /usr/hdp/2.4.2.0-258/spark/lib/datanucleus-rdbms-3.2.9.jar

  • /usr/hdp/2.4.2.0-258/spark/lib/spark-assembly-1.6.1.2.4.2.0-258-hadoop2.7.1.2.4.2.0-258.jar

  • / usr / hdp / current / hadoop-client / conf /

  • / usr / hdp / current / spark-historyserver / conf /

sun.boot.class.path 具有以下值: /usr/jdk64/jdk1.8.0_60/jre/lib/resources.jar:/usr/jdk64/jdk1.8.0_60/jre/lib/rt.jar:/usr/jdk64/jdk1.8.0_60/jre/lib/sunrsasign.jar:/usr/jdk64/jdk1.8.0_60/jre/lib/jsse.jar:/usr/jdk64/jdk1.8.0_60/jre/lib/jce.jar:/usr/jdk64/jdk1.8.0_60/jre/lib/charsets.jar:/usr/jdk64/jdk1.8.0_60/jre/lib/jfr.jar:/usr/jdk64/jdk1.8.0_60/jre/classes .

spark.executorEnv.PYTHONPATH 具有以下值: /usr/hdp/2.4.2.0-258/spark/python/lib/py4j-0.9-src.zip:/usr/hdp/2.4.2.0-258/spark/python/:<CPS>{{PWD}}/pyspark.zip<CPS>{{PWD}}/py4j-0.9-src.zip .

Hadoop发行版是通过CDH: Hadoop 2.7.1.2.4.2.0-258

1 回答

相关问题