首页 文章

如何使用JDBC从Oracle读取数据集?

提问于
浏览
1

什么是真正执行的以及在使用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 回答

  • 0

    你当然对样本使用太多而且你感到困惑 .

    这两行 spark-class.cmd org.apache.spark.deploy.master.Masterspark-class.cmd org.apache.spark.deploy.worker.Worker spark://myip:7077 启动了一个Spark Standalone集群,其中包含一个master和一个worker . 见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应用程序中使用JDBC驱动程序,您应该使用 --driver-class-path 命令行选项 spark-submit (或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 ) .

相关问题