2016-05-12 56 views
1

我在通过使用spark-submit.sh启动Bluemix Apache-Spark服务集群的Spark应用程序中连接到我的postgresql数据库时遇到问题脚本连接到运行在Bluemix Apache-Spark服务上的Spark应用程序中的Postgresql数据库

我的斯卡拉文件中的代码是

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" 

然后我用SBT package命令为我的应用程序使用Bluemix Apache的星火服务集群上运行它创建一个罐子里。该jar已成功创建,并且该应用程序在本地运行,没有任何错误。但是,当我使用spark-submit.sh脚本提交申请到Bluemix Apache的星火服务,我得到的ClassNotFoundException为org.postgresql.Driver

回答

1

一个其他的方式简单的方法来做到这一点: - 只要把所有的库文件的目录下你的应用程序jar在哪里,并告诉spark-submit.sh去寻找它。

charles @ localhost tweetoneanalyzer] $ spark-submit --jars $(echo application/*。jar | tr''''')--class“SparkTweets”--master local [3] application/spark-sample .jar

在上面的例子中, spark-submit会将应用程序文件夹下由--jars标志指示的所有jar文件上传到服务器,所以你应该把你会用到的任何库文件夹放在你的情况下(postgresql-9.1- 901-1.jdbc4.jar),并指定你的应用程序JAR在后来的说法应用/火花sample.jar

感谢跑出,

查尔斯。

1

您应该使用SBT装配创建的jar文件就集群运行。

sbt程序集将为您的项目创建一个包含postgres的所有依赖关系的胖JAR。

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

在本地它工作bcoz postgres罐在那里在类路径

1

使用命令创建装配jar文件

sbt assembly 

确保装配文件包含PostgreSQL驱动,如果是不包含 把你的PostgreSQL,xxxx.jdbc4.jar驱动程序到你的项目的lib目录

/myproject/lib/postgresql-9.1-901-1.jdbc4.jar 

,并创建再

sbt assembly 

上传在HDFS位置JAR文件

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和运行应用程序

在你的情况下添加汇编文件,如 个conf.setJars(阵列(“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) 
................................ 
相关问题