我尝试在google云平台上使用带有apachespark的google数据存储,遇到了一些令人沮丧的问题。我在google云上使用 bdutil
,启用了hadoop1、spark和数据存储连接器。我不得不使用旧版本的 bdutil
(具体为1.2.1版)因为某些原因,数据存储连接器似乎没有包含在最新版本中。
然后,我按照上的说明在服务器上运行示例数据存储连接器应用程序https://cloud.google.com/hadoop/running-with-datastore-connector. 这样做非常有效,结果的字数出现在数据存储中。
然后,我运行了一个基本的spark应用程序来计算google云存储中文件的行数,而不使用datastore连接器,这也运行得很好。
当我尝试使用带有spark的数据存储连接器时,问题出现了。我使用的代码如下所示,它只尝试打开到数据存储的连接,而不再尝试:
import org.apache.spark._
import org.apache.spark.SparkContext._
import com.google.cloud.hadoop.io.datastore.DatastoreHadoopHelper
import org.apache.hadoop.conf.Configuration
object Main {
val datasetId = "<redacted>"
def main(args: Array[String]): Unit = {
val conf = new SparkConf()
val sc = new SparkContext(conf)
sc.addJar("/home/hadoop/hadoop-install/lib/datastore-connector-0.14.9-hadoop1.jar")
println(System.getProperty("java.class.path"))
val helper = new DatastoreHadoopHelper(new Configuration())
try {
val ds = helper.createDatastore(datasetId)
println("Success!")
} catch {
case e: Exception => println("Error: " + e.getMessage())
}
}
}
我也试过了 sc.addJar
打电话。我用sbt把它编译成一个jar,它工作得很好(我的数据库中有datastoreconnectorjar文件) lib
文件夹),然后我将jar文件上载到服务器。我通过在服务器上执行以下脚本来运行它:
# !/usr/bin/env bash
set -e
source hadoop-env-setup.sh
spark-submit sparktest.jar --driver-class-path /home/hadoop/hadoop-install/datastore-connector-0.14.9-hadoop1.jar
我也尝试过,但没有先找到hadoop环境。当我运行它时,我得到了一个错误:
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/cloud/hadoop/io/datastore/DatastoreHadoopHelper
at Main$.main(Main.scala:16)
at Main.main(Main.scala)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:606)
at org.apache.spark.deploy.SparkSubmit$.org$apache$spark$deploy$SparkSubmit$$runMain(SparkSubmit.scala:569)
at org.apache.spark.deploy.SparkSubmit$.doRunMain$1(SparkSubmit.scala:166)
at org.apache.spark.deploy.SparkSubmit$.submit(SparkSubmit.scala:189)
at org.apache.spark.deploy.SparkSubmit$.main(SparkSubmit.scala:110)
at org.apache.spark.deploy.SparkSubmit.main(SparkSubmit.scala)
Caused by: java.lang.ClassNotFoundException: com.google.cloud.hadoop.io.datastore.DatastoreHadoopHelper
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 11 more
尽管数据存储jar显示在打印的类路径中:
:/home/hadoop/hadoop-install/lib/gcs-connector-1.3.3-hadoop1.jar:/home/hadoop/hadoop-install/datastore-connector-0.14.9-hadoop1.jar:/home/hadoop/spark-install/conf:/home/hadoop/spark-install/lib/spark-assembly-1.3.0-hadoop1.0.4.jar:/home/hadoop/spark-install/lib/datanucleus-core-3.2.10.jar:/home/hadoop/spark-install/lib/datanucleus-rdbms-3.2.9.jar:/home/hadoop/spark-install/lib/datanucleus-api-jdo-3.2.6.jar:/home/hadoop/hadoop-install/conf
我错过了什么?有没有可能使用带有spark的google数据存储?
暂无答案!
目前还没有任何答案,快来回答吧!