HiveからHBaseテーブルを作成し、それに対して単純な集計を実行しようとしています。これは私のHiveクエリです。
from my_hbase_table
select col1, count(1)
group by col1;
Map reduceジョブは2つのマッパーしか生成しません。これを増やしたいのですが。単純なmap reduceジョブでは、糸とマッパーのメモリを構成してマッパーの数を増やします。 Hiveで次のことを試しましたが、うまくいきませんでした。
set yarn.nodemanager.resource.cpu-vcores=16;
set yarn.nodemanager.resource.memory-mb=32768;
set mapreduce.map.cpu.vcores=1;
set mapreduce.map.memory.mb=2048;
注意:
デフォルト値よりも小さいファイルを分割することは効率的な解決策ではありません。唾吐きは基本的に、大きなデータセットを処理するときに使用されます。デフォルト値はそれ自体が小さいサイズなので、再度分割する価値はありません。
クエリの前に次の構成をお勧めします。入力データに基づいて適用できます。
set Hive.merge.mapfiles=false;
set Hive.input.format=org.Apache.hadoop.Hive.ql.io.HiveInputFormat;
set mapred.map.tasks = XX;
減速機の数も割り当てたい場合は、以下の設定を使用できます
set mapred.reduce.tasks = XX;
Hadoop 2(YARN)では、mapred.map.tasks
およびmapred.reduce.tasks
は非推奨であり、他の変数に置き換えられています。
mapred.map.tasks --> mapreduce.job.maps
mapred.reduce.tasks --> mapreduce.job.reduces
これに関連する以下の役立つリンクを参照してください
http://answers.mapr.com/questions/5336/limit-mappers-and-reducers-for-specific-job.html
マッパーの割り当て方法
マッパーの数は、MapReduceジョブで使用されるInputFormatによって決定される分割の数によって決定されます。典型的なInputFormatでは、それはファイル数とファイルサイズに正比例します。
hDFSブロック構成が64MB(デフォルトサイズ)に構成されていて、100MBサイズのファイルがある場合、2ブロックを占有し、ブロックに基づいて2つのマッパーが割り当てられます
しかし、30MBのサイズのファイルが2つある場合(各ファイル)、各ファイルは1つのブロックを占有し、マッパーはそれに基づいて割り当てられます。
多数の小さなファイルで作業している場合、HiveはデフォルトでCombineHiveInputFormatを使用します。 MapReduceの観点から見ると、最終的には複数のファイルに仮想スプリットを作成するCombineFileInputFormatを使用し、可能な場合は共通ノードでグループ化してラックに変換します。結合された分割のサイズは、
mapred.max.split.size
or
mapreduce.input.fileinputformat.split.maxsize ( in yarn/MR2);
したがって、スプリットを少なくしたい(マッパーを少なくしたい)場合は、このパラメーターを高く設定する必要があります。
このリンクは、それについてさらに理解するのに役立ちます。
各Hadoopマッパーが読み取るデフォルトのサイズは何ですか?
また、マッパーとレデューサーの数は常に、クラスターの使用可能なマッパーとレデューサースロットに依存します。
入力分割サイズをデフォルト値から減らします。マッパーは増加します。
SET mapreduce.input.fileinputformat.split.maxsize;
HBaseテーブルを分割すると、ジョブがより多くのマッパーを自動的に使用するようになります。
2つの分割があるため、各分割は1つのマッパーによって読み取られます。いいえ。分割の。