2013-04-04 2 views
3

Я использую Cloudera 4.2.0 и Spark.Использование искры для доступа HDFS не удалось

Я просто хочу попробовать некоторые примеры, данные 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, не знает об этом виде исключения для Спарка и 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.

Не стесняйтесь дать какие-либо подсказки. =)

Спасибо всем.

REN Hao

ответ

0

Это может быть проблема, связанная с установленной Java в вашей системе. Hadoop требует (Sun) Java 1.6+. Убедитесь, что:.

JAVA_HOME = "/ USR/Библиотека/JVM/Java-6-вс

4

(Этот вопрос был также задан вопрос/ответил на spark-users mailing list)

Вы должны скомпилировать Спарк против конкретной версии Hadoop/HDFS работает на кластере из Spark documentation:.

Спарк использует Hadoop ядро ​​библиотеки т o поговорить с HDFS и другими системами хранения, поддерживаемыми Hadoop. Поскольку протокол HDFS изменился в разных версиях Hadoop, вы должны создать Spark против той же версии, что и ваш кластер. Вы можете изменить версию, установив переменную HADOOP_VERSION в верхней части project/SparkBuild.scala, а затем перестроить Spark (sbt/sbt clean compile).

В spark-users архивы списков рассылки содержат несколько вопросов о составлении в отношении конкретных версий Hadoop, так что я искал бы там, если возникнут какие-либо проблемы при создании Спарк.

0

Вы можете установить Hadoop версию Coudera с переменным окружением при создании искры, посмотреть ваш точный вариант артефакта на Maven репо Cloudera, в должна быть такое:

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

Убедитесь, что вы бежите, что вы работать с тем же Java, который вы используете для создания Spark. Кроме того, имеются готовые пакеты Spark для разных распределений Cloudera Hadoop, например http://spark-project.org/download/spark-0.8.0-incubating-bin-cdh4.tgz

Смежные вопросы