3

Cloudera 4.2.0 と Spark を使用しています。

Spark が提供するいくつかの例を試してみたいだけです。

// HdfsTest.scala
package spark.examples

import spark._

object HdfsTest {
  def main(args: Array[String]) {
    val sc = new SparkContext(args(0), "HdfsTest",
      System.getenv("SPARK_HOME"), Seq(System.getenv("SPARK_EXAMPLES_JAR")))

    val file = sc.textFile("hdfs://n1.example.com/user/cloudera/data/navi_test.csv")
    val mapped = file.map(s => s.length).cache()
    for (iter <- 1 to 10) {
      val start = System.currentTimeMillis()
      for (x <- mapped) { x + 2 }
      //  println("Processing: " + x)
      val end = System.currentTimeMillis()
      println("Iteration " + iter + " took " + (end-start) + " ms")
    }
    System.exit(0)
  }
}

コンパイルには問題ありませんが、常にいくつかの実行時の問題があります:

Exception in thread "main" java.util.ServiceConfigurationError: org.apache.hadoop.fs.FileSystem: Provider org.apache.hadoop.hdfs.HftpFileSystem could not be instantiated: java.lang.IllegalAccessError: tried to access method org.apache.hadoop.fs.DelegationTokenRenewer.<init>(Ljava/lang/Class;)V from class org.apache.hadoop.hdfs.HftpFileSystem
    at java.util.ServiceLoader.fail(ServiceLoader.java:224)
    at java.util.ServiceLoader.access$100(ServiceLoader.java:181)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:377)
    at java.util.ServiceLoader$1.next(ServiceLoader.java:445)
    at org.apache.hadoop.fs.FileSystem.loadFileSystems(FileSystem.java:2229)
    at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2240)
    at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2257)
    at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:86)
    at org.apache.hadoop.fs.FileSystem$Cache.getInternal(FileSystem.java:2296)
    at org.apache.hadoop.fs.FileSystem$Cache.get(FileSystem.java:2278)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:316)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:162)
    at org.apache.hadoop.mapred.JobConf.getWorkingDirectory(JobConf.java:587)
    at org.apache.hadoop.mapred.FileInputFormat.setInputPaths(FileInputFormat.java:315)
    at org.apache.hadoop.mapred.FileInputFormat.setInputPaths(FileInputFormat.java:288)
    at spark.SparkContext.hadoopFile(SparkContext.scala:263)
    at spark.SparkContext.textFile(SparkContext.scala:235)
    at spark.examples.HdfsTest$.main(HdfsTest.scala:9)
    at spark.examples.HdfsTest.main(HdfsTest.scala)
Caused by: java.lang.IllegalAccessError: tried to access method org.apache.hadoop.fs.DelegationTokenRenewer.<init>(Ljava/lang/Class;)V from class org.apache.hadoop.hdfs.HftpFileSystem
    at org.apache.hadoop.hdfs.HftpFileSystem.<clinit>(HftpFileSystem.java:84)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:532)
    at java.lang.Class.newInstance0(Class.java:374)
    at java.lang.Class.newInstance(Class.java:327)
    at java.util.ServiceLoader$LazyIterator.next(ServiceLoader.java:373)
... 16 more

Google で検索しましたが、Spark と HDFS のこの種の例外についてはわかりません。

val file = sc.textFile("hdfs://n1.example.com/user/cloudera/data/navi_test.csv")問題が発生する場所です。

13/04/04 12:20:51 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

そして、私はこの警告を受けました。CLASS_PATH に Hadoop パスをいくつか追加する必要があるかもしれません。

手がかりを教えてください。=)

皆さん、ありがとうございました。

レン・ハオ

4

3 に答える 3

4

(この質問は、 spark-users メーリング リストでも質問/回答されています)。

クラスターで実行されている特定のバージョンの Hadoop/HDFS に対して Spark をコンパイルする必要があります。Sparkのドキュメントから:

Spark は Hadoop コア ライブラリを使用して、HDFS やその他の Hadoop 対応ストレージ システムと通信します。HDFS プロトコルは異なるバージョンの Hadoop で変更されているため、クラスターが実行する同じバージョンに対して Spark をビルドする必要があります。バージョンを変更するには、HADOOP_VERSION変数を の先頭に設定してからproject/SparkBuild.scala、Spark ( sbt/sbt clean compile) を再構築します。

spark-usersメーリング リストのアーカイブには、特定の Hadoop バージョンに対するコンパイルに関するいくつかの質問が含まれているため、Spark のビルド時に問題が発生した場合は、そこを検索します。

于 2013-04-25T03:33:33.387 に答える
0

Spark をビルドするときに環境変数を使用して Coudera の Hadoop バージョンを設定し、Cloudera の Maven リポジトリで正確なアーティファクト バージョンを検索すると、次のようになります。

SPARK_HADOOP_VERSION=2.0.0-cdh4.2.0 sbt/sbt assembly publish-local

Spark のビルドに使用するのと同じ Java エンジンで実行するものは何でも実行するようにしてください。また、 http: //spark-project.org/download/spark-0.8.0-incubating-bin-cdh4.tgz のように、さまざまな Cloudera Hadoop ディストリビューション用にビルド済みの Spark パッケージもあります。

于 2013-11-22T16:32:17.973 に答える
-1

これは、システムにインストールされている Java に関連する問題である可能性があります。Hadoop には (Sun) Java 1.6+ が必要です。以下があることを確認してください。

JAVA_HOME="/usr/lib/jvm/java-6-sun

于 2013-04-23T04:56:52.927 に答える