Я считаю, что подключение EMR к Amazon S3 крайне ненадежно из-за зависимости от скорости сети.
Я могу найти только ссылки для описания местоположения S3. Я хочу использовать EMR с HDFS — как мне это сделать?
Я считаю, что подключение EMR к Amazon S3 крайне ненадежно из-за зависимости от скорости сети.
Я могу найти только ссылки для описания местоположения S3. Я хочу использовать EMR с HDFS — как мне это сделать?
Вы можете просто использовать входные и выходные пути hdfs, такие как hdfs:///input/
.
Скажем, у вас есть задание, добавленное в кластер следующим образом:
ruby elastic-mapreduce -j $jobflow --jar s3:/my-jar-location/myjar.jar --arg s3:/input --arg s3:/output
вместо этого вы можете получить его следующим образом, если вам нужно, чтобы он был на hdfs:
ruby elastic-mapreduce -j $jobflow --jar s3:/my-jar-location/myjar.jar --arg hdfs:///input --arg hdfs:/// вывод
Чтобы взаимодействовать с HDFS в кластере EMR, подключитесь по ssh к главному узлу и выполните общие команды HDFS. Например, чтобы увидеть выходной файл, вы можете сделать следующее:
hadoop fs -get hdfs://output/part-r-0000 /home/ec2-user/firstPartOutputFile
Но если вы работаете с временными кластерами, использование встроенной HDFS не рекомендуется, так как вы потеряете данные при завершении работы кластера.
Также у меня есть тесты, которые доказывают, что использование S3 или HDFS не дает большой разницы в производительности. Для рабочей нагрузки ~200 ГБ: - Задание было завершено за 22 секунды с S3 в качестве источника ввода - Задание было завершено за 20 секунд с HDFS в качестве источника ввода
EMR супероптимизирован для чтения/записи данных из/в S3.
Для вывода промежуточных шагов лучше всего писать в hdfs. Итак, скажем, если у вас есть 3 шага в вашем конвейере, то у вас может быть ввод/вывод следующим образом: