AWS EMR Steps и HDFS Merge;Команды оболочки Scala` - PullRequest
0 голосов
/ 01 июня 2018

Я использую AWS EMR для запуска некоторых наших искровых программ.Озеро данных построено на S3 и имеет необработанные и курированные слои.программа Spark извлекает данные из зоны Raw и выполняет некоторые преобразования для помещения в курируемый слой.Сначала я храню результаты локально в HDFS, а затем выполняю distcp для S3;

Все это время мы использовали SSH для входа в EMR и развертывания jar-файла и запуска;Однако в производстве наш клиент отказался от использования SSH.Мы внесли изменения в нашу программу, чтобы она запускалась пошагово, используя следующую команду

aws emr add-steps --cluster-id j-CXXXXXXXXXJ --steps Type=Spark,Name="RUN MJ",ActionOnFailure=CONTINUE,Args=[--class,sparkMultiJoins.GenomeSparkJoins,s3://marketing-analytics-platform/genome_install/libs/SparkFrameWork-0.0.1-SNAPSHOT-jar-with-dependencies.jar,dbo.Property,abc,genomedb,genomedb];

Я успешно могу запустить программу;Но при выполнении команд оболочки для объединения HDFS из scala у меня возникли проблемы;Ниже приведен код для слияния.

     val MergeFiles = "hadoop fs -text " +  HDFSOutPath + "/part* | hadoop fs -put - " + HDFSOutPath +"/"+fileName+".csv"
      //////execute the dynamically constructed command
 MergeFiles.!

пример выходных данных после подстановки параметров выглядит следующим образом:

hadoop fs -cat hdfs://ip-10-11-111-111.xxx.com:8020/StageData/Property/* | hadoop fs -put - hdfs://ip-10-11-111-111.pnmac.com:8020/StageData/Property/Property.csv

В то время как вышеописанное выполняется, он выдает выходные данные команды cat, т.е. вседанные в файлах - на стандартный вывод - т.е. это можно увидеть на стандартном выводе в журнале aws.По этой причине работа выполняется навсегда;Я ожидал, что он будет вести себя так, как если бы я выполнил hadoop fs (команда выше) в кластере emr;

Обратите внимание, что я попытался использовать метод coalesce (1) для слияния и отбросил его, поскольку он был очень медленным.

Могу ли я что-нибудь еще сделать?

...