У меня есть карта сократить программу работы, чтобы прочитать HDFS файл, как показано ниже:Как загрузить данные из HDFS sequencefile в питона
hadoop jar /opt/mapr/hadoop/hadoop-0.20.2/contrib/streaming/hadoop-0.20.2-dev-streaming.jar -Dmapred.reduce.tasks=1000 -file $homedir/mapper.py -mapper $homedir/mapper.py -file $homedir/reducer.py -reducer $homedir/reducer.py -input /user/data/* -output /output/ 2> output.text
Все, что будет подтвердить, путь/пользователь/данные/* есть папки, включая файлы,/user/data/* будут итерации всех файлов под всеми подпапками?
Текстовый файл HDFS содержит строку JSON для каждой строки так, картограф читать файл, как показано ниже:
for line in sys.stdin:
try:
object = json.loads(line)
Но владелец HDFS изменил файл с текстом в sequencefile. и я обнаружил, что карта уменьшает выход программы на множество файлов с нулевым размером, что, вероятно, означает, что он не смог прочитать файл с HDFS.
Что следует изменить для кода, чтобы я мог читать из файла последовательности? У меня также есть внешняя таблица HIVE для выполнения агрегирования и сортировки на основе этого вывода mapreduce, а HIVE был STORED AS TEXTFILE раньше, должен ли я перейти на STORED AS SEQUENCEFILE?
Спасибо,
Спасибо, должен ли я изменить команду задания потока hadoop, чтобы запустить эту карту, уменьшить скрипт python? Первый код, который я вставил. – Terry
вам не придется менять команду отправки задания, если ваш входной каталог тот же. Вам нужно будет изменить свой mapper.py –
Спасибо. Я использовал поток hadoop для обработки, а mapper читает из stdint, но ваш код читается из файла напрямую (reader = SequenceFile.Reader («ваш_файл_path») ) в коде. Как прочитать файл последовательности из stdin? – Terry