Spark чтение текстового файла из Blob - PullRequest
0 голосов
/ 01 июля 2019

Написал код для чтения текстового файла с помощью spark ... отлично работает в локальном режиме ... но выдает ошибку при запуске в HDInsight -> чтение текстового файла из BLOB-объекта

org.apache.spark.SparkException: задание было прервано из-за сбоя этапа: задание 0 на этапе 0.0 не выполнено 4 раза, последний сбой: потерянное задание 0.3 на этапе 0.0 (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.asas.ask).: 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());});

1 Ответ

0 голосов
/ 12 июля 2019

Для Spark, работающего на локальном компьютере, существует официальный блог , в котором рассказывается, как получить доступ к хранилищу BLOB-объектов Azure из Spark.Ключ заключается в том, что вам необходимо настроить учетную запись хранилища Azure в качестве HDFS-совместимого хранилища в файле core-site.xml и добавить два jar hadoop-azure и azure-storage в ваш путь к классам для доступа к HDFS через протокол wasb [s].Вы можете обратиться к официальному учебнику , чтобы узнать HDFS-совместимое хранилище с wasb, и блогу о конфигурации для HDInsight. Подробнее *

Для Spark, работающего в Azure,разница заключается только в доступе к HDFS с помощью wasb, другие приготовления были сделаны Azure при создании кластера HDInsight с помощью Spark.Для перечисления файлов используется метод listFiles или wholeTextFiles для SparkContext.

Надеюсь, это поможет.

...