当使用jdbc驱动程序连接到例如甲骨文? 1:我已经开始了火花大师
spark-class.cmd org.apache.spark.deploy.master.Master
和一个像这样的工人
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?如果不依赖主人和工人开始,连接到主人的目的是什么? 如果我使用jdbc的多个worker,他们只使用一个连接,还是会同时在多个连接上并行读取?
答案 0 :(得分:0)
你肯定对样本使用太多而且你感到困惑。
这两行spark-class.cmd org.apache.spark.deploy.master.Master
和spark-class.cmd org.apache.spark.deploy.worker.Worker spark://myip:7077
启动了一个Spark Standalone集群,其中包含一个主服务器和一个工作服务器。请参阅Spark Standalone Mode。
除了在Mesos或YARN集群管理器上运行外,Spark还提供了一种简单的独立部署模式。您可以手动启动独立群集,方法是手动启动主服务器,也可以使用我们提供的启动脚本。也可以在一台机器上运行这些守护进程进行测试。
您选择手动启动Spark Standalone群集(如Starting a Cluster Manually中所述)。
我怀疑集群根本使用spark-defaults.conf
。该文件用于将spark-submit
的Spark应用程序配置到群集(如Dynamically Loading Spark Properties中所述):
bin / spark-submit还将读取
conf/spark-defaults.conf
中的配置选项,其中每一行由一个键和一个由空格分隔的值组成。
话虽如此,我认为我们可以放心地将Spark Standalone放在一边。它没有给讨论增加太多(并且有点混淆)。
为了在Spark应用程序中使用JDBC驱动程序,您应spark-submit
使用--driver-class-path
命令行选项(或Runtime Environment中所述的spark.driver.extraClassPath
属性):
spark.driver.extraClassPath 要添加到驱动程序类路径的额外类路径条目。
注意:在客户端模式下,不能直接在应用程序中通过SparkConf设置此配置,因为驱动程序JVM已在此时启动。相反,请通过--driver-class-path命令行选项或默认属性文件中设置它。
我强烈建议您使用spark-submit --driver-class-path
。
$ ./bin/spark-submit --help
...
--driver-class-path Extra class path entries to pass to the driver. Note that
jars added with --jars are automatically included in the
classpath.
您可以在Working with Datasets from JDBC Data Sources (and PostgreSQL)中阅读有关如何在PostgreSQL中使用JDBC驱动程序的说明。
PROTIP 使用SPARK_PRINT_LAUNCH_COMMAND=1
查看spark-submit
的命令行。
以上所有内容也适用于spark-shell
(因为它使用了spark-submit
)。