为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

炎炎设计 2021-10-13 17:17:52
我在运行从 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/bashsparkMaster=local[*]mainClass=package.MainClassjar=/path/to/myJar-with-dependencies.jardriverPort=7079blockPort=7082deployMode=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并考虑在内
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

您可能需要指定路径作为file:///path/to/jars/spark-cassandra-connector_2.11-2.0.0.jar替代 - 在这种情况下,它将通过驱动程序的 HTTP 服务器分发给执行程序。否则,它期望您已经将文件复制到所有机器上,以避免由进程本身复制。有关详细信息,请参阅Spark 文档...

我宁愿建议只创建具有所有依赖项(Spark 除外)的 uberjar,然后提交它——这样的事情会减少痛苦。


查看完整回答
反对 回复 2021-10-13
  • 1 回答
  • 0 关注
  • 176 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信