编写代码以通过Spark读取文本文件...在本地工作正常...但是在HDInsight中运行时会产生错误->从Blob读取文本文件
org.apache.spark.SparkException:作业由于阶段故障而中止:阶段0的任务0失败4次,最近一次失败:阶段0.0的任务0.3丢失(TID 5,wn1-hchdin.bpqkkmavxs0ehkfnaruw4ed03d.dx.internal .cloudapp.net,执行程序2):java.lang.AbstractMethodError:com.journaldev.sparkdemo.WordCounter $$ Lambda $ 17 / 790636414.call(Ljava / lang / Object;)Ljava / util / Iterator; 在org.apache.spark.api.java.JavaRDDLike $$ anonfun $ fn $ 1 $ 1.apply(JavaRDDLike.scala:125) 在org.apache.spark.api.java.JavaRDDLike $$ anonfun $ fn $ 1 $ 1.apply(JavaRDDLike.scala:125) 在scala.collection.Iterator $$ anon $ 12.nextCur(Iterator.scala:434) 在scala.collection.Iterator $$ anon $ 12.hasNext(Iterator.scala:440) 在scala.collection.Iterator $ class.foreach(Iterator.scala:893) 在scala.collection.AbstractIterator.foreach(Iterator.scala:1336) 在org.apache.spark.rdd.RDD $$ anonfun $ foreach $ 1 $ anonfun $ apply $ 28.apply(RDD.scala:927) 在org.apache.spark.rdd.RDD $$ anonfun $ foreach $ 1 $ anonfun $ apply $ 28.apply(RDD.scala:927) 在org.apache.spark.SparkContext $$ anonfun $ runJob $ 5.apply(SparkContext.scala:2074) 在org.apache.spark.SparkContext $$ anonfun $ runJob $ 5.apply(SparkContext.scala:2074) 在org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:87) 在org.apache.spark.scheduler.Task.run(Task.scala:109) 在org.apache.spark.executor.Executor $ TaskRunner.run(Executor.scala:345) 在java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) 在java.util.concurrent.ThreadPoolExecutor $ Worker.run(ThreadPoolExecutor.java:624) 在java.lang.Thread.run(Thread.java:748)
这是我的代码
JavaSparkContext ct = new JavaSparkContext();
Configuration config = ct.hadoopConfiguration();
config.set("fs.azure", "org.apache.hadoop.fs.azure.NativeAzureFileSystem");
config.set("org.apache.hadoop.fs.azure.SimpleKeyProvider", "<<key>>");
JavaRDD<String> inputFile = ct.textFile("wasb://<<container-nam>>@<<account>>.blob.core.windows.net/directory/file.txt");
JavaRDD<String> wordsFromFile = inputFile.flatMap(content -> Arrays.asList(content.split(" ")));
wordsFromFile.foreach(cc ->{System.out.println("p :"+cc.toString());});
答案 0 :(得分:0)
对于在本地运行的Spark,有一个官方的blog,其中介绍了如何从Spark访问Azure Blob存储。关键是您需要将Azure存储帐户配置为core-site.xml文件中与HDFS兼容的存储,并将两个jar hadoop-azure和azure-storage添加到您的类路径中,以便通过协议wasb [s]访问HDFS。您可以参考官方的tutorial来了解与wasb兼容的HDFS,以及有关blog的HDInsight配置的详细信息。
对于在Azure上运行的Spark,不同之处仅在于使用wasb访问HDFS,而在使用Spark创建HDInsight群集时,Azure已完成其他准备工作。列出文件的方法是listContext或SparkContext的wholeTextFiles。
希望有帮助。