首页 文章

Spark上的Hive:缺少<spark-assembly * .jar>

提问于
浏览
2

我正在运行Hive 2.1.1,Spark 2.1.0和Hadoop 2.7.3 .

我尝试按照Hive on Spark: Getting Started构建Spark:

./dev/make-distribution.sh --name“hadoop2-without-hive”--tgz“-Pyarn,hadoop-provided,hadoop-2.7,parquet-provided”

但是,我在spark目录下找不到任何spark-assembly jar文件( find . -name "spark-assembly*.jar" 什么都不返回) . 我尝试了 export SPARK_HOME=/home/user/spark ,而不是将火花装配 jar 连接到 HIVE_HOME/lib .

我直接得到以下Hive错误:

0: jdbc:hive2://localhost:10000> set hive.execution.engine=spark;
0: jdbc:hive2://localhost:10000> insert into test (id, name) values (1, 'test1');
Error: Error running query: java.lang.NoClassDefFoundError: scala/collection/Iterable (state=,code=0)

我认为错误是由缺少火花装配 jar 引起的 .

我怎么能 Build /我在哪里可以找到那些spark-assembly jar文件?

我怎么能解决上面的错误?

谢谢!

3 回答

  • 3

    首先,Spark不会从2.0.0构建 spark-assembly.jar ,而是将所有依赖关系jar构建到目录 $SPARK_HOME/jars

    此外,Hive不支持Spark的每个版本,实际上它具有强大的版本兼容性限制,可以在Spark上运行Hive . 取决于您使用的是哪个版本的Hive,您始终可以在Hive的 pom.xml 文件中找到相应的Spark版本 . 对于 Hive 2.1.1spark version specified in pom.xml是:

    <spark.version> 1.6.0 </spark.version>

    正如您已经知道的那样,您需要在没有蜂巢支持的情况下构建火花 . 我不知道为什么但Hive on Spark - Getting Started中的命令对我不起作用,最后我成功了以下命令:

    mvn -Pyarn -Phadoop-2.6 -Dscala-2.11 -DskipTests clean package
    

    我之前遇到的其他一些故障排除技巧(希望你不会见面):

    • 由于未能找到slf4f或hadoop相关类,启动Spark Master失败,运行 export SPARK_DIST_CLASSPATH=$(hadoop classpath) 并再试一次

    • 无法加载snappy本机库,这是由于类路径中没有snappy依赖,或者hadoop classpath下的snappy lib不是Spark的正确版本 . 您可以下载正确版本的snappy lib并将其放在 $SPARK_HOME/lib/ 下,然后运行 export SPARK_DIST_CLASSPATH=$SPARK_HOME/lib/*:$(hadoop classpath) 并再试一次 .

    希望这可能会有所帮助,一切顺利 .

  • 0

    是的,他们没有从spark 2.0.0开始构建spark-assembly.jar文件 . jar目录中提供了独立的小jar文件 .

    https://issues.apache.org/jira/browse/SPARK-11157

    https://issues.apache.org/jira/secure/attachment/12767129/no-assemblies.pdf

  • 0

    找到 . -iname'* spark *'

    不会找到任何与火花相关的 jar

    但是,我通过mac安装brew安装Hive 2.1.0 . 问题还在 .

    看一下

    Hive on Spark: Getting Started

相关问题