2015-11-17 4 views
0

Я установил менеджер cloudera (CDH 5) и создаю собственный кластер. Все хорошо, но когда я запускаю задачу, она работает медленно (18 мин). Но скрипт Ruby работает около 5 секунд.пряжа hadoop бежать медленно

Моя задача состоит из:

#mapper.py 
import sys 

def do_map(doc): 
    for word in doc.split(): 
     yield word.lower(), 1 

for line in sys.stdin: 
    for key, value in do_map(line): 
     print(key + "\t" + str(value)) 

и

#reducer.py 
import sys 

def do_reduce(word, values): 
    return word, sum(values) 

prev_key = None 
values = [] 

for line in sys.stdin: 
    key, value = line.split("\t") 
    if key != prev_key and prev_key is not None: 
     result_key, result_value = do_reduce(prev_key, values) 
     print(result_key + "\t" + str(result_value)) 
     values = [] 
    prev_key = key 
    values.append(int(value)) 

if prev_key is not None: 
    result_key, result_value = do_reduce(prev_key, values) 
    print(result_key + "\t" + str(result_value)) 

Я бегу моя задача это команда:

yarn jar hadoop-streaming.jar -input lenta_articles -output lenta_wordcount -file mapper.py -file reducer.py -mapper "python mapper.py" -reducer "python reducer.py" 

журнал команды запуска:

15/11/17 10:14:27 WARN streaming.StreamJob: -file option is deprecated, please use generic option -files instead. 
packageJobJar: [mapper.py, reducer.py] [/opt/cloudera/parcels/CDH-5.4.8-1.cdh5.4.8.p0.4/jars/hadoop-streaming-2.6.0-cdh5.4.8.jar] /tmp/streamjob8334226755199432389.jar tmpDir=null 
15/11/17 10:14:29 INFO client.RMProxy: Connecting to ResourceManager at manager/10.128.181.136:8032 
15/11/17 10:14:29 INFO client.RMProxy: Connecting to ResourceManager at manager/10.128.181.136:8032 
15/11/17 10:14:31 INFO mapred.FileInputFormat: Total input paths to process : 909 
15/11/17 10:14:32 INFO mapreduce.JobSubmitter: number of splits:909 
15/11/17 10:14:32 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1447762910705_0010 
15/11/17 10:14:32 INFO impl.YarnClientImpl: Submitted application application_1447762910705_0010 
15/11/17 10:14:32 INFO mapreduce.Job: The url to track the job: http://manager:8088/proxy/application_1447762910705_0010/ 
15/11/17 10:14:32 INFO mapreduce.Job: Running job: job_1447762910705_0010 
15/11/17 10:14:49 INFO mapreduce.Job: Job job_1447762910705_0010 running in uber mode : false 
15/11/17 10:14:49 INFO mapreduce.Job: map 0% reduce 0% 
15/11/17 10:16:04 INFO mapreduce.Job: map 1% reduce 0% 

Размер папки lenta_wordcount 2.5 МБ. Он состоит из 909 файлов. Размер файла 3КБ.

Задавайте вопросы, если что-то вам нужно узнать или выполнить любую команду

Что я делаю неправильно?

+0

MapReduce (Hadoop) строится для обработки больших объемов данных размера (TBS). Вы должны выполнить сравнение этого уровня не с входом 2,5 МБ. – YoungHobbit

+0

@YoungHobbit спасибо. Но зачем бежать 18-30 минут на небольшие данные? –

+0

работает 909 рабочих мест для обработки данных. Для каждого файла выполняется отдельное задание сопоставления. 'количество расколов: 909'. Наверное, поэтому он занимает много времени. – YoungHobbit

ответ

0

Hadoop не эффективен при обработке большого количества небольших файлов, но эффективен при обработке небольшого количества больших файлов.

Поскольку вы уже используете Cloudera, взглянуть на альтернативы для повышения производительности с большим количеством мелких файлов с Hadoop как указано в Cloudera article

Основная причина медленной обработки

Чтение через небольшие файлы обычно вызывает много попыток и много прыжков с datanode в datanode для извлечения каждого маленького файла, все из которых являются неэффективным шаблоном доступа к данным.

Если у вас есть больше файлов, вам нужно больше номеров Mappers для чтения данных процесса &. Тысячи копий, обрабатывающих небольшие файлы &, передают результат в Редукторы по сети, ухудшают производительность.

Передача ввода в виде последовательных файлов с компрессиями LZO является одной из лучших альтернатив для обработки большого количества небольших файлов. Посмотрите на SE Question 1 и Other Alternative

Есть некоторые другие альтернативы (некоторые из них не связаны с phtyon), но вы должны смотреть на этот article

Change the ingestion process/interval 
Batch file consolidation 
Sequence files 
HBase 
S3DistCp (If using Amazon EMR) 
Using a CombineFileInputFormat 
Hive configuration settings 
Using Hadoop’s append capabilities 
+0

Благодарим вас за полный ответ –

+0

Если этот ответ на ваш вопрос, ответьте на него. –