Hadoop-ビッグデータの概要
'_「世界のデータの90%は過去数年で生成されました。」_
新しいテクノロジー、デバイス、ソーシャルネットワーキングサイトなどの通信手段の出現により、人類が生成するデータの量は毎年急速に増加しています。 当初から2003年までに生成されたデータ量は50億ギガバイトでした。 データをディスクの形で積み上げると、フットボール競技場全体を埋めることができます。 2011 では2日ごとに、 2013 では10分ごとに同じ量が作成されました。 この割合はまだ非常に大きくなっています。 生成されたこの情報はすべて意味のあるものであり、処理時に役立つ可能性がありますが、無視されています。
ビッグデータとは?
- ビッグデータ*は、従来のコンピューティング技術では処理できない大きなデータセットのコレクションです。 それは単一の技術やツールではなく、さまざまなツール、技術、フレームワークを含む完全な主題になっています。
ビッグデータに含まれるもの
ビッグデータには、さまざまなデバイスやアプリケーションによって生成されたデータが含まれます。 以下は、ビッグデータの傘下にあるフィールドの一部です。
- ブラックボックスデータ-ヘリコプター、飛行機、ジェットなどのコンポーネントです。 飛行乗務員の声、マイクとイヤホンの録音、および航空機の性能情報をキャプチャします。
- ソーシャルメディアデータ-FacebookやTwitterなどのソーシャルメディアは、世界中の何百万人もの人々が投稿した情報と意見を保持しています。
- 証券取引所データ-証券取引所データには、顧客が行ったさまざまな会社のシェアで行われた「購入」と「販売」の決定に関する情報が含まれています。
- パワーグリッドデータ-パワーグリッドデータは、基地局に関して特定のノードによって消費される情報を保持します。
- 輸送データ-輸送データには、車両のモデル、容量、距離、および可用性が含まれます。
- 検索エンジンデータ-検索エンジンは、さまざまなデータベースから大量のデータを取得します。
したがって、ビッグデータには、膨大な量、高速、および拡張可能なさまざまなデータが含まれます。 その中のデータは3つのタイプになります。
- 構造化データ-リレーショナルデータ。
- 半構造化データ-XMLデータ。
- 非構造化データ-ワード、PDF、テキスト、メディアログ。
ビッグデータの利点
- Facebookなどのソーシャルネットワークに保存されている情報を使用して、マーケティング代理店はキャンペーン、プロモーション、およびその他の広告媒体への対応について学習しています。
- ソーシャルメディアの情報(消費者の好みや製品の認識など)を使用して、製品会社や小売組織が生産を計画しています。
- 病院は、患者の以前の病歴に関するデータを使用して、より優れた迅速なサービスを提供しています。
ビッグデータテクノロジー
ビッグデータテクノロジーは、より正確な分析を提供する上で重要であり、より具体的な意思決定につながり、運用効率の向上、コスト削減、ビジネスのリスク削減につながります。
ビッグデータの力を活用するには、大量の構造化および非構造化データをリアルタイムで管理および処理し、データのプライバシーとセキュリティを保護できるインフラストラクチャが必要です。
市場には、ビッグデータを処理するために、Amazon、IBM、Microsoftなどを含むさまざまなベンダーのさまざまなテクノロジーがあります。 ビッグデータを処理するテクノロジーを検討しながら、次の2つのクラスのテクノロジーを調べます-
運用上のビッグデータ
これには、データが主にキャプチャおよび保存されるリアルタイムの対話型ワークロードに運用機能を提供するMongoDBなどのシステムが含まれます。
NoSQL Big Dataシステムは、過去10年間に出現した新しいクラウドコンピューティングアーキテクチャを活用して、大規模な計算を安価で効率的に実行できるように設計されています。 これにより、運用上のビッグデータワークロードの管理がはるかに簡単になり、安価で、実装が高速になります。
一部のNoSQLシステムは、最小限のコーディングで、データサイエンティストや追加のインフラストラクチャを必要とせずに、リアルタイムデータに基づいてパターンと傾向に関する洞察を提供できます。
分析ビッグデータ
これらには、Massively Parallel Processing(MPP)データベースシステムやMapReduceなどのシステムが含まれており、ほとんどまたはすべてのデータに影響を与える可能性のある遡及的かつ複雑な分析のための分析機能を提供します。
MapReduceは、SQLが提供する機能を補完する新しいデータ分析方法と、単一サーバーから数千台のハイエンドおよびローエンドマシンにスケールアップできるMapReduceに基づくシステムを提供します。
これら2つのクラスのテクノロジーは補完的であり、頻繁に一緒に展開されます。
運用対 分析システム
Operational | Analytical | |
---|---|---|
Latency | 1 ms - 100 ms | 1 min - 100 min |
Concurrency | 1000 - 100,000 | 1 - 10 |
Access Pattern | Writes and Reads | Reads |
Queries | Selective | Unselective |
Data Scope | Operational | Retrospective |
End User | Customer | Data Scientist |
Technology | NoSQL | MapReduce, MPP Database |
ビッグデータの課題
ビッグデータに関連する主要な課題は次のとおりです-
- データのキャプチャ
- キュレーション
- ストレージ
- 検索中
- 共有する
- 転送
- 分析
- プレゼンテーション
上記の課題を満たすために、組織は通常、エンタープライズサーバーの助けを借ります。
Hadoop-ビッグデータソリューション
従来のアプローチ
このアプローチでは、企業はビッグデータを保存および処理するコンピューターを使用します。 ストレージの目的で、プログラマーはOracle、IBMなどのデータベースベンダーの選択を利用します。 このアプローチでは、ユーザーはアプリケーションと対話し、アプリケーションがデータストレージと分析の一部を処理します。
制限
このアプローチは、標準のデータベースサーバーで処理できる、またはデータを処理しているプロセッサの制限まで収容できる、より少ないデータを処理するアプリケーションでうまく機能します。 しかし、膨大な量のスケーラブルなデータを扱う場合、単一のデータベースのボトルネックを通じてそのようなデータを処理するのは多忙な作業です。
Googleのソリューション
GoogleはMapReduceと呼ばれるアルゴリズムを使用してこの問題を解決しました。 このアルゴリズムは、タスクを小さな部分に分割し、それらを多くのコンピューターに割り当て、それらから結果を収集して、統合時に結果データセットを形成します。
Hadoop
Googleが提供するソリューションを使用して、 Doug Cutting と彼のチームは HADOOP と呼ばれるオープンソースプロジェクトを開発しました。
Hadoopは、MapReduceアルゴリズムを使用してアプリケーションを実行します。このアルゴリズムでは、データは他のアルゴリズムと並行して処理されます。 つまり、Hadoopは、膨大な量のデータに対して完全な統計分析を実行できるアプリケーションの開発に使用されます。
Hadoop-はじめに
Hadoopは、Javaで記述されたApacheオープンソースフレームワークであり、単純なプログラミングモデルを使用して、コンピューターのクラスター間で大規模なデータセットを分散処理できます。 Hadoopフレームワークアプリケーションは、コンピューターのクラスター全体に分散した_storage_と_computation_を提供する環境で動作します。 Hadoopは、単一サーバーから数千台のマシンにスケールアップするように設計されており、それぞれがローカルの計算とストレージを提供します。
Hadoopアーキテクチャ
そのコアには、Hadoopには2つの主要な層があります-
- 処理/計算レイヤー(MapReduce)、および
- ストレージ層(Hadoop分散ファイルシステム)。
MapReduce
MapReduceは、Googleで考案された分散アプリケーションを作成するための並列プログラミングモデルで、大量のデータ(マルチテラバイトデータセット)を、商用ハードウェアの大規模なクラスター(数千ノード)で、信頼性の高いフォールトトレラントな方法で効率的に処理します。 MapReduceプログラムは、ApacheオープンソースフレームワークであるHadoopで実行されます。
Hadoop分散ファイルシステム
Hadoop分散ファイルシステム(HDFS)は、Googleファイルシステム(GFS)に基づいており、市販のハードウェアで実行するように設計された分散ファイルシステムを提供します。 既存の分散ファイルシステムと多くの類似点があります。 ただし、他の分散ファイルシステムとの違いは重要です。 耐障害性が高く、低コストのハードウェアに展開するように設計されています。 アプリケーションデータへの高スループットアクセスを提供し、大規模なデータセットを持つアプリケーションに適しています。
上記の2つのコアコンポーネントとは別に、Hadoopフレームワークには次の2つのモジュールも含まれています-
- Hadoop Common -これらは他のHadoopに必要なJavaライブラリとユーティリティです モジュール
- Hadoop YARN -これは、ジョブスケジューリングとクラスターリソースのフレームワークです。 管理。
Hadoopの仕組み
大規模な処理を処理する重い構成の大きなサーバーを構築するのは非常に費用がかかりますが、代わりに、単一の機能的な分散システムとしてクラスター化されたマシンがデータセットを読み取ることができるように、単一のCPUを備えた多くの市販のコンピューターを結び付けることができます並行して、はるかに高いスループットを提供します。 さらに、1台のハイエンドサーバーよりも安価です。 そのため、これはHadoopを使用した最初の動機付け要因であり、クラスター化された低コストのマシンで実行されます。
Hadoopは、コンピューターのクラスター全体でコードを実行します。 このプロセスには、Hadoopが実行する次のコアタスクが含まれます-
- データは最初にディレクトリとファイルに分割されます。 ファイルは、128Mと64M(できれば128M)の均一サイズのブロックに分割されます。
- これらのファイルは、さらに処理するためにさまざまなクラスターノードに分散されます。
- ローカルファイルシステムの上にあるHDFSは、処理を監督します。
- ブロックは、ハードウェア障害を処理するために複製されます。
- コードが正常に実行されたことを確認します。
- マップとリデュースステージの間で行われるソートの実行。
- ソートされたデータを特定のコンピューターに送信します。
- 各ジョブのデバッグログを作成します。
Hadoopの利点
- Hadoopフレームワークを使用すると、ユーザーは分散システムをすばやく記述してテストできます。 効率的であり、データを自動的に分散し、マシン間で作業し、CPUコアの基本的な並列処理を利用します。
- Hadoopは、耐障害性と高可用性(FTHA)を提供するためにハードウェアに依存せず、Hadoopライブラリ自体がアプリケーション層で障害を検出して処理するように設計されています。
- サーバーはクラスターに動的に追加またはクラスターから削除でき、Hadoopは中断することなく動作し続けます。
- Hadoopのもう1つの大きな利点は、オープンソースであることに加えて、Javaベースであるため、すべてのプラットフォームで互換性があることです。
Hadoop-環境設定
Hadoopは、GNU/Linuxプラットフォームとそのフレーバーによってサポートされています。 したがって、Hadoop環境をセットアップするにはLinuxオペレーティングシステムをインストールする必要があります。 Linux以外のOSを使用している場合は、Virtualboxソフトウェアをインストールして、Virtualbox内にLinuxをインストールできます。
インストール前のセットアップ
Linux環境にHadoopをインストールする前に、 ssh (Secure Shell)を使用してLinuxをセットアップする必要があります。 Linux環境を設定するには、以下の手順に従ってください。
ユーザーを作成する
最初は、Hadoopの別のユーザーを作成して、HadoopファイルシステムをUnixファイルシステムから分離することをお勧めします。 ユーザーを作成するには、以下の手順に従ってください-
- コマンド「su」を使用してルートを開きます。
- コマンド「useradd username」を使用して、rootアカウントからユーザーを作成します。
- これで、コマンド「su username」を使用して既存のユーザーアカウントを開くことができます。
Linuxターミナルを開き、次のコマンドを入力してユーザーを作成します。
SSHセットアップとキー生成
起動、停止、分散デーモンシェル操作など、クラスターでさまざまな操作を行うには、SSHセットアップが必要です。 Hadoopのさまざまなユーザーを認証するには、Hadoopユーザーに公開/秘密キーペアを提供し、それをさまざまなユーザーと共有する必要があります。
SSHを使用してキーと値のペアを生成するには、次のコマンドを使用します。 id_rsa.pubから公開鍵をauthorized_keysにコピーし、所有者にそれぞれauthorized_keysファイルへの読み取りおよび書き込み権限を付与します。
Javaのインストール
JavaはHadoopの主要な前提条件です。 まず、コマンド「java -version」を使用して、システムにjavaが存在することを確認する必要があります。 java versionコマンドの構文は次のとおりです。
すべてが正常な場合、次の出力が表示されます。
システムにjavaがインストールされていない場合は、javaをインストールするための以下の手順に従ってください。
ステップ1
次のリンクhttps://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260l[www.oracle.com]にアクセスして、java(JDK <最新バージョン>-X64.tar.gz)をダウンロード
その後、 jdk-7u71-linux-x64.tar.gz がシステムにダウンロードされます。
ステップ2
通常、ダウンロードしたjavaファイルは、ダウンロードフォルダーにあります。 それを確認し、次のコマンドを使用して jdk-7u71-linux-x64.gz ファイルを抽出します。
ステップ3
すべてのユーザーがJavaを使用できるようにするには、「/usr/local/」の場所に移動する必要があります。 ルートを開き、次のコマンドを入力します。
ステップ4
すべての変更を現在実行中のシステムに適用します。
ステップ5
次のコマンドを使用して、Javaの代替を構成します-
次に、上記で説明したように、端末からjava -versionコマンドを確認します。
Hadoopをダウンロードする
次のコマンドを使用して、Apacheソフトウェア基盤からHadoop 2.4.1をダウンロードして抽出します。
Hadoop操作モード
Hadoopをダウンロードしたら、サポートされている3つのモードのいずれかでHadoopクラスターを操作できます-
- ローカル/スタンドアロンモード-システムにHadoopをダウンロードした後、デフォルトでは、スタンドアロンモードで構成され、単一のJavaプロセスとして実行できます。
- 擬似分散モード-単一のマシンでの分散シミュレーションです。 hdfs、yarn、MapReduceなどの各Hadoopデーモンは、個別のjavaプロセスとして実行されます。 このモードは開発に役立ちます。
- 完全分散モード-このモードは、クラスターとして少なくとも2台以上のマシンで完全に分散されます。 このモードについては、今後の章で詳しく説明します。
スタンドアロンモードでのHadoopのインストール
ここでは、スタンドアロンモードでの Hadoop 2.4.1 のインストールについて説明します。
実行中のデーモンはなく、すべてが単一のJVMで実行されます。 スタンドアロンモードは、開発中にMapReduceプログラムを実行するのに適しています。MapReduceプログラムはテストとデバッグが簡単であるためです。
Hadoopのセットアップ
次のコマンドを*〜/.bashrc *ファイルに追加することにより、Hadoop環境変数を設定できます。
さらに先に進む前に、Hadoopが正常に機能していることを確認する必要があります。 次のコマンドを発行するだけです-
すべてがあなたのセットアップでうまくいけば、次の結果が表示されるはずです-
これは、Hadoopのスタンドアロンモードのセットアップが正常に機能していることを意味します。 デフォルトでは、Hadoopは単一のマシン上で非分散モードで実行されるように構成されています。
例
Hadoopの簡単な例を確認しましょう。 Hadoopのインストールでは、MapReduceの基本機能を提供する次のサンプルMapReduce jarファイルが提供されます。これは、Pi値、特定のファイルリスト内の単語数などの計算に使用できます。
入力ディレクトリを作成して、いくつかのファイルをプッシュします。要件は、それらのファイル内の単語の総数を数えることです。 単語の総数を計算するために、.jarファイルに単語カウントの実装が含まれていれば、MapReduceを記述する必要はありません。 同じ.jarファイルを使用して他の例を試すことができます。次のコマンドを発行して、サポートされているMapReduce機能プログラムをhadoop-mapreduce-examples-2.2.0.jarファイルで確認します。
ステップ1
入力ディレクトリに一時的なコンテンツファイルを作成します。 この入力ディレクトリは、作業したいところならどこでも作成できます。
入力ディレクトリに次のファイルが表示されます-
これらのファイルは、Hadoopインストールホームディレクトリからコピーされています。 実験のために、異なる大規模なファイルセットを作成できます。
ステップ2
次のように、入力ディレクトリで使用可能なすべてのファイル内の単語の総数をカウントするためにHadoopプロセスを開始しましょう-
ステップ3
ステップ2は必要な処理を行い、output/part-r00000ファイルに出力を保存します。
入力ディレクトリで使用可能なすべてのファイルで使用可能な合計数とともにすべての単語がリストされます。
擬似分散モードでのHadoopのインストール
以下の手順に従って、Hadoop 2.4.1を擬似分散モードでインストールします。
ステップ1-Hadoopのセットアップ
次のコマンドを*〜/.bashrc *ファイルに追加することにより、Hadoop環境変数を設定できます。
すべての変更を現在実行中のシステムに適用します。
ステップ2-Hadoopの構成
すべてのHadoop設定ファイルは、「$ HADOOP_HOME/etc/hadoop」の場所にあります。 Hadoopインフラストラクチャに応じて、これらの構成ファイルを変更する必要があります。
JavaでHadoopプログラムを開発するには、 JAVA_HOME の値をシステム内のjavaの場所に置き換えて、 hadoop-env.sh ファイルのjava環境変数をリセットする必要があります。
以下は、Hadoopを構成するために編集する必要があるファイルのリストです。
core-site.xmlを開き、<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
次のデータを想定します。
このファイルを開き、このファイルの<configuration>&lt/configuration>タグの間に次のプロパティを追加します。
注-上記のファイルでは、すべてのプロパティ値はユーザー定義であり、Hadoopインフラストラクチャに応じて変更できます。
このファイルは、Hadoopに糸を設定するために使用されます。 yarn-site.xmlファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
このファイルは、使用しているMapReduceフレームワークを指定するために使用されます。 デフォルトでは、Hadoopにはyarn-site.xmlのテンプレートが含まれています。 まず、次のコマンドを使用して、 mapred-site.xml.template から mapred-site.xml ファイルにファイルをコピーする必要があります。
Hadoopインストールの検証
次の手順を使用して、Hadoopのインストールを確認します。
ステップ1-ノードのセットアップに名前を付ける
次のようにコマンド「hdfs namenode -format」を使用して、namenodeをセットアップします。
期待される結果は次のとおりです。
ステップ2-Hadoop dfの検証
次のコマンドは、dfsを開始するために使用されます。 このコマンドを実行すると、Hadoopファイルシステムが起動します。
予想される出力は次のとおりです-
ステップ3-糸スクリプトの検証
次のコマンドを使用して、糸スクリプトを開始します。 このコマンドを実行すると、糸デーモンが起動します。
次のような予想される出力-
ステップ4-ブラウザーでHadoopにアクセスする
Hadoopにアクセスするためのデフォルトのポート番号は50070です。 次のURLを使用して、ブラウザーでHadoopサービスを取得します。
ステップ5-クラスタのすべてのアプリケーションを確認する
クラスターのすべてのアプリケーションにアクセスするためのデフォルトのポート番号は8088です。 このサービスにアクセスするには、次のURLを使用してください。
Hadoop-HDFSの概要
Hadoop File Systemは、分散ファイルシステム設計を使用して開発されました。 市販のハードウェアで実行されます。 他の分散システムとは異なり、HDFSは耐障害性が高く、低コストのハードウェアを使用して設計されています。
HDFSは非常に大量のデータを保持し、アクセスを容易にします。 このような巨大なデータを保存するために、ファイルは複数のマシンに保存されます。 これらのファイルは、障害が発生した場合にデータが失われる可能性からシステムを保護するために、冗長形式で保存されます。 HDFSは、アプリケーションを並列処理で利用できるようにします。
HDFSの機能
- 分散ストレージおよび処理に適しています。
- Hadoopは、HDFSと対話するためのコマンドインターフェイスを提供します。
- namenodeおよびdatanodeの組み込みサーバーは、ユーザーがクラスターのステータスを簡単に確認するのに役立ちます。
- ファイルシステムデータへのストリーミングアクセス。
- HDFSは、ファイルのアクセス許可と認証を提供します。
HDFSアーキテクチャ
以下に、Hadoopファイルシステムのアーキテクチャを示します。
HDFSはマスタースレーブアーキテクチャに従っており、次の要素があります。
Namenode
namenodeは、GNU/Linuxオペレーティングシステムとnamenodeソフトウェアを含む市販のハードウェアです。 市販のハードウェアで実行できるソフトウェアです。 namenodeを持つシステムはマスターサーバーとして機能し、次のタスクを行います-
- ファイルシステムの名前空間を管理します。
- クライアントのファイルへのアクセスを規制します。
- また、ファイルやディレクトリの名前変更、クローズ、オープンなどのファイルシステム操作を実行します。
データノード
データノードは、GNU/Linuxオペレーティングシステムとデータノードソフトウェアを備えた汎用ハードウェアです。 クラスター内のすべてのノード(商品ハードウェア/システム)には、データノードがあります。 これらのノードは、システムのデータストレージを管理します。
- データノードは、クライアントの要求に従って、ファイルシステム上で読み取り/書き込み操作を実行します。
- また、namenodeの指示に従って、ブロックの作成、削除、複製などの操作を実行します。
ブロック
通常、ユーザーデータはHDFSのファイルに保存されます。 ファイルシステム内のファイルは、1つ以上のセグメントに分割され、個々のデータノードに格納されます。 これらのファイルセグメントはブロックと呼ばれます。 つまり、HDFSが読み取りまたは書き込みできるデータの最小量は、ブロックと呼ばれます。 デフォルトのブロックサイズは64MBですが、HDFS構成を変更する必要に応じて増やすことができます。
HDFSの目標
障害の検出と回復-HDFSには多数の汎用ハードウェアが含まれているため、コンポーネントの障害は頻繁に発生します。 したがって、HDFSには、迅速かつ自動的な障害検出と回復のメカニズムが必要です。
巨大なデータセット-HDFSには、巨大なデータセットを持つアプリケーションを管理するために、クラスターごとに数百のノードが必要です。
データのハードウェア-計算がデータの近くで行われると、要求されたタスクを効率的に実行できます。 特に巨大なデータセットが関係する場合、ネットワークトラフィックを削減し、スループットを向上させます。
Hadoop-HDFSオペレーション
HDFSの開始
最初に、構成済みのHDFSファイルシステムをフォーマットし、namenode(HDFSサーバー)を開いて、次のコマンドを実行する必要があります。
HDFSをフォーマットした後、分散ファイルシステムを起動します。 次のコマンドは、ネームノードとデータノードをクラスターとして起動します。
HDFSのファイルのリスト
サーバーに情報を読み込んだ後、 ’ls’ を使用して、ディレクトリ内のファイルのリスト、ファイルのステータスを確認できます。 以下に、ディレクトリまたはファイル名に引数として渡すことができる ls の構文を示します。
HDFSへのデータの挿入
ローカルシステムのfile.txtというファイルにデータがあり、hdfsファイルシステムに保存する必要があるとします。 以下の手順に従って、Hadoopファイルシステムに必要なファイルを挿入します。
ステップ1
入力ディレクトリを作成する必要があります。
ステップ2
putコマンドを使用して、ローカルシステムからHadoopファイルシステムにデータファイルを転送および保存します。
ステップ3
lsコマンドを使用してファイルを確認できます。
HDFSからのデータの取得
ステップ1
最初に、 cat コマンドを使用してHDFSからデータを表示します。
ステップ2
HDFSのシャットダウン
次のコマンドを使用して、HDFSをシャットダウンできます。
Hadoop-コマンドリファレンス
すべての操作の表を以下に示します。 次の規則がパラメータに使用されます-
他のすべてのファイルとパス名は、HDFS内のオブジェクトを参照します。
Sr.No | Command & Description |
---|---|
1 |
-ls <path> パスで指定されたディレクトリの内容を一覧表示し、各エントリの名前、権限、所有者、サイズ、変更日を表示します。 |
2 |
-lsr <path> -lsのように動作しますが、パスのすべてのサブディレクトリのエントリを再帰的に表示します。 |
3 |
-du <path> パスに一致するすべてのファイルのディスク使用量をバイト単位で表示します。ファイル名は完全なHDFSプロトコルプレフィックスで報告されます。 |
4 |
-dus <path> -duに似ていますが、パス内のすべてのファイル/ディレクトリのディスク使用量の概要を出力します。 |
5 |
-mv <src><dest> srcで示されるファイルまたはディレクトリをHDFS内のdestに移動します。 |
6 |
-cp <src> <dest> srcで識別されたファイルまたはディレクトリをHDFS内のdestにコピーします。 |
7 |
-rm <path> パスで識別されるファイルまたは空のディレクトリを削除します。 |
8 |
-rmr <path> パスで識別されるファイルまたはディレクトリを削除します。 子エントリ(つまり、パスのファイルまたはサブディレクトリ)を再帰的に削除します。 |
9 |
-put <localSrc> <dest> localSrcによって識別されたローカルファイルシステムからファイルまたはディレクトリをDFS内のdestにコピーします。 |
10 |
-copyFromLocal <localSrc> <dest> -putと同じ |
11 |
-moveFromLocal <localSrc> <dest> localSrcによって識別されたローカルファイルシステムからHDFS内のdestにファイルまたはディレクトリをコピーし、成功時にローカルコピーを削除します。 |
12 |
-get [-crc] <src> <localDest> srcで識別されるHDFSのファイルまたはディレクトリを、localDestで識別されるローカルファイルシステムパスにコピーします。 |
13 |
-getmerge <src> <localDest> HDFSのパスsrcに一致するすべてのファイルを取得し、localDestによって識別されるローカルファイルシステム内の単一のマージされたファイルにコピーします。 |
14 |
-cat <filen-ame> ファイル名の内容を標準出力に表示します。 |
15 |
-copyToLocal <src> <localDest> -getと同じ |
16 |
-moveToLocal <src> <localDest> -getと同様に機能しますが、成功するとHDFSコピーを削除します。 |
17 |
-mkdir <path> HDFSにpathという名前のディレクトリを作成します。 欠落しているパスに親ディレクトリを作成します(Linuxの場合、mkdir -pなど)。 |
18 |
-setrep [-R] [-w] rep <path> repへのパスで識別されるファイルのターゲット複製係数を設定します。 (実際の複製係数は、時間の経過とともにターゲットに向かって移動します) |
19 |
-touchz <path> タイムスタンプとして現在の時刻を含むパスにファイルを作成します。 ファイルがすでにサイズ0でない限り、ファイルがパスに既に存在する場合は失敗します。 |
20 |
-test -[ezd] <path> パスが存在する場合は1を返します。長さがゼロです。またはディレクトリまたはそれ以外の場合は0です。 |
21 |
-stat [format] <path> パスに関する情報を出力します。 形式は、ブロック単位のファイルサイズ(%b)、ファイル名(%n)、ブロックサイズ(%o)、複製(%r)、および変更日(%y、%Y)を受け入れる文字列です。 |
22 |
-tail [-f] <file2name> stdoutの最後の1KBのファイルを表示します。 |
23 |
-chmod [-R] mode,mode,… <path>… パスで識別される1つ以上のオブジェクトに関連付けられたファイル許可を変更します。… Rで再帰的に変更を実行します。 modeは3桁の8進数モード、または\ {augo} +/- \ {rwxX}です。 スコープが指定されておらず、umaskを適用しない場合を想定しています。 |
24 |
-chown [-R] [owner][:[group]] <path>… パスで識別されるファイルまたはディレクトリの所有ユーザーおよび/またはグループを設定します。 -Rが指定されている場合、所有者を再帰的に設定します。 |
25 |
-chgrp [-R] group <path>… パスで識別されるファイルまたはディレクトリの所有グループを設定します… -Rが指定されている場合、グループを再帰的に設定します。 |
26 |
-help <cmd-name> 上記のコマンドのいずれかの使用情報を返します。 cmdの先頭の「-」文字を省略する必要があります。 |
Hadoop-MapReduce
MapReduceは、市販のハードウェアの大規模なクラスターで、大量のデータを信頼性の高い方法で並列処理するアプリケーションを作成できるフレームワークです。
MapReduceとは何ですか?
MapReduceは、Javaに基づく分散コンピューティングの処理技術およびプログラムモデルです。 MapReduceアルゴリズムには、MapとReduceという2つの重要なタスクが含まれています。 Mapはデータのセットを取得し、それを別のデータのセットに変換します。個々の要素はタプル(キー/値のペア)に分解されます。 次に、reduceタスクは、マップからの出力を入力として受け取り、それらのデータタプルを小さなタプルセットに結合します。 MapReduceという名前のシーケンスが示すように、reduceタスクは常にマップジョブの後に実行されます。
MapReduceの主な利点は、複数のコンピューティングノードでデータ処理を簡単にスケーリングできることです。 MapReduceモデルでは、データ処理プリミティブはマッパーおよびレデューサーと呼ばれます。 データ処理アプリケーションを_mappers_と_reducers_に分解することは、簡単ではない場合があります。 ただし、アプリケーションをMapReduceフォームで記述した後、クラスター内で数百、数千、または数万のマシンで実行するようにアプリケーションをスケーリングすることは、構成の変更にすぎません。 この単純なスケーラビリティは、多くのプログラマーがMapReduceモデルを使用するようになった理由です。
アルゴリズム
- 通常、MapReduceパラダイムは、データが存在する場所にコンピューターを送信することに基づいています!
- MapReduceプログラムは、マップステージ、シャッフルステージ、およびリデュースステージの3つのステージで実行されます。
- マップステージ-マップまたはマッパーの仕事は、入力データを処理することです。 通常、入力データはファイルまたはディレクトリの形式であり、Hadoopファイルシステム(HDFS)に保存されます。 入力ファイルは、1行ずつマッパー関数に渡されます。 マッパーはデータを処理し、いくつかの小さなデータチャンクを作成します。
- * Reduceステージ*-このステージは、 Shuffle ステージと Reduce ステージの組み合わせです。 Reducerの仕事は、マッパーからのデータを処理することです。 処理後、新しい出力セットが生成され、HDFSに保存されます。
- MapReduceジョブ中に、HadoopはMapおよびReduceタスクをクラスター内の適切なサーバーに送信します。
- フレームワークは、タスクの発行、タスクの完了の確認、ノード間のクラスター全体のデータのコピーなど、データの受け渡しに関するすべての詳細を管理します。
- ほとんどのコンピューティングは、ネットワークトラフィックを削減するローカルディスク上のデータを持つノードで実行されます。 *指定されたタスクの完了後、クラスターはデータを収集および削減して適切な結果を形成し、Hadoopサーバーに送り返します。
入力と出力(Javaパースペクティブ)
MapReduceフレームワークは<key、value>ペアで動作します。つまり、フレームワークはジョブへの入力を<key、value>ペアのセットとして表示し、ジョブの出力として<key、value>ペアのセットを生成します、おそらく異なるタイプの。
キーと値のクラスは、フレームワークによってシリアル化された方法である必要があるため、Writableインターフェイスを実装する必要があります。 さらに、キークラスは、フレームワークによるソートを容易にするために、Writable-Comparableインターフェイスを実装する必要があります。* MapReduceジョブの入力および出力タイプ*-(入力)<k1、v1>→マップ→<k2、v2>→削減→<k3、v3>(出力)。
Input | Output | |
---|---|---|
Map | <k1, v1> | list (<k2, v2>) |
Reduce | <k2, list(v2)> | list (<k3, v3>) |
用語
- PayLoad -アプリケーションはMapおよびReduce関数を実装し、ジョブのコアを形成します。
- マッパー-マッパーは、入力キー/値ペアを一連の中間キー/値ペアにマップします。
- NamedNode -Hadoop分散ファイルシステム(HDFS)を管理するノード。
- DataNode -処理が行われる前にデータが事前に提示されるノード。
- MasterNode -JobTrackerが実行され、クライアントからのジョブ要求を受け入れるノード。
- SlaveNode -Map and Reduceプログラムが実行されるノード。
- JobTracker -ジョブをスケジュールし、タスクトラッカーへの割り当てジョブを追跡します。
- タスクトラッカー-タスクを追跡し、ステータスをJobTrackerに報告します。
- ジョブ-プログラムとは、データセット全体でマッパーとリデューサーを実行することです。
- タスク-データのスライスに対するマッパーまたはリデューサーの実行。
- Task Attempt -SlaveNodeでタスクを実行しようとする特定のインスタンス。
シナリオ例
以下は、組織の電力消費に関するデータです。 さまざまな年の毎月の電気消費量と年間平均が含まれています。
Jan | Feb | Mar | Apr | May | Jun | Jul | Aug | Sep | Oct | Nov | Dec | Avg | |
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1979 | 23 | 23 | 2 | 43 | 24 | 25 | 26 | 26 | 26 | 26 | 25 | 26 | 25 |
1980 | 26 | 27 | 28 | 28 | 28 | 30 | 31 | 31 | 31 | 30 | 30 | 30 | 29 |
1981 | 31 | 32 | 32 | 32 | 33 | 34 | 35 | 36 | 36 | 34 | 34 | 34 | 34 |
1984 | 39 | 38 | 39 | 39 | 39 | 41 | 42 | 43 | 40 | 39 | 38 | 38 | 40 |
1985 | 38 | 39 | 39 | 39 | 39 | 41 | 41 | 41 | 00 | 40 | 39 | 39 | 45 |
上記のデータが入力として与えられる場合、それを処理し、最大使用年、最小使用年などを見つけるなどの結果を生成するアプリケーションを作成する必要があります。 これは、有限数のレコードを持つプログラマーのためのウォークオーバーです。 単純に必要な出力を生成するロジックを記述し、書き込まれたアプリケーションにデータを渡します。
しかし、特定の州のすべての大規模産業の電気消費量は、その形成以来と考えてください。
このようなバルクデータを処理するアプリケーションを作成する場合、
- それらの実行には多くの時間がかかります。
- ソースからネットワークサーバーなどにデータを移動すると、大量のネットワークトラフィックが発生します。
これらの問題を解決するために、MapReduceフレームワークがあります。
入力データ
上記のデータは* sample.txt *として保存され、入力として提供されます。 入力ファイルは次のようになります。
サンプルプログラム
以下に、MapReduceフレームワークを使用したサンプルデータへのプログラムを示します。
上記のプログラムを* ProcessUnits.java。*として保存します。プログラムのコンパイルと実行について以下に説明します。
プロセスユニットプログラムのコンパイルと実行
Hadoopユーザーのホームディレクトリにいると仮定しましょう(例:/home/hadoop)。
上記のプログラムをコンパイルして実行するには、以下の手順に従ってください。
ステップ1
次のコマンドは、コンパイル済みのJavaクラスを格納するディレクトリを作成します。
ステップ2
MapReduceプログラムのコンパイルと実行に使用される Hadoop-core-1.2.1.jar をダウンロードします。 次のリンクhttp://mvnrepository.com/artifact/org.apache.hadoop/hadoop-core/1.2.1[mvnrepository.com]にアクセスして、jarをダウンロードします。 ダウンロードしたフォルダが*/home/hadoop/.*であると仮定しましょう
ステップ3
次のコマンドは、 ProcessUnits.java プログラムをコンパイルし、プログラムのjarを作成するために使用されます。
ステップ4
次のコマンドを使用して、HDFSに入力ディレクトリを作成します。
ステップ5
次のコマンドを使用して、* sample.txt *という名前の入力ファイルをHDFSの入力ディレクトリにコピーします。
ステップ6
次のコマンドを使用して、入力ディレクトリ内のファイルを確認します。
ステップ7
次のコマンドは、入力ディレクトリから入力ファイルを取得してEleunit_maxアプリケーションを実行するために使用されます。
ファイルが実行されるまでしばらく待ちます。 実行後、以下に示すように、出力には入力分割の数、マップタスクの数、レデューサータスクの数などが含まれます。
ステップ8
次のコマンドを使用して、出力フォルダー内の結果ファイルを確認します。
ステップ9
以下は、MapReduceプログラムによって生成された出力です。
ステップ10
次のコマンドは、分析のためにHDFSからローカルファイルシステムに出力フォルダーをコピーするために使用されます。
重要なコマンド
すべてのHadoopコマンドは、 $ HADOOP_HOME/bin/hadoop コマンドによって呼び出されます。 引数なしでHadoopスクリプトを実行すると、すべてのコマンドの説明が出力されます。
使用法-hadoop [--config confdir]コマンド
次の表に、使用可能なオプションとその説明を示します。
Sr.No. | Option & Description |
---|---|
1 |
namenode -format DFSファイルシステムをフォーマットします。 |
2 |
secondarynamenode DFSセカンダリネームノードを実行します。 |
3 |
namenode DFS名前ノードを実行します。 |
4 |
datanode DFSデータノードを実行します。 |
5 |
dfsadmin DFS管理クライアントを実行します。 |
6 |
mradmin Map-Reduce管理クライアントを実行します。 |
7 |
fsck DFSファイルシステムチェックユーティリティを実行します。 |
8 |
fs 汎用ファイルシステムユーザークライアントを実行します。 |
9 |
balancer クラスターバランシングユーティリティを実行します。 |
10 |
oiv オフラインfsimageビューアーをfsimageに適用します。 |
11 |
fetchdt NameNodeから委任トークンを取得します。 |
12 |
jobtracker MapReduceジョブトラッカーノードを実行します。 |
13 |
pipes パイプジョブを実行します。 |
14 |
tasktracker MapReduceタスクトラッカーノードを実行します。 |
15 |
historyserver ジョブ履歴サーバーをスタンドアロンデーモンとして実行します。 |
16 |
job MapReduceジョブを操作します。 |
17 |
queue JobQueuesに関する情報を取得します。 |
18 |
version バージョンを出力します。 |
19 |
jar <jar> jarファイルを実行します。 |
20 |
distcp <srcurl> <desturl> ファイルまたはディレクトリを再帰的にコピーします。 |
21 |
distcp2 <srcurl> <desturl> DistCpバージョン2。 |
22 |
archive -archiveName NAME -p <parent path> <src> <dest>* hadoopアーカイブを作成します。 |
23 |
classpath Hadoop jarおよび必要なライブラリを取得するために必要なクラスパスを出力します。 |
24 |
daemonlog 各デーモンのログレベルを取得/設定します |
MapReduceジョブと対話する方法
使用法-hadoopジョブ[GENERIC_OPTIONS]
以下は、Hadoopジョブで使用可能な汎用オプションです。
Sr.No. | GENERIC_OPTION & Description |
---|---|
1 |
-submit <job-file> ジョブを送信します。 |
2 |
-status <job-id> マップを印刷し、完了率とすべてのジョブカウンターを減らします。 |
3 |
-counter <job-id> <group-name> <countername> カウンター値を出力します。 |
4 |
-kill <job-id> ジョブを強制終了します。 |
5 |
-events <job-id> <fromevent-> <-of-events> 指定された範囲でジョブトラッカーが受信したイベントの詳細を印刷します。 |
6 |
-history [all] <jobOutputDir> - history < jobOutputDir> ジョブの詳細、失敗したチップ、終了したチップの詳細を出力します。 [all]オプションを指定すると、成功したタスクや各タスクのタスク試行など、ジョブに関する詳細を表示できます。 |
7 |
-list[all] すべてのジョブを表示します。 -listは、まだ完了していないジョブのみを表示します。 |
8 |
-kill-task <task-id> タスクを強制終了します。 終了したタスクは、失敗した試行に対してカウントされません。 |
9 |
-fail-task <task-id> タスクを失敗させます。 失敗したタスクは、失敗した試行に対してカウントされます。 |
10 |
-set-priority <job-id> <priority> ジョブの優先度を変更します。 許可される優先度の値は、VERY_HIGH、HIGH、NORMAL、LOW、VERY_LOWです。 |
ジョブのステータスを表示するには
ジョブoutput-dirの履歴を表示するには
仕事を殺すために
Hadoop-ストリーミング
Hadoopストリーミングは、Hadoopディストリビューションに付属しているユーティリティです。 このユーティリティを使用すると、マッパーまたはレデューサーとして実行可能ファイルまたはスクリプトを使用して、Map/Reduceジョブを作成および実行できます。
Pythonを使用した例
Hadoopストリーミングでは、単語数の問題を考慮しています。 Hadoopのジョブには、マッパーとリデューサーの2つのフェーズが必要です。 Hadoopで実行するマッパーとレデューサーのコードをPythonスクリプトで記述しました。 PerlとRubyでも同じことを書くことができます。
マッパーフェーズコード
このファイルに実行許可があることを確認してください(chmod + x/home/expert/hadoop-1.2.1/mapper.py)。
減速機フェーズコード
Hadoopホームディレクトリのmapper.pyおよびreducer.pyにマッパーコードとリデューサーコードを保存します。 これらのファイルに実行許可があることを確認してください(chmod + x mapper.pyおよびchmod + x reducer.py)。 pythonはインデントに敏感なので、同じコードを以下のリンクからダウンロードできます。
WordCountプログラムの実行
「\」は、読みやすくするために行の継続に使用されます。
例えば、
ストリーミングの仕組み
上記の例では、マッパーとリデューサーはどちらも標準入力から入力を読み取り、出力を標準出力に出力するpythonスクリプトです。 ユーティリティは、Map/Reduceジョブを作成し、ジョブを適切なクラスターに送信し、完了するまでジョブの進行状況を監視します。
マッパーにスクリプトが指定されている場合、マッパーが初期化されると、各マッパータスクがスクリプトを個別のプロセスとして起動します。 マッパータスクが実行されると、入力を行に変換し、その行をプロセスの標準入力(STDIN)に送ります。 その間、マッパーはプロセスの標準出力(STDOUT)から行指向の出力を収集し、各行をキー/値のペアに変換します。これはマッパーの出力として収集されます。 デフォルトでは、最初のタブ文字までの行の接頭辞がキーであり、行の残り(タブ文字を除く)が値になります。 行にタブ文字がない場合、行全体がキーと見なされ、値はヌルになります。 ただし、これは必要に応じてカスタマイズできます。
レデューサーにスクリプトが指定されると、各レデューサータスクはスクリプトを個別のプロセスとして起動し、レデューサーが初期化されます。 レデューサータスクが実行されると、入力キー/値のペアを行に変換し、その行をプロセスの標準入力(STDIN)に送ります。 それまでの間、リデューサーはプロセスの標準出力(STDOUT)から行指向の出力を収集し、各行をキー/値のペアに変換します。これはリデューサーの出力として収集されます。 デフォルトでは、最初のタブ文字までの行の接頭辞がキーであり、行の残りの部分(タブ文字を除く)が値です。 ただし、これは特定の要件に従ってカスタマイズできます。
重要なコマンド
Parameters | Options | Description |
---|---|---|
-input directory/file-name | Required | Input location for mapper. |
-output directory-name | Required | Output location for reducer. |
-mapper executable or script or JavaClassName | Required | Mapper executable. |
-reducer executable or script or JavaClassName | Required | Reducer executable. |
-file file-name | Optional | Makes the mapper, reducer, or combiner executable available locally on the compute nodes. |
-inputformat JavaClassName | Optional | Class you supply should return key/value pairs of Text class. If not specified, TextInputFormat is used as the default. |
-outputformat JavaClassName | Optional | Class you supply should take key/value pairs of Text class. If not specified, TextOutputformat is used as the default. |
-partitioner JavaClassName | Optional | Class that determines which reduce a key is sent to. |
-combiner streamingCommand or JavaClassName | Optional | Combiner executable for map output. |
-cmdenv name=value | Optional | Passes the environment variable to streaming commands. |
-inputreader | Optional | For backwards-compatibility: specifies a record reader class (instead of an input format class). |
-verbose | Optional | Verbose output. |
-lazyOutput | Optional | Creates output lazily. For example, if the output format is based on FileOutputFormat, the output file is created only on the first call to output.collect (or Context.write). |
-numReduceTasks | Optional | Specifies the number of reducers. |
-mapdebug | Optional | Script to call when map task fails. |
-reducedebug | Optional | Script to call when reduce task fails. |
Hadoop-マルチノードクラスター
この章では、分散環境でのHadoop Multi-Nodeクラスターのセットアップについて説明します。
クラスター全体を実証できないため、3つのシステム(1つのマスターと2つのスレーブ)を使用してHadoopクラスター環境を説明しています。以下に示すのはIPアドレスです。
- Hadoopマスター:192.168.1.15(hadoop-master)
- Hadoopスレーブ:192.168.1.16(hadoop-slave-1)
- Hadoopスレーブ:192.168.1.17(hadoop-slave-2)
以下の手順に従って、Hadoop Multi-Nodeクラスターをセットアップします。
Javaのインストール
JavaはHadoopの主要な前提条件です。 まず、「java -version」を使用して、システムにjavaが存在することを確認する必要があります。 java versionコマンドの構文は次のとおりです。
すべてが正常に機能する場合、次の出力が得られます。
システムにjavaがインストールされていない場合は、指定された手順に従ってjavaをインストールします。
ステップ1
次のリンクhttps://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260l[www.oracle.com]にアクセスして、java(JDK <最新バージョン>-X64.tar.gz)をダウンロード
その後、 jdk-7u71-linux-x64.tar.gz がシステムにダウンロードされます。
ステップ2
通常、ダウンロードしたjavaファイルは、ダウンロードフォルダーにあります。 それを確認し、次のコマンドを使用して jdk-7u71-linux-x64.gz ファイルを抽出します。
ステップ3
すべてのユーザーがJavaを使用できるようにするには、「/usr/local/」の場所に移動する必要があります。 ルートを開き、次のコマンドを入力します。
ステップ4
次に、上記で説明したように、ターミナルから java -version コマンドを確認します。 上記のプロセスに従って、すべてのクラスターノードにjavaをインストールします。
ユーザーアカウントの作成
Hadoopインストールを使用するには、マスターシステムとスレーブシステムの両方でシステムユーザーアカウントを作成します。
ノードのマッピング
すべてのノードの /etc/ フォルダーにある hosts ファイルを編集し、各システムのIPアドレスとホスト名を指定する必要があります。
キーベースのログインの構成
パスワードを要求せずに相互に通信できるように、すべてのノードでsshをセットアップします。
Hadoopのインストール
マスターサーバーで、次のコマンドを使用してHadoopをダウンロードしてインストールします。
Hadoopの構成
以下のように以下の変更を行って、Hadoopサーバーを構成する必要があります。
core-site.xml
hdfs-site.xml
mapred-site.xml
hadoop-env.sh
注-システム構成に従ってJAVA_HOMEを設定します。
スレーブサーバーへのHadoopのインストール
指定されたコマンドに従って、すべてのスレーブサーバーにHadoopをインストールします。
マスターサーバーでのHadoopの構成
マスターサーバーを開き、指定されたコマンドに従って構成します。
マスターノードの構成
スレーブノードの構成
Hadoopマスターのフォーマット名ノード
Hadoopサービスの開始
次のコマンドは、HadoopマスターですべてのHadoopサービスを開始します。
Hadoopクラスターに新しいDataNodeを追加する
以下に、Hadoopクラスターに新しいノードを追加するために従うべき手順を示します。
ネットワーキング
適切なネットワーク構成を使用して、既存のHadoopクラスターに新しいノードを追加します。 次のネットワーク構成を想定します。
新しいノード構成の場合-
ユーザーとSSHアクセスの追加
ユーザーを追加する
次のコマンドを使用して、新しいノードで「hadoop」ユーザーを追加し、Hadoopユーザーのパスワードを「hadoop123」または必要なものに設定します。
マスターから新しいスレーブへのセットアップパスワードレス接続。
マスターで次を実行します
スレーブで次を実行します
hadoopにログインします。 そうでない場合は、hadoopユーザーにログインします。
公開キーの内容をファイル "$ HOME/.ssh/authorized_keys" にコピーしてから、次のコマンドを実行して、同じアクセス許可を変更します。
マスターマシンからsshログインを確認します。 ここで、マスターからのパスワードなしで新しいノードにsshできるかどうかを確認します。
新しいノードのホスト名を設定
ファイル /etc/sysconfig/network でホスト名を設定できます
変更を有効にするには、マシンを再起動するか、それぞれのホスト名で新しいマシンに対してhostnameコマンドを実行します(再起動は適切なオプションです)。
slave3ノードマシン上-
ホスト名slave3.in
次の行を使用して、クラスターのすべてのマシンで /etc/hosts を更新します-
ここで、ホスト名を使用してマシンをpingして、IPに解決されているかどうかを確認してください。
新しいノードマシンで-
新しいノードでDataNodeを開始します
新しいノードにログイン
次のコマンドを使用して、新しく追加されたスレーブノードでHDFSを起動します
新しいノードでjpsコマンドの出力を確認します。 次のようになります。
HadoopクラスターからのDataNodeの削除
データを失うことなく、実行中にクラスターからノードをその場で削除できます。 HDFSは、ノードの削除が安全に実行されることを保証する廃止機能を提供します。 それを使用するには、以下の手順に従ってください-
ステップ1-マスターへのログイン
Hadoopがインストールされているマスターマシンユーザーにログインします。
ステップ2-クラスター構成の変更
除外ファイルは、クラスターを開始する前に構成する必要があります。 dfs.hosts.excludeという名前のキーを $ HADOOP_HOME/etc/hadoop/hdfs-site.xml ファイルに追加します。 このキーに関連付けられた値は、HDFSへの接続が許可されていないマシンのリストを含むNameNodeのローカルファイルシステム上のファイルへのフルパスを提供します。
たとえば、これらの行を etc/hadoop/hdfs-site.xml ファイルに追加します。
ステップ3-廃止するホストを決定する
廃止する各マシンは、hdfs_exclude.txtで識別されるファイルに追加する必要があります(1行に1つのドメイン名)。 これにより、NameNodeに接続できなくなります。 DataNode2を削除する場合、 "/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt" ファイルの内容を以下に示します。
ステップ4-構成の再読み込みを強制する
これにより、新しく更新された「除外」ファイルを含め、NameNodeがその構成を強制的に再読み込みされます。 一定期間にわたってノードを使用停止し、各ノードのブロックがアクティブのままになるようにスケジュールされているマシンに複製される時間を確保します。
ステップ5-ノードのシャットダウン
廃止プロセスが完了したら、廃止されたハードウェアをメンテナンスのために安全にシャットダウンできます。 レポートコマンドをdfsadminに実行して、使用停止のステータスを確認します。 次のコマンドは、廃止ノードとクラスターに接続されたノードのステータスを記述します。
ステップ6-除外ファイルを再度編集する
マシンが廃止されたら、「除外」ファイルから削除できます。 "$ HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes" を再度実行すると、除外ファイルが読み取られてNameNodeに戻されます。メンテナンスが完了した後、またはクラスター内で追加の容量が再び必要になった後などに、DataNodeがクラスターに再参加できるようにします。
特記事項-上記のプロセスに従っても、タスクトラッカープロセスがノードで実行されている場合は、シャットダウンする必要があります。 1つの方法は、上記の手順で行ったようにマシンを切断することです。 マスターはプロセスを自動的に認識し、デッドとして宣言します。 タスクトラッカーを削除するために同じプロセスを実行する必要はありません。これは、DataNodeと比較してそれほど重要ではないためです。 DataNodeには、データを失うことなく安全に削除するデータが含まれています。
tasktrackerは、いつでも次のコマンドでオンザフライで実行/シャットダウンできます。