通过数据存储hadoop连接器将google数据存储与apache spark结合使用

kkbh8khc  于 2021-05-30  发布在  Hadoop
关注(0)|答案(0)|浏览(273)

我尝试在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数据存储?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题