毛线客户端:用户类引发异常:java.lang.NoClassDefFoundError:org / apache / spark / sql / DataFrame

时间:2019-08-27 10:50:56

标签: apache-spark apache-spark-sql yarn phoenix

我正在尝试在内存中加载一些凤凰表。请为我在下面遇到的问题提供帮助:

使用Spark提交命令:

echo do_shortcode('[products limit="8" columns="4" category="Skript" orderby="popularity" paginate="true"]');

我在下面提到错误:

 spark2-submit --name test \
 --master yarn \
 --deploy-mode cluster \
 --conf spark.driver.extraJavaOptions="-Denv=dev" \
--conf "spark.driver.extraClassPath=/tmp/disruptor-3.3.6.jar:/tmp/phoenix-spark-4.14.1-HBase-1.2.jar:/opt/cloudera/parcels/APACHE_PHOENIX-4.14.0-cdh5.14.2.p0.3/lib/phoenix/phoenix-4.14.0-cdh5.14.2-client.jar"    \
--conf "spark.executor.extraClassPath=/tmp/disruptor-3.3.6.jar:/tmp/phoenix-spark-4.14.1-HBase-1.2.jar:/opt/cloudera/parcels/APACHE_PHOENIX-4.14.0-cdh5.14.2.p0.3/lib/phoenix/phoenix-4.14.0-cdh5.14.2-client.jar"    \
--jars /tmp/dod-spark-jobs-1.0-SNAPSHOT.jar   \
/tmp/dod-spark-jobs-1.0-SNAPSHOT.jar  

请在pom文件代码下方找到:

User class threw exception: java.lang.NoClassDefFoundError:  org/apache/spark/sql/DataFrame 
at java.lang.Class.getDeclaredMethods0(Native Method) 
at java.lang.Class.privateGetDeclaredMethods(Class.java:2701) 
at java.lang.Class.getDeclaredMethod(Class.java:2128) 
at java.io.ObjectStreamClass.getPrivateMethod   (ObjectStreamClass.java:1475) 

我无法更改phoenix或hbase master上的实际版本。因此,我尝试将其添加到extrasclasspath中。

如果我给spark.master = local,那么代码工作正常。我一试到纱线簇就无法使用。

2 个答案:

答案 0 :(得分:0)

您要使用的凤凰版本和使用的火花之间似乎存在冲突。

尝试着色:https://stackoverflow.com/a/57661166/11968022

答案 1 :(得分:0)

我们正在使用Phoenix 4.7.x版本,该版本可以同时使用Spark 1.x和Spark 2版本。在火花加载期间加载phoenix驱动程序时遇到问题。

原因是默认情况下它使用Spark 1.x库,但我们使用Spark 2库加载Spark执行程序。因此,强制凤凰引擎使用Spark 2库。请注意,配置和jar的顺序很重要,尽管有点奇怪。

export conf1=" --conf spark.executor.extraClassPath=/usr/hdp/2.6.5.0-292/phoenix/phoenix-4.7.0.2.6.5.0-292-spark2.jar:/usr/hdp/2.6.5.0-292/phoenix/phoenix-4.7.0.2.6.5.0-292-client.jar:/usr/hdp/current/hadoop-client/conf/:/usr/hdp/current/hbase-client/conf/"
export conf2=" --conf spark.driver.extraClassPath=/usr/hdp/2.6.5.0-292/phoenix/phoenix-4.7.0.2.6.5.0-292-spark2.jar:/usr/hdp/2.6.5.0-292/phoenix/phoenix-4.7.0.2.6.5.0-292-client.jar:/usr/hdp/current/hadoop-client/conf/:/usr/hdp/current/hbase-client/conf/"
export jars="  --jars /usr/hdp/2.6.5.0-292/phoenix/phoenix-4.7.0.2.6.5.0-292-spark2.jar,/usr/hdp/2.6.5.0-292/phoenix/phoenix-4.7.0.2.6.5.0-292-client.jar"

这已解决了类加载器的问题。