在emr集群上提交spark作业时,如何避免java.lang.noclassdeffounderror?

r8uurelv  于 2021-07-13  发布在  Spark
关注(0)|答案(1)|浏览(268)

我有一个在本地机器上成功运行的spark应用程序。我使用hbase docker容器,从中将数据加载到spark应用程序。现在我已经创建了安装了spark和hbase的emr集群。buy当我试图提交jar文件时,出现以下异常:
java.lang.noclassdeffounderror:org/apache/hadoop/hbase/hbaseconfiguration
在本地运行我的应用程序时,我可以通过添加 --jars 标记到 spark-submit ,使spark成为所有hbase jar的路径。
在emr上运行时,如何克服此错误?
我是否也应该在emr中将spark重定向到hbase jar?那些jar在emr集群上的什么位置?

Configuration hBaseConf = HBaseConfiguration.create();
    hBaseConf.set(TableInputFormat.INPUT_TABLE, "MyTable");

JavaRDD<String> myStrings = sparkContext.newAPIHadoopRDD(
    hBaseConf, TableInputFormat.class,ImmutableBytesWritable.class, Result.class).keys().map(key -> {
        String from = Bytes.toString(key.get());
        return from;
    });
  .
  .
  .
h7wcgrx3

h7wcgrx31#

我可以通过hbase classpath命令在emrshell上找到jar。然后我将hbase路径添加到jars,并使用--jars标志添加到spark submit。

相关问题