Как использовать все возможные ресурсы на всех узлах для генерации H-файлов с использованием MapReduce в Hadoop? - PullRequest
0 голосов
/ 07 декабря 2018

У меня есть полностью распределенный трехузловой кластер 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])
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...