首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >连接到Spark应用程序中的postgresql db,该应用程序运行在Bluemix Apache-Spark服务上

连接到Spark应用程序中的postgresql db,该应用程序运行在Bluemix Apache-Spark服务上
EN

Stack Overflow用户
提问于 2016-05-12 08:54:42
回答 3查看 1.2K关注 0票数 1

连接到星火应用程序中的postgresql db存在问题,该应用程序是通过使用spark-submit.sh脚本在Bluemix Apache-Spark服务集群上启动的。

我的scala文件代码是

代码语言:javascript
复制
val conf = new SparkConf().setAppName("My demo").setMaster("local")
 val sc = new SparkContext(conf)
 val sqlContext = new SQLContext(sc)
 val driver = "org.postgresql.Driver"
 val url = "jdbc:postgresql://aws-us-east-1-portal.16.dblayer.com:10394/tennisdb?user=***&password=***"
 println("create")
 try {
   Class.forName(driver)
   val jdbcDF = sqlContext.read.format("jdbc").options(Map("url" -> url, "driver" -> driver, "dbtable" -> "inputdata")).load()
   jdbcDF.show()
   println("success")
 } catch {
   case e : Throwable => {
     println(e.toString())
     println("Exception");
     }
 }
 sc.stop()

我使用sbt文件来解决依赖关系。sbt文件的代码是:

代码语言:javascript
复制
 name := "spark-sample"

 version := "1.0"

 scalaVersion := "2.10.4"

 // Adding spark modules dependencies

 val sparkModules = List("spark-core",
   "spark-streaming",
   "spark-sql",
   "spark-hive",
   "spark-mllib",
   "spark-repl",
   "spark-graphx"
 )

 val sparkDeps = sparkModules.map( module => "org.apache.spark" % s"${module}_2.10" % "1.4.0" )     

 libraryDependencies ++= sparkDeps

 libraryDependencies += "org.postgresql" % "postgresql" % "9.4-1201-jdbc41"

然后,我使用Spark命令为我的应用程序创建一个jar,以便使用服务在集群上运行它。jar是为我成功创建的,应用程序在本地运行,没有任何错误。但是,当我使用SMAK-submit.sh脚本将应用程序提交给Bluemix服务时,我得到了ClassNotFoundException for org.postgresql.Driver

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2016-05-12 16:15:15

另一种简单的方法是:-只需将所有库文件放在应用程序jar所在的目录下,然后告诉smack-submit.sh查找它。

查理斯@localhost tweetone分析器[$spark submit --jars $(echo application/*.jar \ tr‘',’') -类"SparkTweets“-主local3应用程序/火花-sample.jar

在上面的示例中,星火提交将将应用程序文件夹下的--jars标志所指示的所有jar上传到服务器,因此在您的示例中(postgresql-9.1-901-1.jdbc4.jar)中,您应该将您将要使用的任何库jar上传到服务器,并指定您的应用程序jar将在后面的参数应用程序/星火-sample.jar中运行。

谢谢,

查尔斯。

票数 1
EN

Stack Overflow用户

发布于 2016-05-12 09:48:00

您应该使用sbt程序集来创建jar文件,以便在集群上运行它。

sbt程序集将创建一个包含其所有依赖项的项目的胖JAR,其中也包括postgres。

这是一个CLASSPATH问题;类加载程序试图加载PostgreSQL JDBC驱动程序时不可用。

在本地,它在类路径中运行。

票数 1
EN

Stack Overflow用户

发布于 2016-05-12 10:12:54

使用命令创建程序集jar文件

代码语言:javascript
复制
   sbt assembly

确保程序集文件包含postgresql驱动程序,如果不包含,则将PostgreSQLxxx.jdbc4.jar驱动程序放到项目的lib目录中。

代码语言:javascript
复制
  /myproject/lib/postgresql-9.1-901-1.jdbc4.jar

并再次创造

代码语言:javascript
复制
   sbt assembly

将jar文件上载到hdfs位置

代码语言:javascript
复制
 hdfs://assembly/myproject.jar

如果您使用的是火花提交,请使用以下命令

代码语言:javascript
复制
./bin/spark-submit \
--class <main-class>
--master <master-url> \
hdfs://assembly/myproject.jar \

否则,在代码中配置您的星星之火。

代码语言:javascript
复制
val conf = new SparkConf()
.setMaster(sparkMasterUrl
.setJars(Array("hdfs://assembly/myproject.jar"))

并运行您的应用程序

在您的示例中,添加像conf.setJars(Array("hdfs://assembly/myproject.jar"))这样的程序集文件

代码语言:javascript
复制
val conf = new SparkConf().setAppName("My demo").setMaster("local")
conf.setJars(Array("hdfs://assembly/myproject.jar"))
val sc = new SparkContext(conf)
val sqlContext = new SQLContext(sc)
................................
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37181928

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档