猿问

Spark 2.0.0:在集群模式下从 Cassandra 读取

我在运行从 Spark 2.0.0 中的 Cassandra 读取数据的 Spark 应用程序时遇到了一些麻烦。


我的代码工作如下:


DataFrameReader readerCassandra = SparkContextUtil.getInstance().read() 

                    .format("org.apache.spark.sql.cassandra")

                    .option("spark.cassandra.connection.host", [DATABASE_IP])

                    .option("spark.cassandra.connection.port", [DATABASE_PORT]);


final Map<String,String> map = new HashMap<String,String>();


map.put("table", "MyTable");

map.put("keyspace", "MyKeyspace");


public final  StructType schema = DataTypes.createStructType(

        new StructField[] { DataTypes.createStructField("id", DataTypes.StringType, true),

            DataTypes.createStructField("timestamp", DataTypes.TimestampType, true),

            DataTypes.createStructField("value", DataTypes.DoubleType, true)

        });


final Dataset<Row> dataset = readerCassandra.schema(schema).options(map).load(); 

dataset.show(false);

我想在集群中运行此代码。我的集群使用 spark-2.0.2-bin-hadoop2.7(http://spark.apache.org/downloads.html 上没有可用的 spark-2.0.0 )。


首先,我使用以下脚本在客户端模式下提交它:


#!/bin/bash


sparkMaster=local[*]

mainClass=package.MainClass


jar=/path/to/myJar-with-dependencies.jar


driverPort=7079

blockPort=7082


deployMode=client


$SPARK_HOME/bin/spark-submit \

  --conf "spark.driver.port=${driverPort}"\

  --conf "spark.blockManager.port=${blockPort}"\

  --class $mainClass \

  --master $sparkMaster \

  --deploy-mode $deployMode \

  --jars /path/to/jars/spark-cassandra-connector_2.11-2.0.0.jar \

  $jar

当我这样做时,一切正常。但是现在,我想以集群模式运行我的应用程序。


所以我通过设置sparkMaster我的主 IP 和deployMode“集群”来修改我的提交脚本。


笔记 :


在与我的 Master 同一台机器上只有一个 Worker 的集群时,我仍然有错误。

起初,我使用的是 Spark 2.3.1,并且在集群模式下运行我的代码没有问题(在 中使用 spark-cassandra-connector_2.11-2.3.1.jar --jars)。

我尝试了多个 jars --jars:spark-cassandra-connector_2.11-2.0.0.jar, spark-cassandra-connector_2.11-2.0.2.jar, spark-cassandra-connector_2.11-2.3.1.jar, spark-cassandra-connector-java_2.11-1.5.1.jar,但没有一个工作。

--jars参数中设置了其他一些 jar并考虑在内


炎炎设计
浏览 177回答 1
1回答

Smart猫小萌

您可能需要指定路径作为file:///path/to/jars/spark-cassandra-connector_2.11-2.0.0.jar替代 - 在这种情况下,它将通过驱动程序的 HTTP 服务器分发给执行程序。否则,它期望您已经将文件复制到所有机器上,以避免由进程本身复制。有关详细信息,请参阅Spark 文档...我宁愿建议只创建具有所有依赖项(Spark 除外)的 uberjar,然后提交它——这样的事情会减少痛苦。
随时随地看视频慕课网APP

相关分类

Java
我要回答