连接到星火应用程序中的postgresql db存在问题,该应用程序是通过使用spark-submit.sh脚本在Bluemix Apache-Spark服务集群上启动的。
我的scala文件代码是
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文件的代码是:
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
发布于 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中运行。
谢谢,
查尔斯。
发布于 2016-05-12 09:48:00
您应该使用sbt程序集来创建jar文件,以便在集群上运行它。
sbt程序集将创建一个包含其所有依赖项的项目的胖JAR,其中也包括postgres。
这是一个CLASSPATH问题;类加载程序试图加载PostgreSQL JDBC驱动程序时不可用。
在本地,它在类路径中运行。
发布于 2016-05-12 10:12:54
使用命令创建程序集jar文件
sbt assembly确保程序集文件包含postgresql驱动程序,如果不包含,则将PostgreSQLxxx.jdbc4.jar驱动程序放到项目的lib目录中。
/myproject/lib/postgresql-9.1-901-1.jdbc4.jar并再次创造
sbt assembly将jar文件上载到hdfs位置
hdfs://assembly/myproject.jar如果您使用的是火花提交,请使用以下命令
./bin/spark-submit \
--class <main-class>
--master <master-url> \
hdfs://assembly/myproject.jar \否则,在代码中配置您的星星之火。
val conf = new SparkConf()
.setMaster(sparkMasterUrl
.setJars(Array("hdfs://assembly/myproject.jar"))并运行您的应用程序
在您的示例中,添加像conf.setJars(Array("hdfs://assembly/myproject.jar"))这样的程序集文件
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)
................................https://stackoverflow.com/questions/37181928
复制相似问题