1

令人惊讶的是,在网络上找不到任何JAVA关于此的最新文档。整个 World Wild Web 中的 1 或 2 个示例太旧了。我想出了以下失败并出现错误“ Module not Found org.apache.phoenix.spark”,但该模块是 Jar for Sure 的一部分。我认为以下方法不正确,因为它是从不同示例中复制粘贴的,并且加载这样的模块有点反模式,因为我们已经将包作为 jar 的一部分。请告诉我正确的方法。

注意-请做 Scala 或 Phython 示例,它们很容易通过网络获得,

public class ECLoad {
    public static void main(String[] args){
        //Create a SparkContext to initialize
        String warehouseLocation = new File("spark-warehouse").getAbsolutePath();
        SparkSession spark = SparkSession
                .builder()
                .appName("ECLoad")
                .master("local")
                .config("spark.sql.warehouse.dir", warehouseLocation)
                .getOrCreate();

        spark.conf().set("spark.testing.memory", "2147480000");         // if you face any memory issue
        Dataset<Row> df = spark.sqlContext().read().format("org.apache.phoenix.spark.*").option("table",
                "CLINICAL.ENCOUNTER_CASES").option("zkUrl", "localhost:2181").load();
        df.show();
    }

} 

我正在尝试将其运行为

spark-submit --class "encountercases.ECLoad" --jars phoenix-spark-5.0.0-HBase-2.0.jar,phoenix-core-5.0.0-HBase-2.0.jar --master local ./PASpark-1.0-SNAPSHOT.jar

我得到以下错误 -

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/hadoop/hbase/HBaseConfiguration

我看到所需的 jar 已经在建议的路径和 hbase-site.xml 符号链接 exixsts 中。在此处输入图像描述

4

1 回答 1

0

在 phoenix 使用 spark 之前,您需要设置 spark 的环境,以便它知道如何访问 phoenix/hbase。

  1. 首先创建一个符号链接,hbase-site.xml ln -s /etc/hbase/conf/hbase-site.xml /etc/spark2/conf/hbase-site.xml 或者您可以在创建 spark 会话时或在 spark 默认值中添加此文件。

  2. 您将需要在/usr/hdp/current/phoenix-client/驱动程序和执行程序类路径下添加 jar。要设置的参数:spark.driver.extraClassPathspark.executor.extraClassPath

  3. 这一步很简单,可以很容易地翻译成 java/scala/python/R,以上 2 个步骤对于它作为设置环境的工作至关重要:

val df = sqlContext.load("org.apache.phoenix.spark",Map("table" -> "CLINICAL.ENCOUNTER_CASES", "zkUrl" -> "localhost:2181"))

参考:https ://community.hortonworks.com/articles/179762/how-to-connect-to-phoenix-tables-using-spark2.html

于 2019-07-30T09:35:56.980 回答