Scala 纱线簇模式下火花作业的ClassNotFoundException

Scala 纱线簇模式下火花作业的ClassNotFoundException,scala,hadoop,apache-spark,yarn,phoenix,Scala,Hadoop,Apache Spark,Yarn,Phoenix,因此,我试图在通过Oozie工作流启动的纱线簇模式上运行Spark作业,但遇到了以下错误(相关stacktrace如下) java.sql.SQLException:错误103(08004):无法建立连接。 位于org.apache.phoenix.exception.SQLExceptionCode$Factory$1.newException(SQLExceptionCode.java:388) 位于org.apache.phoenix.exception.SQLExceptionInfo.

因此,我试图在通过Oozie工作流启动的纱线簇模式上运行Spark作业,但遇到了以下错误(相关stacktrace如下)

java.sql.SQLException:错误103(08004):无法建立连接。
位于org.apache.phoenix.exception.SQLExceptionCode$Factory$1.newException(SQLExceptionCode.java:388)
位于org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:145)
位于org.apache.phoenix.query.connectionQueryServiceSiml.openConnection(connectionQueryServiceSiml.java:296)
在org.apache.phoenix.query.ConnectionQueryServicesImpl.access$300(ConnectionQueryServicesImpl.java:179)
在org.apache.phoenix.query.connectionQueryServiceSiml$12.call(connectionQueryServiceSiml.java:1917)
位于org.apache.phoenix.query.ConnectionQueryServiceSiml$12.call(ConnectionQueryServiceSiml.java:1896)
位于org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:77)
位于org.apache.phoenix.query.ConnectionQueryServiceSiml.init(ConnectionQueryServiceSiml.java:1896)
位于org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:180)
位于org.apache.phoenix.phoenix.jdbc.PhoenixEmbeddedDriver.connect(PhoenixEmbeddedDriver.java:132)
位于org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:151)
位于java.sql.DriverManager.getConnection(DriverManager.java:664)
位于java.sql.DriverManager.getConnection(DriverManager.java:208)
...
原因:java.io.IOException:java.lang.reflect.InvocationTargetException
位于org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:240)
位于org.apache.hadoop.hbase.client.ConnectionManager.createConnection(ConnectionManager.java:414)
位于org.apache.hadoop.hbase.client.ConnectionManager.createConnectionInternal(ConnectionManager.java:323)
位于org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:144)
位于org.apache.phoenix.query.HConnectionFactory$HConnectionFactoryImpl.createConnection(HConnectionFactory.java:47)
位于org.apache.phoenix.query.connectionQueryServiceSiml.openConnection(connectionQueryServiceSiml.java:294)
... 28多
原因:java.lang.reflect.InvocationTargetException
位于sun.reflect.NativeConstructorAccessorImpl.newInstance0(本机方法)
位于sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
在sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
位于java.lang.reflect.Constructor.newInstance(Constructor.java:422)
位于org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238)
... 33多
原因:java.lang.UnsupportedOperationException:找不到org.apache.hadoop.hbase.ipc.controller.ClientRpcControllerFactory
位于org.apache.hadoop.hbase.util.ReflectionUtils.InstanceWithCustomctor(ReflectionUtils.java:36)
位于org.apache.hadoop.hbase.ipc.RpcControllerFactory.instantiate(RpcControllerFactory.java:58)
位于org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.createAsyncProcess(ConnectionManager.java:2317)
位于org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation(ConnectionManager.java:688)
位于org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation(ConnectionManager.java:630)
... 38多
原因:java.lang.ClassNotFoundException:org.apache.hadoop.hbase.ipc.controller.ClientRpcControllerFactory
位于java.net.URLClassLoader.findClass(URLClassLoader.java:381)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:424)
位于sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
位于java.lang.ClassLoader.loadClass(ClassLoader.java:357)
位于java.lang.Class.forName0(本机方法)
位于java.lang.Class.forName(Class.java:264)
位于org.apache.hadoop.hbase.util.ReflectionUtils.InstanceWithCustomctor(ReflectionUtils.java:32)
... 42多
一些背景资料:

  • 作业在spark 1.4.1上运行(在spark.conf文件中指定了正确的spark.warn.jar字段)
  • libpath被设置为程序的jar所在的hdfs目录
  • 未找到类org.apache.hadoop.hbase.ipc.controller.ClientRpcControllerFactory存在于phoenix-4.5.1-hbase-1.0-client.jar中。我已经在spark.driver.extraClassPath和spark.executor.extraClassPath文件中指定了这个jar。我还在pom文件中添加了phoenix core依赖项,因此该类也存在于着色项目jar中
迄今为止的观察结果:

  • 在spark.conf文件spark.driver.userClassPathFirst中添加一个额外的字段并将其设置为true可以消除classnotfound异常。但是,它也阻止我初始化spark上下文(空指针异常)。通过谷歌搜索,似乎包括这个字段会弄乱类路径,所以可能不是解决这个问题的方法,因为我甚至不能用这种方法初始化spark上下文
  • 我注意到在oozie标准日志中,我没有看到phoenix jar的类路径。所以,也许出于某种原因,spark.driver.extraClassPath和spark.executor.extraClassPath实际上并没有将jar作为一个extraClassPath来接收?我知道我正在指定正确的jar文件路径,因为其他作业都有具有相同参数的spark.conf文件
  • 我找到了一种让phoenix jar显示在类路径中(在oozie标准日志中)的方法,方法是将jar复制到程序jar所在的目录中。无论spark.executor.extraClassPath是否更改为指向新的jar位置,此操作都有效。但是,classnotfound异常仍然存在,即使在解压jar时我清楚地看到ClientRpcControllerFactory jar)
我尝试过的其他事情:

  • 我试着用sparkCo
    java.sql.SQLException: ERROR 103 (08004): Unable to establish connection.
        at org.apache.phoenix.exception.SQLExceptionCode$Factory$1.newException(SQLExceptionCode.java:388)
        at org.apache.phoenix.exception.SQLExceptionInfo.buildException(SQLExceptionInfo.java:145)
        at org.apache.phoenix.query.ConnectionQueryServicesImpl.openConnection(ConnectionQueryServicesImpl.java:296)
        at org.apache.phoenix.query.ConnectionQueryServicesImpl.access$300(ConnectionQueryServicesImpl.java:179)
        at org.apache.phoenix.query.ConnectionQueryServicesImpl$12.call(ConnectionQueryServicesImpl.java:1917)
        at org.apache.phoenix.query.ConnectionQueryServicesImpl$12.call(ConnectionQueryServicesImpl.java:1896)
        at org.apache.phoenix.util.PhoenixContextExecutor.call(PhoenixContextExecutor.java:77)
        at org.apache.phoenix.query.ConnectionQueryServicesImpl.init(ConnectionQueryServicesImpl.java:1896)
        at org.apache.phoenix.jdbc.PhoenixDriver.getConnectionQueryServices(PhoenixDriver.java:180)
        at org.apache.phoenix.jdbc.PhoenixEmbeddedDriver.connect(PhoenixEmbeddedDriver.java:132)
        at org.apache.phoenix.jdbc.PhoenixDriver.connect(PhoenixDriver.java:151)
        at java.sql.DriverManager.getConnection(DriverManager.java:664)
        at java.sql.DriverManager.getConnection(DriverManager.java:208)
        ...
    Caused by: java.io.IOException: java.lang.reflect.InvocationTargetException
        at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:240)
        at org.apache.hadoop.hbase.client.ConnectionManager.createConnection(ConnectionManager.java:414)
        at org.apache.hadoop.hbase.client.ConnectionManager.createConnectionInternal(ConnectionManager.java:323)
        at org.apache.hadoop.hbase.client.HConnectionManager.createConnection(HConnectionManager.java:144)
        at org.apache.phoenix.query.HConnectionFactory$HConnectionFactoryImpl.createConnection(HConnectionFactory.java:47)
        at org.apache.phoenix.query.ConnectionQueryServicesImpl.openConnection(ConnectionQueryServicesImpl.java:294)
        ... 28 more
    Caused by: java.lang.reflect.InvocationTargetException
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:422)
        at org.apache.hadoop.hbase.client.ConnectionFactory.createConnection(ConnectionFactory.java:238)
        ... 33 more
    Caused by: java.lang.UnsupportedOperationException: Unable to find org.apache.hadoop.hbase.ipc.controller.ClientRpcControllerFactory
        at org.apache.hadoop.hbase.util.ReflectionUtils.instantiateWithCustomCtor(ReflectionUtils.java:36)
        at org.apache.hadoop.hbase.ipc.RpcControllerFactory.instantiate(RpcControllerFactory.java:58)
        at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.createAsyncProcess(ConnectionManager.java:2317)
        at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:688)
        at org.apache.hadoop.hbase.client.ConnectionManager$HConnectionImplementation.<init>(ConnectionManager.java:630)
        ... 38 more
    Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.hbase.ipc.controller.ClientRpcControllerFactory
        at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:264)
        at org.apache.hadoop.hbase.util.ReflectionUtils.instantiateWithCustomCtor(ReflectionUtils.java:32)
        ... 42 more
    
    java.lang.ClassNotFoundException: NONEXISTINGCLASS
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:264)