[ https://issues.apache.org/jira/browse/PHOENIX-1926?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14645861#comment-14645861 ]
Dmitry Goldenberg commented on PHOENIX-1926: -------------------------------------------- It looks like the actual mojo should be: spark-submit \ ................ --conf "spark.executor.extraClassPath=.../hbase-protocol-<version>.jar ................ This causes the executor side to work. It looks like adding the jar to --driver-class-path may be needed if the driver is interfacing with HBase via Phoenix, or if one is running Spark locally/non-clustered. In addition, I'm seeing the need to set hbase.defaults.for.version.skip=true in the hbase-defaults.xml file which means having to add $HBASE_HOME/conf to this classpath as well, otherwise another error shows up: java.lang.RuntimeException: hbase-default.xml file seems to be for and old version of HBase (null), this version is Unknown. My hope is to actually roll an hbase-default.xml on the classpath not necessarily in $HBASE_HOME because HBase may not be collocated with our Spark jobs. > Attempt to update a record in HBase via Phoenix from a Spark job causes > java.lang.IllegalAccessError: class > com.google.protobuf.HBaseZeroCopyByteString cannot access its superclass > com.google.protobuf.LiteralByteString > -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- > > Key: PHOENIX-1926 > URL: https://issues.apache.org/jira/browse/PHOENIX-1926 > Project: Phoenix > Issue Type: Bug > Affects Versions: 4.3.1 > Environment: centos x86_64 GNU/Linux > Phoenix: 4.3.1 custom built for HBase 0.98.9, Hadoop 2.4.0 > HBase: 0.98.9-hadoop2 > Hadoop: 2.4.0 > Spark: spark-1.3.0-bin-hadoop2.4 > Reporter: Dmitry Goldenberg > Priority: Critical > > Performing an UPSERT from within a Spark job, > UPSERT INTO items(entry_id, prop1, pop2) VALUES(?, ?, ?) > causes > 15/04/26 18:22:06 WARN client.HTable: Error calling coprocessor service > org.apache.phoenix.coprocessor.generated.MetaDataProtos$MetaDataService for > row \x00\x00ITEMS > java.util.concurrent.ExecutionException: java.lang.IllegalAccessError: class > com.google.protobuf.HBaseZeroCopyByteString cannot access its superclass > com.google.protobuf.LiteralByteString > at java.util.concurrent.FutureTask.report(FutureTask.java:122) > at java.util.concurrent.FutureTask.get(FutureTask.java:192) > at > org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1620) > at > org.apache.hadoop.hbase.client.HTable.coprocessorService(HTable.java:1577) > at > org.apache.phoenix.query.ConnectionQueryServicesImpl.metaDataCoprocessorExec(ConnectionQueryServicesImpl.java:1007) > at > org.apache.phoenix.query.ConnectionQueryServicesImpl.getTable(ConnectionQueryServicesImpl.java:1257) > at > org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:350) > at > org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:311) > at > org.apache.phoenix.schema.MetaDataClient.updateCache(MetaDataClient.java:307) > at > org.apache.phoenix.compile.FromCompiler$BaseColumnResolver.createTableRef(FromCompiler.java:333) > at > org.apache.phoenix.compile.FromCompiler$SingleTableColumnResolver.<init>(FromCompiler.java:237) > at > org.apache.phoenix.compile.FromCompiler$SingleTableColumnResolver.<init>(FromCompiler.java:231) > at > org.apache.phoenix.compile.FromCompiler.getResolverForMutation(FromCompiler.java:207) > at > org.apache.phoenix.compile.UpsertCompiler.compile(UpsertCompiler.java:248) > at > org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:503) > at > org.apache.phoenix.jdbc.PhoenixStatement$ExecutableUpsertStatement.compilePlan(PhoenixStatement.java:494) > at > org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:295) > at > org.apache.phoenix.jdbc.PhoenixStatement$2.call(PhoenixStatement.java:288) > at org.apache.phoenix.call.CallRunner.run(CallRunner.java:53) > at > org.apache.phoenix.jdbc.PhoenixStatement.executeMutation(PhoenixStatement.java:287) > at > org.apache.phoenix.jdbc.PhoenixStatement.execute(PhoenixStatement.java:219) > at > org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:174) > at > org.apache.phoenix.jdbc.PhoenixPreparedStatement.execute(PhoenixPreparedStatement.java:179) > ........................................... > Caused by: java.lang.IllegalAccessError: class > com.google.protobuf.HBaseZeroCopyByteString cannot access its superclass > com.google.protobuf.LiteralByteString > at java.lang.ClassLoader.defineClass1(Native Method) > at java.lang.ClassLoader.defineClass(ClassLoader.java:760) > at > java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142) > at java.net.URLClassLoader.defineClass(URLClassLoader.java:467) > at java.net.URLClassLoader.access$100(URLClassLoader.java:73) > at java.net.URLClassLoader$1.run(URLClassLoader.java:368) > at java.net.URLClassLoader$1.run(URLClassLoader.java:362) > at java.security.AccessController.doPrivileged(Native Method) > at java.net.URLClassLoader.findClass(URLClassLoader.java:361) > at java.lang.ClassLoader.loadClass(ClassLoader.java:424) > at java.lang.ClassLoader.loadClass(ClassLoader.java:357) > at > org.apache.phoenix.query.ConnectionQueryServicesImpl$7.call(ConnectionQueryServicesImpl.java:1265) > at > org.apache.phoenix.query.ConnectionQueryServicesImpl$7.call(ConnectionQueryServicesImpl.java:1258) > at org.apache.hadoop.hbase.client.HTable$17.call(HTable.java:1608) > at java.util.concurrent.FutureTask.run(FutureTask.java:266) -- This message was sent by Atlassian JIRA (v6.3.4#6332)