访问spark map函数中的HDFS文件的问题

时间:2015-10-30 05:53:26

标签: scala apache-spark

我的用例需要从spark map函数内部访问存储在HDFS中的文件。这个用例使用不向map函数提供任何数据的自定义输入格式,而map函数获取输入拆分并访问数据。我使用以下代码执行此操作

val hConf: Configuration = sc.hadoopConfiguration
hConf.set("fs.hdfs.impl", classOf[org.apache.hadoop.hdfs.DistributedFileSystem].getName) 
hConf.set("fs.file.impl",    classOf[org.apache.hadoop.fs.LocalFileSystem].getName)
var job = new Job(hConf)           
    FileInputFormat.setInputPaths(job,new Path("hdfs:///user/bala/MyBinaryFile"));


    var hRDD = new NewHadoopRDD(sc, classOf[RandomAccessInputFormat], 
        classOf[IntWritable], 
        classOf[BytesWritable],
        job.getConfiguration() 
        )    

    val count = hRDD.mapPartitionsWithInputSplit{ (split, iter) => myfuncPart(split, iter)}.collect()

截至目前,我在myfuncPart中没有做任何事情。这个简单的方法返回一个地图,如下所示

 iter.map { tpl ⇒ (tpl._1, tpl._2.getCapacity) }

当我提交作业以及依赖项时,我收到以下错误

15/10/30 11:11:39 WARN scheduler.TaskSetManager: Lost task 0.0 in stage 0.0 (TID 0, 40.221.94.235): java.io.IOException: No FileSystem for scheme: spark
at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2584)
at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591)
at org.apache.hadoop.fs.FileSystem.access$200(FileSystem.java:91)
乍一看,这似乎是一个与火花罐有关的小错误,但无法破解。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:0)

事实证明,在我开展这项工作的过程中,这是我的错误。我使用的命令没有适当的选项。因此,这个问题。我正在使用下面的命令

spark-submit  --class org.myclass --jars myjar spark://myhost:7077 myjob.jar

以下是正确的

spark-submit  --class org.myclass --jars myjar --master spark://myhost:7077 myjob.jar

这是一个小错误但不知何故我错过了它。现在它正在运作