Apache spark 如何在Cloudera集群上分发JDBCJAR?

Apache spark 如何在Cloudera集群上分发JDBCJAR?,apache-spark,jdbc,cloudera,cloudera-cdh,apache-spark-2.0,Apache Spark,Jdbc,Cloudera,Cloudera Cdh,Apache Spark 2.0,我刚刚从CSD在我的CDH集群(28个节点)上安装了一个新的Spark 2.4,并且正在尝试安装JDBC驱动程序,以便从Jupyter笔记本中的数据库中读取数据。 我在一个节点上下载并复制了它到/jars文件夹中,但是似乎我必须在每个主机上都这样做(!)。否则,我将从其中一个工人那里得到以下错误: java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver 有没有简单的方法(不编写bash脚本)在

我刚刚从CSD在我的CDH集群(28个节点)上安装了一个新的Spark 2.4,并且正在尝试安装JDBC驱动程序,以便从Jupyter笔记本中的数据库中读取数据。 我在一个节点上下载并复制了它到/jars文件夹中,但是似乎我必须在每个主机上都这样做(!)。否则,我将从其中一个工人那里得到以下错误:

java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver

有没有简单的方法(不编写bash脚本)在整个集群上分发jar文件和包?我希望Spark能够自己发布它(或者它可以,但我不知道怎么做)。

Spark有一个jdbc格式的阅读器,你可以使用

启动scala shell以确认MS SQL Server驱动程序是否在类路径中

例子
Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”)

如果没有显示驱动程序类,请确保将jar放在边缘节点上,并将其包含在初始化会话的类路径中

例子
bin/sparkshell——驱动程序类路径postgresql-9.4.1207.jar——jars-postgresql-9.4.1207.jar

通过Spark jdbc连接到您的MS SQL Server

通过spark python的示例 这里可以找到编译连接字符串的详细信息和其他方法

你提到朱皮特。。。如果您仍然无法实现上述功能,请尝试通过此帖子设置一些环境变量(但无法确认此功能是否有效)


最后,您真正需要的是将驱动程序类放在边缘节点(启动spark的客户端)上并将其附加到类路径,然后建立连接并并行化数据帧以扩展性能,因为rdbms中的jdbc以单线程的形式读取数据,因此1个分区有一个jdbc格式的读取器,您可以使用

启动scala shell以确认MS SQL Server驱动程序是否在类路径中

例子
Class.forName(“com.microsoft.sqlserver.jdbc.SQLServerDriver”)

如果没有显示驱动程序类,请确保将jar放在边缘节点上,并将其包含在初始化会话的类路径中

例子
bin/sparkshell——驱动程序类路径postgresql-9.4.1207.jar——jars-postgresql-9.4.1207.jar

通过Spark jdbc连接到您的MS SQL Server

通过spark python的示例 这里可以找到编译连接字符串的详细信息和其他方法

你提到朱皮特。。。如果您仍然无法实现上述功能,请尝试通过此帖子设置一些环境变量(但无法确认此功能是否有效)


最后,您真正需要的是将驱动程序类放在边缘节点(启动spark的客户端)上,并将其附加到类路径中,然后建立连接并并行化数据帧以扩展性能,因为rdbms中的jdbc将数据读取为单线程,因此只有一个分区

我只希望投票的人“-”可以在投票前阅读整篇文章或提供解释。我只希望那些投“-”的人能够在投票前阅读整篇文章或提供解释。谢谢!我还通过在Spark会话配置中传递jar文件路径找到了一个很好的解决方法,例如:Spark.stop()Spark=(SparkSession.builder.appName(“Test App”).master('swark-client”).config(“Spark.executor.cores”,“4”).config(“Spark.executor.instances”,“2”).config(“Spark.sql.shuffle.partitions”,“8”).config(“Spark.jars”,“/opt/cloudera/parcels/SPARK2/lib/SPARK2/jars/sqljdbc42.jar”).enablehavesupport().getOrCreate())很好!很高兴您找到了解决方案。谢谢!我还通过在Spark会话配置中传递jar文件路径找到了一个很好的解决方法,例如:Spark.stop()Spark=(SparkSession.builder.appName(“测试应用程序”).master('warn-client').config(”spark.executor.cores、“4”).config(“spark.executor.instances”、“2”).config(“spark.sql.shuffle.partitions”、“8”).config(“spark.jars”、“opt/cloudera/parcels/SPARK2/lib/SPARK2/jars/sqljdbc42.jar”)。enableHiveSupport().getOrCreate())很好!很高兴找到了解决方案。
# option1
jdbcDF = spark.read \
    .format("jdbc") \
    .option("url", "jdbc:postgresql:dbserver") \
    .option("dbtable", "schema.tablename") \
    .option("user", "username") \
    .option("password", "password") \
    .load()

# option2
jdbcDF2 = spark.read \
    .jdbc("jdbc:postgresql:dbserver", "schema.tablename",
          properties={"user": "username", "password": "password"})