Hadoop HDFS の高レベルの最適化スキーム

目次

1. 短絡ローカル読み取り: 短絡ローカル読み取り

1.1 背景

1.2 旧バージョンの設計と実装

1.3 セキュリティ強化バージョンの設計と実装 

1.4 短絡ローカル読み取り構成

1.4.1 libhadoop.so

1.4.2 hdfs-site.xml

1.4.3 データノードのログを表示する 

2. HDFS ブロック ロード バランサー: バランサー

2.1 背景 

2.2 コマンドライン設定 

2.3 バランサーの実行方法 

2.3.1 バランスドデータカルーセルの設定

2.3.2 バランサの実行 

3. ディスクイコライザー: HDFS ディスクバランサー

3.1 背景 

3.2 HDFS ディスク バランサの概要 

3.3 HDFSディスクバランサー機能 

3.3.1 データ配布レポート

3.3.1.1 ボリュームデータ密度メトリック(ボリュームデータ密度)の計算

3.3.1.2 ノードデータ密度の計算プロセス

3.3.2 ディスクバランシング

3.4 HDFS ディスク バランサーを有効にする 

3.5 HDFS ディスク バランサー関連コマンド 

3.5.1 計画計画 

3.5.2 実行 

3.5.3 クエリクエリ 

3.5.4 キャンセル 

3.5.5 レポート

4. イレイジャーコーディング技術:Erasurecoding 

4.1 背景: コピー戦略の 3 つの欠点

4.2 イレイジャーコーディング (EC) の概要 

4.3 リードソロモン (RS) コード 

4.4 Hadoop EC アーキテクチャ 

4.5 イレイジャーコーディングの導入方法 

4.5.1 クラスタとハードウェア構成 

4.5.2 イレイジャーコードポリシーの設定 

4.5.3 Intel ISA-L (インテリジェント ストレージ アクセラレーション ライブラリ) を有効にする 

4.5.3.1 yasm と nasm のインストール  

4.5.3.2 isa-l-2.28.0 のコンパイルとインストール

4.5.3.3 Hadoop で isa-l が有効になっているかどうかを確認する 

4.5.4 ECコマンド 


1.短絡ローカル読み取り:短絡ローカル読み取り

1.1 背景

        HDFS では 、 ローカル読み取り( DFSClient と Datanode が同じノード上にある) であっても 読み取り( DFSClient と Datanode が同じノード上にない) であっても、基礎となる処理方法は同じであり、 データは最初にDatanode によって読み取られます。次に、  RPC ( TCPベース ) を通じて、データを DFSClientに渡しますこの処理は比較的単純ですが、途中でデータノードが 転送を行う必要があるため、パフォーマンスに影響します 。 

        特に ローカル読み取り の場合、  DFSClient とデータは同じマシン上にあるため、  DFSClient が Datanode をバイパスして 単独でデータを読み取るというのが自然な考え方ですいわゆる「ショートサーキット」読み取りは DataNodeをバイパスし、クライアントがファイルを直接読み取ることができます。明らかに、これはクライアントがデータと同じマシン上にある場合にのみ機能します。短絡読み取りにより、多くのアプリケーションのパフォーマンスが大幅に向上します。 

1.2 旧バージョンの設計と実装

        HDFS-2246 この JIRA では、エンジニアのアイデアは、読み取りデータ DFSClient とデータが同じマシン上にあるため、  Datanode は ファイル システム内のデータのパスを読み取り(オフセット)を行うというものです。 ) 、読み取る量(長さ) 、およびその他の情報をDFSClientに伝え 、  DFSClient が ファイルを開いてそれ自体を読み取ります

アイデアは良いですが、問題は複雑な構成とセキュリティの問題にあります。

        1 つ目は構成の問題です。DFSClient は ファイルを開いてデータを読み取るため、ホワイト リストを構成して、どのユーザーが Datanode のデータ ディレクトリにアクセスできるかを定義する必要があります

        新しいユーザーが参加する場合は、ホワイトリストを変更する必要があります。これは、クライアントが Datanode にアクセスできるようにするデータ ディレクトリであることに注意してください。つまり、この権限を持つユーザーはディレクトリ内の他のデータにアクセスでき、これがセキュリティ ホールにつながります

したがって、この実装は非推奨となります

1.3 セキュリティ強化版の設計と実装 

        HDFS-347 では、ローカル読み取りデータの短絡をより安全にするための新しいソリューションが提案されていますLinux には 、 Unix Domain Socketと呼ばれるテクノロジーがあります Unix Domain Socket は 、同じマシン上の 2 つのプロセスがSocketの形式で通信できるようにするプロセス間通信方法ですこれがもたらすもう 1 つの大きな利点は、2 つのプロセスがこれを使用して、通常のデータに加えてプロセス間でファイル記述子を転送できることです

        マシン上に 2 人のユーザー Aと Bがいてには特定のファイルにアクセスする権限があるが、  には権限がなく、  B は このファイルにアクセスする必要があるとしますUnix ドメイン ソケットの助けを借りて、 A は ファイルを開いてファイル記述子を取得し、そのファイル記述子を Bに渡すことができます 。また、 は、対応するアクセス許可を持っていなくても、ファイルの内容を読み取ることができます

        HDFS シナリオでは、は Datanode B はDFSClientで 、読み取られるファイルは Datanode データ ディレクトリ内のファイルです。

1.4 短絡ローカル読み取り構成

1.4.1  libhadoop.so

        Java は Unix ドメイン ソケットを直接操作できない ため、  Hadoop の ネイティブ パッケージlibhadoop.soをインストールする必要がありますこれは、 Hadoop ソース コードをコンパイルする ときにネイティブ モジュールをコンパイルすることによって取得できます 次のコマンドを使用して、ネイティブ パッケージがインストールされているかどうかを確認できます 

1.4.2  hdfs-site.xml

[root@hadoop01 ~]# vim /bigdata/hadoop/server/hadoop-3.2.4/etc/hadoop/hdfs-site.xml 
<property>
  <name>dfs.client.read.shortcircuit</name>
  <value>true</value>
</property>
<property>
  <name>dfs.domain.socket.path</name>
  <value>/var/lib/hadoop-hdfs/dn_socket</value>
</property>
  • dfs.client.read.shortcircuit は 、ショートサーキットローカル読み取り機能を有効にするスイッチです
  • dfs.domain.socket.path は、 Dtanode と DFSClient の間で通信される Socket のローカル パスです 

また、 ソケットの ローカル パスが事前に作成されていることを確認してください (クラスターの各ノードを作成する必要があります)。

[root@hadoop01 ~]# mkdir -p /var/lib/hadoop-hdfs

注: フォルダーhadoop -hdfs はここに作成され 、上記の構成の dn_socket は フォルダーではなくdatanode 自体によって作成されます 。 

最後に、構成ファイルを他のノードにプッシュし、HDFS クラスターを再起動します。

1.4.3 データノードのログを表示する 

        Datanode の起動ログでは次の関連ログに Unix Domain Socket が有効であることが示され、構成が有効であることが確認されます。 

[root@hadoop01 ~]# cd /bigdata/hadoop/server/hadoop-3.2.4/logs/
[root@hadoop01 /bigdata/hadoop/server/hadoop-3.2.4/logs]# tail -100 hadoop-root-datanode-hadoop01.log 

2. HDFS ブロック ロード バランサー:バランサー

2.1 背景 

        HDFS データは、DataNode 間で常に均等に分散されるとは限りません。一般的な原因は、既存のクラスターに新しい データノードを追加することですHDFS は 、ブロック 配置 情報を分析し 、バランスが取れているとみなされるまでデータノード全体でデータのバランスをとる バランサープログラムを 提供します 

        いわゆるバランスとは、各 DataNode の使用率(マシンの総容量に対するマシンの使用容量の比率) とクラスターの使用率(全体の使用容量の比率) の差を意味します。 HDFS クラスターの総容量に対する HDFS の 割合は指定されたしきい値のパーセンテージを超えませんバランサーは、 単一のDataNode 上の個々のボリューム (ディスク)間でバランスをとることはできません。

2.2 コマンドライン設定 

[root@hadoop01 ~]# hdfs balancer --help
Usage: hdfs balancer
	[-policy <policy>]	the balancing policy: datanode or blockpool
	[-threshold <threshold>]	Percentage of disk capacity
	[-exclude [-f <hosts-file> | <comma-separated list of hosts>]]	Excludes the specified datanodes.
	[-include [-f <hosts-file> | <comma-separated list of hosts>]]	Includes only the specified datanodes.
	[-source [-f <hosts-file> | <comma-separated list of hosts>]]	Pick only the specified datanodes as source nodes.
	[-blockpools <comma-separated list of blockpool ids>]	The balancer will only run on blockpools included in this list.
	[-idleiterations <idleiterations>]	Number of consecutive idle iterations (-1 for Infinite) before exit.
	[-runDuringUpgrade]	Whether to run the balancer during an ongoing HDFS upgrade.This is usually not desired since it will not affect used space on over-utilized machines.
  • -threshold  10                     クラスタバランスの条件、 データノード間のディスク使用量差の閾値間隔選択: 0~100

  • -policy datanode                 Balance ポリシーデフォルトは datanode です。datanodeが バランスされている場合 クラスターはバランスされています

  • -exclude  -f /tmp/ip1.txt      はデフォルトでは空です。ipのこの部分が バランスに参加しないこと を 指定し、-f は 入力がファイルであることを指定します。

  • -include  -f /tmp/ip2.txt       はデフォルトでは空でありip のこの部分のみ がバランスに 参加することを 許可します。 -fは入力をファイルとして指定します

  • -idleiterations  5                  反復5

2.3 バランサーの実行方法  

2.3.1 バランスの取れたデータ転送ベルトのセットアップ

hdfs dfsadmin -setBalancerBandwidth newbandwidth

        ここで、 newbandwidth は、 バランシング操作中に各データノード が使用できるネットワーク帯域幅の最大量 ( バイト/秒)です

例: hdfs dfsadmin - setBalancerBandwidth 104857600 ( 100M )

2.3.2 ラン バランサ 

デフォルトパラメータで実行: HDFSバランサー

実行するしきい値を指定します。hdfs Balancer -threshold 5 バランサーは しきい値の 5 % (デフォルトは 10% )で実行されます

これは、各 データノード のディスク使用量がクラスター全体の使用量と 5 %を超えて変わらない        ことをプログラムが保証することを意味しますたとえば、クラスター内の すべてのDataNode の合計使用量がクラスターの合計ディスク ストレージ容量の 40 % である場合、プログラムは各DataNode のディスク使用量が そのDataNode のディスク ストレージ容量 の35 % から 45 % の間にあることを保証します。

3.ディスクバランサー: HDFS ディスクバランサー

3.1 背景 

        個人の PC と比較して、サーバーは一般に複数のディスクを搭載することで 1 台のマシンの記憶容量を拡張できます。Hadoop HDFS では DataNode が 最終的なデータブロック のストレージを担当し 、ホスト マシン上のディスク間でデータ ブロックを分散します。新しい ブロック を書き込むときDataNodes は 選択ポリシー (ラウンドロビン ポリシーまたは空き領域ポリシー)に従ってブロック のディスク (ボリューム)を選択し ます

  • ラウンドロビン戦略: 新しい ブロックを 利用可能なディスク全体に均等に分散します。このポリシーはデフォルトです。
  • 空き容量ポリシー: このポリシーは、(パーセンテージで) より多くの空き容量があるディスクにデータを書き込みます。

        しかし、長時間実行されるクラスターでラウンドロビン戦略を使用するとデータノードが ストレージ ディレクトリ(ディスク/ボリューム) に不均等にデータを配置することがあり、一部のディスクがいっぱいで、他のディスクがほとんど使用されないという状況が発生します。これは、大量の書き込みおよび削除操作、またはディスクの交換によって発生する可能性があります。

        また、空き領域に基づく選択戦略を使用する場合、新しい書き込みはそれぞれ新しく追加された空のディスクに送られ、その期間中他のディスクは空き状態になります。これにより、新しいディスクにボトルネックが発生しますしたがって、 ディスク交換やランダムな書き込みと削除によって発生するデータノード内スキュー (ディスク上のブロックの不均一な分散) に対処するには、データノード内バランシング( DataNode 内 の データ ブロックの均一な分散) が必要です。

        そのため、 Hadoop 3.0 では 、 DataNodes 内でのデータの分散に重点を置いたDisk Balancer と呼ばれるツール が導入されました

3.2  HDFSディスク バランサ の概要 

        HDFS ディスク バランサーは 、  Hadoop 3 で導入されたコマンド ライン ツールで、ディスク間のデータノード 内のデータの不均一な分散のバランスをとる ために使用されますここで特に注意してください。HDFSディスク バランサーは HDFS バランサー とは 異なります。

  • HDFS ディスク バランサーは、特定の DataNode 上で 動作し、あるディスクから別のディスクにブロックを移動しますこれにより、  DataNode の 内部データが異なるディスク間でバランスがとられます。
  • HDFS バランサーは、  DataNode ノード間の分散のバランスをとります

3.3  HDFSディスクバランサー 機能 

3.3.1 データ配布レポート

        クラスター内のどのコンピューターがデータの不均一な分散に苦しんでいるかを測定するために、ディスクバランサーは、ボリューム データ密度メトリック(ボリューム/ディスク データ密度メトリック)と ノード データ密度メトリック(ノード データ密度メトリック)を定義します

  • ボリューム (ディスク) データ密度: 同じマシン上の異なるボリューム間のデータ分散を比較します
  • ノードのデータ密度: 比較は異なるマシン間で行われます。

3.3.1.1 ボリュームデータ密度メトリック(ボリュームデータ密度)の計算

        ボリューム データ密度の 正の値はディスクが十分に利用されていないことを示し負の値は現在の理想的なストレージ ターゲットと比較してディスクが過剰に利用されている

コンピューターに 4 つのボリューム/ディスク( Disk1 Disk2 Disk3 Disk4 ) があると仮定すると、個々のディスク使用量は次のようになります。

合計容量= 200 + 300 + 350 + 500 = 1350 GB

合計使用量 = 100 + 76 + 300 + 475 = 951 GB

したがって、各ボリューム/ディスク上の理想的なストレージは次のようになります

理想的なストレージ=合計使用量 ÷合計容量= 951 ÷ 1350 = 0.70

つまり、各ディスクは理想的なストレージ容量の70 %に維持する必要があります

ボリュームのデータ密度=理想的なストレージ– dfs 使用率

たとえば、  Disk1 のボリュームデータ密度は= 0.70 - 0.50 = 0.20 ですその他など

3.3.1.2 ノードデータ密度の 計算プロセス

        ノード データ密度(ノード データ密度) =ノード上のすべてのボリュームデータ密度ボリューム (ディスク)のデータ密度の絶対値の合計

上の例のノード データ密度=|0.20|+|0.45|+|-0.15|+|-0.24| =1.04

ノードのデータ密度の 値        が低いほど 、マシン ノードのスケーラビリティが優れていることを示し、値が高いほど、ノードのデータ分散がより偏っていることを示します。

ボリューム データ密度と ノード データ密度        を取得すると 、クラスター内のデータ分布が偏っているノードと、データが偏っているディスクをマシン上で段階的に見つけることができます。

3.3.2 ディスクバランシング

        DataNode ノードがディスク データ バランス用に指定されている 場合、現在の ボリュームのデータ密度(ディスクボリュームのデータ密度)を最初に計算または読み取ることができますこの情報を使用すると、どのボリュームがオーバープロビジョニングされているか、どのボリュームがアンダープロビジョニングされているかを簡単に判断できます

DataNode 内の        あるボリュームから別のボリュームにデータを移動するために 、 Hadoop 開発では RPC プロトコルに基づいてディスク バランサを実装します

3.4 オープンHDFSディスクバランサー  

        HDFS ディスク バランサーは、2 つのディスク間で移動するデータの量を記述した一連のステートメントであるプランを作成し、 そのステートメント セットをデータノード上で実行することによって動作します。計画には複数の移動ステップが含まれています。計画の各移動ステップには、宛先ディスク、つまりソース ディスクのアドレスがあります。移動ステップには、移動するバイト数も含まれます。プランは、運用中のDataNode に対して実行されます。

デフォルトでは、ディスク バランサー 機能は        Hadoop クラスターで有効になっています hdfs-site.xml のdfs.disk.balancer.enabled パラメーター値 を調整することで 、 Hadoop でディスク バランサーを有効にするかどうかを選択します。

3.5  HDFSディスクバランサー 関連コマンド 

3.5.1 計画計画 

コマンド: hdfs discbalancer -plan <データノード> 

  • -out は、                                    プラン ファイルの出力場所を制御します。

  • -bandwidth は、                         Disk Balancer を実行するための 最大帯域幅を設定しますデフォルトの帯域幅は 10 MB/秒です。

  • -thresholdPercentage は         、ディスクがデータの再分散またはバランス操作に参加し始める値を定義しますデフォルトのthresholdPercentage 値は 10 %です。これは、ディスクに含まれるデータが理想的に格納されているデータの10 %以下である場合にのみ、ディスクがバランス操作に使用されることを意味します

  • -maxerror                            を使用すると、ユーザーは 2 つのディスク間の移動操作で、移動ステップを中止する前に無視するエラーの数を指定できます

  • -v           Verbose                              モード。このオプションを指定すると、 plan コマンドでプランの概要が stdout に強制的に表示されます

  • -fs                                         このオプションは、使用する NameNode を指定します 指定しない場合、Disk  Balancer は 構成からの デフォルトのNameNodeを使用します

3.5.2  _の実行  

コマンド:hdfs discbalancer -execute <JSON ファイルパス>

実行コマンドは、プランが生成されたデータノードに対してプランを実行します。

3.5.3 クエリ クエリ 

コマンド: hdfs discbalancer -query <データノード>

クエリ コマンドは、スケジュールを実行している DataNode から HDFS ディスク バランサーの現在の状態を取得します。 

3.5.4 キャンセル _ 

命令:hdfs diskbalancer -cancel <JSON file path>      

           hdfs discbalancer -cancel planID ノード <ノード名>

cancel コマンドは実行計画をキャンセルします。 

3.5.5 レポート _

コマンド: hdfs discbalancer -fs hdfs://nn_host:8020 -report 

4.イレイジャーコーディング技術Erasurecoding 

4.1 背景: コピー戦略の欠点

        フォールト トレランスを提供するために、HDFS は レプリケーション ファクター(レプリケーション ファクター) に従ってファイル ブロックを異なる データノード に複製します

        デフォルトのレプリケーション係数は 3 です(ここで の3 は、追加の 3 ではなく、 1+2=3を指すことに 注意してください)。そのため、元のブロックを除いて 2 つの追加コピーが存在します。各コピーは ストレージ オーバーヘッドの 100 % を使用するため、ストレージ オーバーヘッドは200 % になります。これらのコピーは、ネットワーク帯域幅などの他のリソースも消費します

レプリケーション係数が N の場合 、 N-1 の フォールト トレランス機能があります が、ストレージ効率は1/Nにすぎません 

4.2 イレイジャーコーディング( EC )の概要 

        イレイジャーコーディングテクノロジー ( 略してEC )は、コーディングエラー耐性のあるテクノロジーです。これは、通信業界とデータ伝送におけるデータ回復で最初に使用されました。データをブロックに分割し、各部分のデータが関連付けられるように検証データを計算しますデータブロックの一部が失われた場合、残りのデータブロックとチェックブロックを通じて失われたデータブロックを計算することができます

Hadoop 3.0 以降は、ストレージ使用率を50% 以上向上させ、データの信頼性を確保できる        消去コーディング技術 (Erasurecoding ) が導入されました 

4.3 リードソロモン( RS ) コード 

リードソロモン ( RS ) コードは一般的に使用される消去コード であり、 RS(k , m)として記録される 2 つのパラメーターおよび mを持ちます

        k データ ブロックで構成されるベクトルに生成行列 (Generator Matrix ) GT を乗算して、 データ ブロック ( d0,d1..d3 )と チェック ブロック ( c0,c1 )で構成される コードワード ( codeword ) ベクトルを取得します。形状。

データ ブロックが失われた場合、  GT逆行列にコード ワード ベクトルを乗算することで、失われたデータ ブロックを回復できます。

例えば、元データは7、8、9の3つであり行列乗算により2つの検証データ50、122が算出れる

        このとき、元のデータと検証データの合計 7 8 9 50 122 、 2 つの合計 5 つのデータが任意に失われますが、アルゴリズムによって復元できます。

4.4  Hadoop ECアーキテクチャ 

イレイジャーコーディングをサポートするために、 HDFS アーキテクチャにはいくつかの変更と調整が加えられています。 

  • ネームノードの拡張子

        ストライプ HDFS ファイルは論理的にブロック グループ(ブロック グループ)で 構成され、各ブロック グループには一定数の内部ブロックが含まれます。これにより、ブロック レベルではなくブロック グループレベルでのファイル管理が可能になります。

  • クライアント拡張機能

クライアントの読み取りパスと書き込みパスが強化され、ブロック グループ内の複数の内部ブロックを並行して処理できるようになりました。

  • データノード拡張

DataNodes は、失敗したイレイジャー コーディング ブロックをバックグラウンドで回復するために、        追加の ErasureCodingWorker ( ECWorker ) タスクを実行しますNameNode は 障害が発生した EC ブロックを検出し、その後、  NameNode が 回復作業を実行するDataNode を選択します 。

  • イレージコーディング戦略

        異種ワークロードに対応するために、  HDFS クラスター内のファイルとディレクトリには、異なるレプリケーション ポリシーとイレイジャー コーディング ポリシーを適用できます。イレイジャーコーディングポリシーは、ファイルのエンコード/デコード方法をカプセル化します。デフォルトでは 、 RS-6-3-1024k ポリシーが有効になっており、RS は エンコーダ アルゴリズム リードソロモンを表し 63は データ ブロックとパリティ ブロックの数を表し、1024k は ストライピング ユニットのサイズを表します。

        デフォルトの REPLICATION スキームはディレクトリでもサポートされます。これをディレクトリにのみ設定して、ディレクトリに 3 倍の レプリケーション スキームを強制的に適用し、その祖先の消去コーディング ポリシーを継承させないようにすることができます。この戦略により、3xレプリケーション スキームのディレクトリをイレイジャー コード化されたディレクトリとインターリーブできるようになります。レプリケーションは 常に有効です。

        さらに、ユーザーは、  XML ファイルを使用して独自の EC ポリシーを定義することもできます。Hadoop conf ディレクトリには、 user_ec_policies.xml.template という名前のサンプル EC ポリシー XML ファイルがあり、ユーザーはこのファイルを参照できます。

  • インテルISA-L

        Intel ISA-L は、  Intel Intelligent Storage Acceleration Libraryの略ですISA-L は 、ストレージ アプリケーション向けに最適化された低レベル関数のオープン ソース コレクションです。これには、 Intel AVX および AVX2 命令セット用に 最適化された 高速ブロックリードソロモン タイプの消去コードが含まれています。HDFS 消去コードは ISA-L を使用して、エンコードとデコードの計算を高速化できます。

4.5 イレイジャーコーディング の導入方法 

4.5.1 クラスタとハードウェア構成 

エンコードおよびデコード作業では、HDFSクライアントおよびDataNode上の 追加のCPUが消費されます。

        ラックのフォールトトレランスのために、消去符号化されたファイルもラック全体に分散されます。これは、ストライプ ファイルの読み取りと書き込みの際、ほとんどの操作がラック上で実行されることを意味します。したがって、ネットワーク帯域幅も非常に重要です。

ラックのフォールト トレランスを実現するには、十分な数のラックを用意し、各ラックにEC パリティ ブロックの数を超えるブロックを保持しないこと         も重要ですラック= (データ ブロック+パリティ ブロック) /四捨五入後のパリティ ブロック

EC 戦略 RS ( 6,3 )        の場合 、これは、計画的および計画外のダウンタイムに対処するために、最小 3 ラック (( 6+3 ) /3=3で計算)、理想的には 9 以上のラックを意味します。パリティ ユニットよりもラックの数が少ないクラスターの場合、HDFS は ラックのフォールト トレランスを維持できませんが、ノード レベルのフォールト トレランスを維持するために複数のノードにストライプ ファイルを分散しようとします。したがって、同数の DataNode を使用してラックをセットアップすることをお勧めします

4.5.2 イレイジャーコードポリシーの設定 

        イレイジャー コード ポリシーはパラメータ dfs.namenode.ec.system.default.policy で指定されデフォルトは RS-6-3-1024kで、他のポリシーはデフォルトで無効になっています

ポリシー セットは、 hdfs ec [-enablePolicy -policy <policyName>] コマンドで 有効にできます

4.5.3  Intel  ISA-L (インテリジェント ストレージ アクセラレーション ライブラリ)を有効にする 

        デフォルトの RS コーデック のHDFS ネイティブ実装は、インテル ISA-L ライブラリを利用して 、エンコードおよびデコードの計算を改善します。Intel ISA-L を有効にして使用するには 、3 つの手順が必要です。

  1. ISA-L ライブラリを構築します 
  2. ISA-L サポートを使用して Hadoopを構築します 
  3. -Dbundle.isalを使用して、  isal.lib ディレクトリの内容を最終的な tar ファイルに コピーし ますtar ファイルを使用して HadoopをデプロイしますISA-L が HDFS クライアントと DataNode で 利用可能であることを確認してください 

必要なソフトウェア: 

ソフトウェア バージョン
ハドゥープ 3.2.4
ワンエル 2.28.0
名前 2.14.02
ヤスム 1.2.0

4.5.3.1 yasm と nasm のインストール  

# 在Hadoop集群所有节点上安装yasm和nasm。
yum install -y yasm
yum install -y nasm

# 注意:isa-l-2.28.0 对 nasm 和 yasm 有版本要求,低版本在安装时会报错。

4.5.3.2  isa-l-2.28.0 のコンパイルとインストール

# 在 Hadoop集群所有节点上编译安装 isa-l-2.28.0。
tar -zxvf isa-l-2.28.0.tar.gz
cd isa-l-2.28.0
./autogen.sh
./configure --prefix=/usr --libdir=/usr/lib64
make
make install
 
make -f Makefile.unx

# 检查 libisal.so* 是否成功
ll /lib64/libisal.so*
 
############如果有,则跳过##############
############如果没有有,则复制##############
cp bin/libisal.so bin/libisal.so.2 /lib64

4.5.3.3 Hadoop で isa-l が有効になっているかどうかを確認する 

[root@hadoop01 ~]# hadoop checknative
Native library checking:
hadoop:  true /usr/hdp/3.0.0.0-1634/hadoop/lib/native/libhadoop.so.1.0.0
zlib:    true /lib64/libz.so.1
zstd  :  false
snappy:  true /usr/hdp/3.0.0.0-1634/hadoop/lib/native/libsnappy.so.1
lz4:     true revision:10301
bzip2:   true /lib64/libbz2.so.1
openssl: true /lib64/libcrypto.so
ISA-L:   true /lib64/libisal.so.2     ------------->  Shows that ISA-L is loaded.

4.5.4  EC コマンド 

[root@hadoop01 ~]# hdfs ec
Usage: bin/hdfs ec [COMMAND]
          [-listPolicies]
          [-addPolicies -policyFile <file>]
          [-getPolicy -path <path>]
          [-removePolicy -policy <policy>]
          [-setPolicy -path <path> [-policy <policy>] [-replicate]]
          [-unsetPolicy -path <path>]
          [-listCodecs]
          [-enablePolicy -policy <policy>]
          [-disablePolicy -policy <policy>]
          [-verifyClusterSetup [-policy <policy>...<policy>]]
          [-help <command-name>]

[-setPolicy -path <パス> [-policy <ポリシー> ] [-replicate ]]

  • 指定されたパスのディレクトリにイレイジャー コーディング ポリシーを設定します。

  • パス: HDFS 内のディレクトリ。これは必須パラメータです。ポリシーの設定は、既存のファイルではなく、新しく作成されたファイルにのみ影響します。

  • policy : このディレクトリ下のファイルに使用するイレイジャーコーディングポリシー。デフォルトの RS-6-3-1024k ポリシー。

  • -replicate は、ディレクトリにデフォルトの REPLICATION スキームを適用し、ディレクトリに 3x レプリケーション スキームを強制 的に適用しますreplicateと -policy <policy> は オプションのパラメータです同時に指定することはできません。 

[-getPolicy -path <パス> ]

指定されたパスにあるファイルまたはディレクトリのイレイジャー コーディング ポリシーの詳細を取得します。

[-unsetPolicy -path <path> ]ディレクトリ上の setPolicyへの前の呼び出しによって設定されたイレイジャー コーディング ポリシーを        設定解除します ディレクトリが祖先ディレクトリ からイレイジャーコーディング ポリシーを継承している場合、unsetPolicy は 何も行われません明示的なポリシーが設定されていないディレクトリでポリシーをキャンセルしても、エラーは返されません。
 

[-listPolicies] HDFS に登録されているすべてのイレイジャー コーディング ポリシー (有効化、無効化、および削除)
        を一覧表示します setPolicy コマンドでの使用  に適しているのは、有効なポリシーのみです[-addPolicies -policyFile <file> ]ユーザー定義のイレイジャー コーディング ポリシーリストを追加します。[-listCodecs]システムでサポートされているイレイジャー コーディング コーデックとエンコーダーのリストを取得します。[-removePolicy -policy <ポリシー名> ]ユーザー定義のイレイジャー コーディング ポリシーを削除します。[-enablePolicy -policy <ポリシー名> ]イレイジャー コーディング ポリシーを有効にします。[-disablePolicy -policy <policyName> ]イレイジャー コーディング ポリシーを無効にます









おすすめ

転載: blog.csdn.net/weixin_46560589/article/details/132624510