У меня есть полностью распределенный трехузловой кластер Hadoop (1 namenode и 2 datanodes) с полностью распределенной Hbase (1 активный мастер, 1 мастер резервного копирования, 2 сервера, 0 мертвых, средняя нагрузка 5,0000).Я хочу генерировать H-файлы максимально быстрым способом.Я загружаю Hfiles в Hbase, используя rg.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles
.Каждый кластер имеет 40 ядер, поэтому я запускаю параллельно 40 процессов.Моя проблема в том, что только сервер с Hmaster и Namenode использует что-то около 97% процессора и почти всю оперативную память.На двух других серверах ресурсы практически не используются вообще.Мой вопрос заключается в том, можно ли улучшить производительность, используя также их во время генерации файлов Hfiles?Кроме того, может быть, есть функция в MapReduce для настройки количества ядер и узлов, которые я хочу использовать вместо написания программы на Python, которая показана ниже и которую я использую в данный момент?Заранее спасибо.
import subprocess
import os
import time
processes = set()
max_processes = 40
for key in range(0,40):
time.sleep(1)
command = 'sudo -u hdfs /path/to/hbase/bin/hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.separator="," -Dimporttsv.bulk.output=hdfs://myip:9000/tmp/converted_10m' + str(key) + ' -Dimporttsv.columns="HBASE_ROW_KEY,log" logs hdfs://myip:9000/tmp/10m_package' + str(key) + '.csv'
processes.add(subprocess.Popen(command, shell=True))
if len(processes) >= max_processes:
os.wait()
processes.difference_update([
p for p in processes if p.poll() is not None])