什么是真正执行的以及在使用jdbc驱动程序连接到例如甲骨文? 1:我已经开始了一个火花大师
spark-class.cmd org.apache.spark.deploy.master.Master
和一个像这样的 Worker
spark-class.cmd org.apache.spark.deploy.worker.Worker spark://myip:7077
和火花壳一样
spark-shell --master spark://myip:7077
在 spark-defaults.conf
我有
spark.driver.extraClassPath = C:/jdbcDrivers/ojdbc8.jar
spark.executor.extraClassPath = C:/jdbcDrivers/ojdbc8.jar
在spark-env.sh我有
SPARK_CLASSPATH=C:/jdbcDrivers/ojdbc8.jar
我现在可以在spark-shell中对Oracle运行查询:
val jdbcDF = spark.read.format("jdbc").option("url","jdbc:oracle:thin:@...
这可以正常工作,而无需在scala shell中单独添加jdbc驱动程序jar .
- 当我以相同的方式启动master和worker时,但是在eclipse中创建一个scala项目并连接到master,如下所示:
val sparkSession = SparkSession.builder.
master("spark://myip:7077")
.appName("SparkTestApp")
.config("spark.jars", "C:\\pathToJdbc\\ojdbc8.jar")
.getOrCreate()
如果我没有在scala代码中明确添加jdbc jar,那么它就会失败 . 执行情况有何不同?为什么我需要在代码中指定jdbc jar?如果不依赖主人和 Worker 开始,连接到主人的目的是什么?如果我使用jdbc的多个worker,他们只使用一个连接,还是会同时在多个连接上并行读取?
1 回答
你当然对样本使用太多而且你感到困惑 .
这两行
spark-class.cmd org.apache.spark.deploy.master.Master
和spark-class.cmd org.apache.spark.deploy.worker.Worker spark://myip:7077
启动了一个Spark Standalone集群,其中包含一个master和一个worker . 见Spark Standalone Mode .您选择手动启动Spark Standalone群集(如Starting a Cluster Manually中所述) .
我怀疑集群是否使用了
spark-defaults.conf
. 该文件用于将spark-submit
的Spark应用程序配置到群集(如Dynamically Loading Spark Properties中所述):话虽如此,我认为我们可以放心地将Spark Standalone放在一边 . 它并没有给讨论增加太多(并且有点混淆) .
“安装”Spark应用程序的JDBC驱动程序
要在Spark应用程序中使用JDBC驱动程序,您应该使用
--driver-class-path
命令行选项spark-submit
(或Runtime Environment中描述的spark.driver.extraClassPath
属性):我强烈建议使用
spark-submit --driver-class-path
.您可以在Working with Datasets from JDBC Data Sources (and PostgreSQL)中阅读有关如何在PostgreSQL中使用JDBC驱动程序的说明 .
PROTIP 使用
SPARK_PRINT_LAUNCH_COMMAND=1
查看spark-submit
的命令行 .以上所有内容也适用于
spark-shell
(因为它使用了spark-submit
) .