Hadoop: 小さなファイルの最適化方法

Hadoop の小さなファイルの最適化方法

Hadoop の小さいファイルの欠点

HDFS 上の各ファイルは、NameNode 上に対応するメタデータを作成する必要があります。このメタデータのサイズは約 150 バイトです。このように、小さなファイルが多数ある場合、大量のメタデータ ファイルが生成され、大量の NameNode を占有します。一方、メモリ領域はメタデータ ファイルが多すぎるため、アドレス指定のインデックス作成が遅くなります。
小さなファイルが多すぎると、MR 計算中に生成されるスライスが多すぎて、開始する必要がある MapTask が多すぎます。各 MapTask が処理するデータ量が少ないため、MapTask の処理時間が起動時間より短くなり、無駄にリソースが消費されます。

Hadoop の小さなファイル ソリューション

1) 小さいファイルの最適化の方向:
(1) データ収集中に、小さいファイルまたはデータの小さいバッチを大きいファイルに合成して、HDFS にアップロードします。
(2) 業務処理の前に、HDFS 上の MapReduce プログラムを使用して小さなファイルをマージします。
(3) MapReduce 処理中に、CombineTextInputFormat を使用して効率を向上させることができます。
(4) jvm の再利用を実現するために uber モードをオンにする
2) Hadoop Archive は、
小さなファイルを HDFS ブロックに配置する効率的なファイル アーカイブ ツールです。複数の小さなファイルを 1 つの HAR ファイルにパッケージ化することで、NameNode のメモリ使用量を削減できます
。 CombineTextInputFormat
CombineTextInputFormat は、スライス プロセス中に複数の小さなファイルから単一のスライスまたは少数のスライスを生成するために使用されます。
4) uber モードをオンにして、JVM の再利用を実現します。
デフォルトでは、各タスクを実行するには JVM を起動する必要があります。タスク タスクによって計算されるデータの量が少ない場合は、タスクごとに 1 つずつ開かなくても、同じジョブの複数のタスクを 1 つの JVM で実行できます。
uber モードをオンにして、次の設定をmapred-site.xmlに追加します。

<!--  开启uber模式 -->
<property>
	<name>mapreduce.job.ubertask.enable</name>
	<value>true</value>
</property>

<!-- uber模式中最大的mapTask数量,可向下修改  --> 
<property>
	<name>mapreduce.job.ubertask.maxmaps</name>
	<value>9</value>
</property>
<!-- uber模式中最大的reduce数量,可向下修改 -->
<property>
	<name>mapreduce.job.ubertask.maxreduces</name>
	<value>1</value>
</property>
<!-- uber模式中最大的输入数据量,默认使用dfs.blocksize 的值,可向下修改 -->
<property>
	<name>mapreduce.job.ubertask.maxbytes</name>
	<value></value>
</property>

おすすめ

転載: blog.csdn.net/weixin_45427648/article/details/131795110