Cucumber-Hadoop: как читать файлы функций огурца из местоположения HDFS?

Я использую метод import cucumber.api.cli.Main для вызова основного метода огурца, например

Main.main(
    Array(glue,gluePath,tag,tagName,plugin,pluginNameAndPath,
        "hdfs:///user/test/hdfs.feature"))

Можно ли читать файлы функций из местоположения HDFS, поскольку он работает с локальным путем?

Способ чтения пути hdfs

val fs = FileSystem.get(new Configuration());
val fsDataInputStream = fs.open(new Path("/user/test/hdfs.feature"))

который я также могу передать во входной поток, но проблема в том, что Array() принимает только строку, а читатель hdfs возвращает входной поток, а также файловую систему. Есть ли решение этой проблемы?

Для дополнительной справки. Эта проблема возникает, когда я использую «spark-submit --master yarn --deploy-mode cluster».

Он отлично работает для «spark-submit --master yarn --deploy-mode client».


person Anuj Singhal    schedule 16.10.2018    source источник
comment
Нашли решение этой проблемы, для чтения файла функций нам нужно использовать файл передачи с помощью --files и использовать sqlContext.sparkContext.addFile(x) для добавления в кластер и SparkFiles.get(x), чтобы получить путь, где он находится хранится, затем используйте его как обычный файл   -  person Anuj Singhal    schedule 10.12.2018


Ответы (1)


Вот ответ на мой вопрос, предоставьте все ваши файлы функций, используя --files, например

spark-submit --master yarn --deploy-mode cluster --queue cbi_ops --driver-memory 10G 
--executor-memory 5G --executor-cores 5 --num-executors 5 \
--jars $jars_path \
--files $files_path \
--driver-class-path xx.jar \
--class RunnerMain \
xx.jar \
"-g" "xx.stepdefinitions" \
"-t" "@functional-test,@regression-test" \

добавьте все файлы в свой код, используя

sqlContext.sparkContext.addFile(x)

затем используйте в массиве через SparkFiles.get, например:

Array(glue,gluePath,tag,tagName,plugin,pluginNameAndPath,plugin,pluginNameAndPathJson,
            SparkFiles.get("ingestion-mc-ris-r2d-inc.feature"))
person Anuj Singhal    schedule 10.12.2018