Hadoop-quick-guide

提供:Dev Guides
移動先:案内検索

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と呼ばれるアルゴリズムを使用してこの問題を解決しました。 このアルゴリズムは、タスクを小さな部分に分割し、それらを多くのコンピューターに割り当て、それらから結果を収集して、統合時に結果データセットを形成します。

Google MapReduce

Hadoop

Googleが提供するソリューションを使用して、 Doug Cutting と彼のチームは HADOOP と呼ばれるオープンソースプロジェクトを開発しました。

Hadoopは、MapReduceアルゴリズムを使用してアプリケーションを実行します。このアルゴリズムでは、データは他のアルゴリズムと並行して処理されます。 つまり、Hadoopは、膨大な量のデータに対して完全な統計分析を実行できるアプリケーションの開発に使用されます。

Hadoopフレームワーク

Hadoop-はじめに

Hadoopは、Javaで記述されたApacheオープンソースフレームワークであり、単純なプログラミングモデルを使用して、コンピューターのクラスター間で大規模なデータセットを分散処理できます。 Hadoopフレームワークアプリケーションは、コンピューターのクラスター全体に分散した_storage_と_computation_を提供する環境で動作します。 Hadoopは、単一サーバーから数千台のマシンにスケールアップするように設計されており、それぞれがローカルの計算とストレージを提供します。

Hadoopアーキテクチャ

そのコアには、Hadoopには2つの主要な層があります-

  • 処理/計算レイヤー(MapReduce)、および
  • ストレージ層(Hadoop分散ファイルシステム)。

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ターミナルを開き、次のコマンドを入力してユーザーを作成します。

$ su
   password:
# useradd hadoop
# passwd hadoop
   New passwd:
   Retype new passwd

SSHセットアップとキー生成

起動、停止、分散デーモンシェル操作など、クラスターでさまざまな操作を行うには、SSHセットアップが必要です。 Hadoopのさまざまなユーザーを認証するには、Hadoopユーザーに公開/秘密キーペアを提供し、それをさまざまなユーザーと共有する必要があります。

SSHを使用してキーと値のペアを生成するには、次のコマンドを使用します。 id_rsa.pubから公開鍵をauthorized_keysにコピーし、所有者にそれぞれauthorized_keysファイルへの読み取りおよび書き込み権限を付与します。

$ ssh-keygen -t rsa
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 0600 ~/.ssh/authorized_keys

Javaのインストール

JavaはHadoopの主要な前提条件です。 まず、コマンド「java -version」を使用して、システムにjavaが存在することを確認する必要があります。 java versionコマンドの構文は次のとおりです。

$ java -version

すべてが正常な場合、次の出力が表示されます。

java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)

システムに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 ファイルを抽出します。

$ cd Downloads/
$ ls
jdk-7u71-linux-x64.gz

$ tar zxf jdk-7u71-linux-x64.gz
$ ls
jdk1.7.0_71   jdk-7u71-linux-x64.gz

ステップ3

すべてのユーザーがJavaを使用できるようにするには、「/usr/local/」の場所に移動する必要があります。 ルートを開き、次のコマンドを入力します。

$ su
password:
# mv jdk1.7.0_71/usr/local/
# exit

ステップ4

*PATH* および *JAVA_HOME* 変数を設定するには、*〜/.bashrc *ファイルに次のコマンドを追加します。
export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=$PATH:$JAVA_HOME/bin

すべての変更を現在実行中のシステムに適用します。

$ source ~/.bashrc

ステップ5

次のコマンドを使用して、Javaの代替を構成します-

# alternatives --install/usr/bin/java java usr/local/java/bin/java 2
# alternatives --install/usr/bin/javac javac usr/local/java/bin/javac 2
# alternatives --install/usr/bin/jar jar usr/local/java/bin/jar 2

# alternatives --set java usr/local/java/bin/java
# alternatives --set javac usr/local/java/bin/javac
# alternatives --set jar usr/local/java/bin/jar

次に、上記で説明したように、端末からjava -versionコマンドを確認します。

Hadoopをダウンロードする

次のコマンドを使用して、Apacheソフトウェア基盤からHadoop 2.4.1をダウンロードして抽出します。

$ su
password:
# cd/usr/local
# wget http://apache.claz.org/hadoop/common/hadoop-2.4.1/
hadoop-2.4.1.tar.gz
# tar xzf hadoop-2.4.1.tar.gz
# mv hadoop-2.4.1/* to hadoop/
# exit

Hadoop操作モード

Hadoopをダウンロードしたら、サポートされている3つのモードのいずれかでHadoopクラスターを操作できます-

  • ローカル/スタンドアロンモード-システムにHadoopをダウンロードした後、デフォルトでは、スタンドアロンモードで構成され、単一のJavaプロセスとして実行できます。
  • 擬似分散モード-単一のマシンでの分散シミュレーションです。 hdfs、yarn、MapReduceなどの各Hadoopデーモンは、個別のjavaプロセスとして実行されます。 このモードは開発に役立ちます。
  • 完全分散モード-このモードは、クラスターとして少なくとも2台以上のマシンで完全に分散されます。 このモードについては、今後の章で詳しく説明します。

スタンドアロンモードでのHadoopのインストール

ここでは、スタンドアロンモードでの Hadoop 2.4.1 のインストールについて説明します。

実行中のデーモンはなく、すべてが単一のJVMで実行されます。 スタンドアロンモードは、開発中にMapReduceプログラムを実行するのに適しています。MapReduceプログラムはテストとデバッグが簡単であるためです。

Hadoopのセットアップ

次のコマンドを*〜/.bashrc *ファイルに追加することにより、Hadoop環境変数を設定できます。

export HADOOP_HOME=/usr/local/hadoop

さらに先に進む前に、Hadoopが正常に機能していることを確認する必要があります。 次のコマンドを発行するだけです-

$ hadoop version

すべてがあなたのセットアップでうまくいけば、次の結果が表示されるはずです-

Hadoop 2.4.1
Subversion https://svn.apache.org/repos/asf/hadoop/common -r 1529768
Compiled by hortonmu on 2013-10-07T06:28Z
Compiled with protoc 2.5.0
From source with checksum 79e53ce7994d1628b240f09af91e1af4

これは、Hadoopのスタンドアロンモードのセットアップが正常に機能していることを意味します。 デフォルトでは、Hadoopは単一のマシン上で非分散モードで実行されるように構成されています。

Hadoopの簡単な例を確認しましょう。 Hadoopのインストールでは、MapReduceの基本機能を提供する次のサンプルMapReduce jarファイルが提供されます。これは、Pi値、特定のファイルリスト内の単語数などの計算に使用できます。

$HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar

入力ディレクトリを作成して、いくつかのファイルをプッシュします。要件は、それらのファイル内の単語の総数を数えることです。 単語の総数を計算するために、.jarファイルに単語カウントの実装が含まれていれば、MapReduceを記述する必要はありません。 同じ.jarファイルを使用して他の例を試すことができます。次のコマンドを発行して、サポートされているMapReduce機能プログラムをhadoop-mapreduce-examples-2.2.0.jarファイルで確認します。

$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduceexamples-2.2.0.jar

ステップ1

入力ディレクトリに一時的なコンテンツファイルを作成します。 この入力ディレクトリは、作業したいところならどこでも作成できます。

$ mkdir input
$ cp $HADOOP_HOME/*.txt input
$ ls -l input

入力ディレクトリに次のファイルが表示されます-

total 24
-rw-r--r-- 1 root root 15164 Feb 21 10:14 LICENSE.txt
-rw-r--r-- 1 root root   101 Feb 21 10:14 NOTICE.txt
-rw-r--r-- 1 root root  1366 Feb 21 10:14 README.txt

これらのファイルは、Hadoopインストールホームディレクトリからコピーされています。 実験のために、異なる大規模なファイルセットを作成できます。

ステップ2

次のように、入力ディレクトリで使用可能なすべてのファイル内の単語の総数をカウントするためにHadoopプロセスを開始しましょう-

$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduceexamples-2.2.0.jar  wordcount input output

ステップ3

ステップ2は必要な処理を行い、output/part-r00000ファイルに出力を保存します。

$cat output/*

入力ディレクトリで使用可能なすべてのファイルで使用可能な合計数とともにすべての単語がリストされます。

"AS      4
"Contribution" 1
"Contributor" 1
"Derivative 1
"Legal 1
"License"      1
"License");     1
"Licensor"      1
"NOTICE”        1
"Not      1
"Object"        1
"Source”        1
"Work”    1
"You"     1
"Your")   1
"[]"      1
"control"       1
"printed        1
"submitted"     1
(50%)     1
(BIS),    1
(C)       1
(Don't)   1
(ECCN)    1
(INCLUDING      2
(INCLUDING,     2
.............

擬似分散モードでのHadoopのインストール

以下の手順に従って、Hadoop 2.4.1を擬似分散モードでインストールします。

ステップ1-Hadoopのセットアップ

次のコマンドを*〜/.bashrc *ファイルに追加することにより、Hadoop環境変数を設定できます。

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME

export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_INSTALL=$HADOOP_HOME

すべての変更を現在実行中のシステムに適用します。

$ source ~/.bashrc

ステップ2-Hadoopの構成

すべてのHadoop設定ファイルは、「$ HADOOP_HOME/etc/hadoop」の場所にあります。 Hadoopインフラストラクチャに応じて、これらの構成ファイルを変更する必要があります。

$ cd $HADOOP_HOME/etc/hadoop

JavaでHadoopプログラムを開発するには、 JAVA_HOME の値をシステム内のjavaの場所に置き換えて、 hadoop-env.sh ファイルのjava環境変数をリセットする必要があります。

export JAVA_HOME=/usr/local/jdk1.7.0_71

以下は、Hadoopを構成するために編集する必要があるファイルのリストです。

*core-site.xml*
*core-site.xml* ファイルには、Hadoopインスタンスに使用されるポート番号、ファイルシステムに割り当てられたメモリ、データを保存するためのメモリ制限、読み取り/書き込みバッファのサイズなどの情報が含まれています。

core-site.xmlを開き、<configuration>タグと</configuration>タグの間に次のプロパティを追加します。

<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://localhost:9000</value>
   </property>
</configuration>
*hdfs-site.xml*
*hdfs-site.xml* ファイルには、ローカルファイルシステムのレプリケーションデータ、ネームノードパス、データノードパスの値などの情報が含まれています。 これは、Hadoopインフラストラクチャを保存する場所を意味します。

次のデータを想定します。

dfs.replication (data replication value) = 1

(In the below given path/hadoop/is the user name.
hadoopinfra/hdfs/namenode is the directory created by hdfs file system.)
namenode path =//home/hadoop/hadoopinfra/hdfs/namenode

(hadoopinfra/hdfs/datanode is the directory created by hdfs file system.)
datanode path =//home/hadoop/hadoopinfra/hdfs/datanode

このファイルを開き、このファイルの<configuration>&lt/configuration>タグの間に次のプロパティを追加します。

<configuration>
   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>

   <property>
      <name>dfs.name.dir</name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/namenode </value>
   </property>

   <property>
      <name>dfs.data.dir&lt/name>
      <value>file:///home/hadoop/hadoopinfra/hdfs/datanode </value>
   </property>
</configuration>

-上記のファイルでは、すべてのプロパティ値はユーザー定義であり、Hadoopインフラストラクチャに応じて変更できます。

*yarn-site.xml*

このファイルは、Hadoopに糸を設定するために使用されます。 yarn-site.xmlファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle&lt/value>
   </property>
</configuration>
*mapred-site.xml*

このファイルは、使用しているMapReduceフレームワークを指定するために使用されます。 デフォルトでは、Hadoopにはyarn-site.xmlのテンプレートが含まれています。 まず、次のコマンドを使用して、 mapred-site.xml.template から mapred-site.xml ファイルにファイルをコピーする必要があります。

$ cp mapred-site.xml.template mapred-site.xml
*mapred-site.xml* ファイルを開き、このファイルの<configuration>タグと</configuration>タグの間に次のプロパティを追加します。
<configuration>
   <property>
      <name>mapreduce.framework.name</name>
      <value>yarn</value>
   </property>
</configuration>

Hadoopインストールの検証

次の手順を使用して、Hadoopのインストールを確認します。

ステップ1-ノードのセットアップに名前を付ける

次のようにコマンド「hdfs namenode -format」を使用して、namenodeをセットアップします。

$ cd ~
$ hdfs namenode -format

期待される結果は次のとおりです。

10/24/14 21:30:55 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG:   host = localhost/192.168.1.11
STARTUP_MSG:   args = [-format]
STARTUP_MSG:   version = 2.4.1
...
...
10/24/14 21:30:56 INFO common.Storage: Storage directory
/home/hadoop/hadoopinfra/hdfs/namenode has been successfully formatted.
10/24/14 21:30:56 INFO namenode.NNStorageRetentionManager: Going to
retain 1 images with txid >= 0
10/24/14 21:30:56 INFO util.ExitUtil: Exiting with status 0
10/24/14 21:30:56 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at localhost/192.168.1.11
************************************************************/

ステップ2-Hadoop dfの検証

次のコマンドは、dfsを開始するために使用されます。 このコマンドを実行すると、Hadoopファイルシステムが起動します。

$ start-dfs.sh

予想される出力は次のとおりです-

10/24/14 21:37:56
Starting namenodes on [localhost]
localhost: starting namenode, logging to/home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-namenode-localhost.out
localhost: starting datanode, logging to/home/hadoop/hadoop
2.4.1/logs/hadoop-hadoop-datanode-localhost.out
Starting secondary namenodes [0.0.0.0]

ステップ3-糸スクリプトの検証

次のコマンドを使用して、糸スクリプトを開始します。 このコマンドを実行すると、糸デーモンが起動します。

$ start-yarn.sh

次のような予想される出力-

starting yarn daemons
starting resourcemanager, logging to/home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-resourcemanager-localhost.out
localhost: starting nodemanager, logging to/home/hadoop/hadoop
2.4.1/logs/yarn-hadoop-nodemanager-localhost.out

ステップ4-ブラウザーでHadoopにアクセスする

Hadoopにアクセスするためのデフォルトのポート番号は50070です。 次のURLを使用して、ブラウザーでHadoopサービスを取得します。

http://localhost:50070/

ブラウザでのHadoopへのアクセス

ステップ5-クラスタのすべてのアプリケーションを確認する

クラスターのすべてのアプリケーションにアクセスするためのデフォルトのポート番号は8088です。 このサービスにアクセスするには、次のURLを使用してください。

http://localhost:8088/

Hadoop Application Cluster

Hadoop-HDFSの概要

Hadoop File Systemは、分散ファイルシステム設計を使用して開発されました。 市販のハードウェアで実行されます。 他の分散システムとは異なり、HDFSは耐障害性が高く、低コストのハードウェアを使用して設計されています。

HDFSは非常に大量のデータを保持し、アクセスを容易にします。 このような巨大なデータを保存するために、ファイルは複数のマシンに保存されます。 これらのファイルは、障害が発生した場合にデータが失われる可能性からシステムを保護するために、冗長形式で保存されます。 HDFSは、アプリケーションを並列処理で利用できるようにします。

HDFSの機能

  • 分散ストレージおよび処理に適しています。
  • Hadoopは、HDFSと対話するためのコマンドインターフェイスを提供します。
  • namenodeおよびdatanodeの組み込みサーバーは、ユーザーがクラスターのステータスを簡単に確認するのに役立ちます。
  • ファイルシステムデータへのストリーミングアクセス。
  • HDFSは、ファイルのアクセス許可と認証を提供します。

HDFSアーキテクチャ

以下に、Hadoopファイルシステムのアーキテクチャを示します。

HDFSアーキテクチャ

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サーバー)を開いて、次のコマンドを実行する必要があります。

$ hadoop namenode -format

HDFSをフォーマットした後、分散ファイルシステムを起動します。 次のコマンドは、ネームノードとデータノードをクラスターとして起動します。

$ start-dfs.sh

HDFSのファイルのリスト

サーバーに情報を読み込んだ後、 ’ls’ を使用して、ディレクトリ内のファイルのリスト、ファイルのステータスを確認できます。 以下に、ディレクトリまたはファイル名に引数として渡すことができる ls の構文を示します。

$ $HADOOP_HOME/bin/hadoop fs -ls <args>

HDFSへのデータの挿入

ローカルシステムのfile.txtというファイルにデータがあり、hdfsファイルシステムに保存する必要があるとします。 以下の手順に従って、Hadoopファイルシステムに必要なファイルを挿入します。

ステップ1

入力ディレクトリを作成する必要があります。

$ $HADOOP_HOME/bin/hadoop fs -mkdir/user/input

ステップ2

putコマンドを使用して、ローカルシステムからHadoopファイルシステムにデータファイルを転送および保存します。

$ $HADOOP_HOME/bin/hadoop fs -put/home/file.txt/user/input

ステップ3

lsコマンドを使用してファイルを確認できます。

$ $HADOOP_HOME/bin/hadoop fs -ls/user/input

HDFSからのデータの取得

*outfile* というファイルがHDFSにあるとします。 以下は、必要なファイルをHadoopファイルシステムから取得するための簡単なデモです。

ステップ1

最初に、 cat コマンドを使用してHDFSからデータを表示します。

$ $HADOOP_HOME/bin/hadoop fs -cat/user/output/outfile

ステップ2

*get* コマンドを使用して、HDFSからローカルファイルシステムにファイルを取得します。
$ $HADOOP_HOME/bin/hadoop fs -get/user/output//home/hadoop_tp/

HDFSのシャットダウン

次のコマンドを使用して、HDFSをシャットダウンできます。

$ stop-dfs.sh

Hadoop-コマンドリファレンス

*"$ HADOOP_HOME/bin/hadoop fs"* には、ここに示されているよりも多くのコマンドがありますが、これらの基本的な操作で開始できます。 追加の引数なしで./bin/hadoop dfsを実行すると、FsShellシステムで実行できるすべてのコマンドがリストされます。 さらに、 *$ HADOOP_HOME/bin/hadoop fs -help* commandNameは、スタックしている場合、問題の操作の短い使用状況の要約を表示します。

すべての操作の表を以下に示します。 次の規則がパラメータに使用されます-

"<path>" means any file or directory name.
"<path>..." means one or more file or directory names.
"<file>" means any filename.
"<src>" and "<dest>" are path names in a directed operation.
"<localSrc>" and "<localDest>" are paths as above, but on the local file system.

他のすべてのファイルとパス名は、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サーバーに送り返します。

MapReduceアルゴリズム

入力と出力(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 *として保存され、入力として提供されます。 入力ファイルは次のようになります。

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フレームワークを使用したサンプルデータへのプログラムを示します。

package hadoop;

import java.util.*;

import java.io.IOException;
import java.io.IOException;

import org.apache.hadoop.fs.Path;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.io.*;
import org.apache.hadoop.mapred.*;
import org.apache.hadoop.util.*;

public class ProcessUnits {
  //Mapper class
   public static class E_EMapper extends MapReduceBase implements
   Mapper<LongWritable ,/*Input key Type */
   Text,               /*Input value Type*/
   Text,               /*Output key Type*/
   IntWritable>       /*Output value Type*/
   {
     //Map function
      public void map(LongWritable key, Text value,
      OutputCollector<Text, IntWritable> output,

      Reporter reporter) throws IOException {
         String line = value.toString();
         String lasttoken = null;
         StringTokenizer s = new StringTokenizer(line,"\t");
         String year = s.nextToken();

         while(s.hasMoreTokens()) {
            lasttoken = s.nextToken();
         }
         int avgprice = Integer.parseInt(lasttoken);
         output.collect(new Text(year), new IntWritable(avgprice));
      }
   }

  //Reducer class
   public static class E_EReduce extends MapReduceBase implements Reducer< Text, IntWritable, Text, IntWritable > {

     //Reduce function
      public void reduce( Text key, Iterator <IntWritable> values,
      OutputCollector<Text, IntWritable> output, Reporter reporter) throws IOException {
         int maxavg = 30;
         int val = Integer.MIN_VALUE;

         while (values.hasNext()) {
            if((val = values.next().get())>maxavg) {
               output.collect(key, new IntWritable(val));
            }
         }
      }
   }

  //Main function
   public static void main(String args[])throws Exception {
      JobConf conf = new JobConf(ProcessUnits.class);

      conf.setJobName("max_eletricityunits");
      conf.setOutputKeyClass(Text.class);
      conf.setOutputValueClass(IntWritable.class);
      conf.setMapperClass(E_EMapper.class);
      conf.setCombinerClass(E_EReduce.class);
      conf.setReducerClass(E_EReduce.class);
      conf.setInputFormat(TextInputFormat.class);
      conf.setOutputFormat(TextOutputFormat.class);

      FileInputFormat.setInputPaths(conf, new Path(args[0]));
      FileOutputFormat.setOutputPath(conf, new Path(args[1]));

      JobClient.runJob(conf);
   }
}

上記のプログラムを* ProcessUnits.java。*として保存します。プログラムのコンパイルと実行について以下に説明します。

プロセスユニットプログラムのコンパイルと実行

Hadoopユーザーのホームディレクトリにいると仮定しましょう(例:/home/hadoop)。

上記のプログラムをコンパイルして実行するには、以下の手順に従ってください。

ステップ1

次のコマンドは、コンパイル済みのJavaクラスを格納するディレクトリを作成します。

$ mkdir units

ステップ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を作成するために使用されます。

$ javac -classpath hadoop-core-1.2.1.jar -d units ProcessUnits.java
$ jar -cvf units.jar -C units/.

ステップ4

次のコマンドを使用して、HDFSに入力ディレクトリを作成します。

$HADOOP_HOME/bin/hadoop fs -mkdir input_dir

ステップ5

次のコマンドを使用して、* sample.txt *という名前の入力ファイルをHDFSの入力ディレクトリにコピーします。

$HADOOP_HOME/bin/hadoop fs -put/home/hadoop/sample.txt input_dir

ステップ6

次のコマンドを使用して、入力ディレクトリ内のファイルを確認します。

$HADOOP_HOME/bin/hadoop fs -ls input_dir/

ステップ7

次のコマンドは、入力ディレクトリから入力ファイルを取得してEleunit_maxアプリケーションを実行するために使用されます。

$HADOOP_HOME/bin/hadoop jar units.jar hadoop.ProcessUnits input_dir output_dir

ファイルが実行されるまでしばらく待ちます。 実行後、以下に示すように、出力には入力分割の数、マップタスクの数、レデューサータスクの数などが含まれます。

INFO mapreduce.Job: Job job_1414748220717_0002
completed successfully
14/10/31 06:02:52
INFO mapreduce.Job: Counters: 49
   File System Counters

FILE: Number of bytes read = 61
FILE: Number of bytes written = 279400
FILE: Number of read operations = 0
FILE: Number of large read operations = 0
FILE: Number of write operations = 0
HDFS: Number of bytes read = 546
HDFS: Number of bytes written = 40
HDFS: Number of read operations = 9
HDFS: Number of large read operations = 0
HDFS: Number of write operations = 2 Job Counters


   Launched map tasks = 2
   Launched reduce tasks = 1
   Data-local map tasks = 2
   Total time spent by all maps in occupied slots (ms) = 146137
   Total time spent by all reduces in occupied slots (ms) = 441
   Total time spent by all map tasks (ms) = 14613
   Total time spent by all reduce tasks (ms) = 44120
   Total vcore-seconds taken by all map tasks = 146137
   Total vcore-seconds taken by all reduce tasks = 44120
   Total megabyte-seconds taken by all map tasks = 149644288
   Total megabyte-seconds taken by all reduce tasks = 45178880

Map-Reduce Framework

   Map input records = 5
   Map output records = 5
   Map output bytes = 45
   Map output materialized bytes = 67
   Input split bytes = 208
   Combine input records = 5
   Combine output records = 5
   Reduce input groups = 5
   Reduce shuffle bytes = 6
   Reduce input records = 5
   Reduce output records = 5
   Spilled Records = 10
   Shuffled Maps  = 2
   Failed Shuffles = 0
   Merged Map outputs = 2
   GC time elapsed (ms) = 948
   CPU time spent (ms) = 5160
   Physical memory (bytes) snapshot = 47749120
   Virtual memory (bytes) snapshot = 2899349504
   Total committed heap usage (bytes) = 277684224

File Output Format Counters

   Bytes Written = 40

ステップ8

次のコマンドを使用して、出力フォルダー内の結果ファイルを確認します。

$HADOOP_HOME/bin/hadoop fs -ls output_dir/

ステップ9

*Part-00000* ファイルの出力を表示するには、次のコマンドを使用します。 このファイルはHDFSによって生成されます。
$HADOOP_HOME/bin/hadoop fs -cat output_dir/part-00000

以下は、MapReduceプログラムによって生成された出力です。

1981    34
1984    40
1985    45

ステップ10

次のコマンドは、分析のためにHDFSからローカルファイルシステムに出力フォルダーをコピーするために使用されます。

$HADOOP_HOME/bin/hadoop fs -cat output_dir/part-00000/bin/hadoop dfs get output_dir/home/hadoop

重要なコマンド

すべての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です。

ジョブのステータスを表示するには

$ $HADOOP_HOME/bin/hadoop job -status <JOB-ID>
e.g.
$ $HADOOP_HOME/bin/hadoop job -status job_201310191043_0004

ジョブoutput-dirの履歴を表示するには

$ $HADOOP_HOME/bin/hadoop job -history <DIR-NAME>
e.g.
$ $HADOOP_HOME/bin/hadoop job -history/user/expert/output

仕事を殺すために

$ $HADOOP_HOME/bin/hadoop job -kill <JOB-ID>
e.g.
$ $HADOOP_HOME/bin/hadoop job -kill job_201310191043_0004

Hadoop-ストリーミング

Hadoopストリーミングは、Hadoopディストリビューションに付属しているユーティリティです。 このユーティリティを使用すると、マッパーまたはレデューサーとして実行可能ファイルまたはスクリプトを使用して、Map/Reduceジョブを作成および実行できます。

Pythonを使用した例

Hadoopストリーミングでは、単語数の問題を考慮しています。 Hadoopのジョブには、マッパーとリデューサーの2つのフェーズが必要です。 Hadoopで実行するマッパーとレデューサーのコードをPythonスクリプトで記述しました。 PerlとRubyでも同じことを書くことができます。

マッパーフェーズコード

!/usr/bin/python

import sys

# Input takes from standard input for myline in sys.stdin:
   # Remove whitespace either side
   myline = myline.strip()

   # Break the line into words
   words = myline.split()

   # Iterate the words list
   for myword in words:
      # Write the results to standard output
      print '%s\t%s' % (myword, 1)

このファイルに実行許可があることを確認してください(chmod + x/home/expert/hadoop-1.2.1/mapper.py)。

減速機フェーズコード

#!/usr/bin/python

from operator import itemgetter
import sys

current_word = ""
current_count = 0
word = ""

# Input takes from standard input for myline in sys.stdin:
   # Remove whitespace either side
   myline = myline.strip()

   # Split the input we got from mapper.py word,
   count = myline.split('\t', 1)

   # Convert count variable to integer
   try:
      count = int(count)

   except ValueError:
      # Count was not a number, so silently ignore this line continue

   if current_word == word:
   current_count += count
   else:
      if current_word:
         # Write result to standard output print '%s\t%s' % (current_word, current_count)

      current_count = count
      current_word = word

# Do not forget to output the last word if needed!
if current_word == word:
   print '%s\t%s' % (current_word, current_count)

Hadoopホームディレクトリのmapper.pyおよびreducer.pyにマッパーコードとリデューサーコードを保存します。 これらのファイルに実行許可があることを確認してください(chmod + x mapper.pyおよびchmod + x reducer.py)。 pythonはインデントに敏感なので、同じコードを以下のリンクからダウンロードできます。

WordCountプログラムの実行

$ $HADOOP_HOME/bin/hadoop jar contrib/streaming/hadoop-streaming-1.
2.1.jar \
   -input input_dirs \
   -output output_dir \
   -mapper <path/mapper.py \
   -reducer <path/reducer.py

「\」は、読みやすくするために行の継続に使用されます。

例えば、

./bin/hadoop jar contrib/streaming/hadoop-streaming-1.2.1.jar -input myinput -output myoutput -mapper/home/expert/hadoop-1.2.1/mapper.py -reducer/home/expert/hadoop-1.2.1/reducer.py

ストリーミングの仕組み

上記の例では、マッパーとリデューサーはどちらも標準入力から入力を読み取り、出力を標準出力に出力する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 -version

すべてが正常に機能する場合、次の出力が得られます。

java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b13)
Java HotSpot(TM) Client VM (build 25.0-b02, mixed mode)

システムに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 ファイルを抽出します。

$ cd Downloads/
$ ls
jdk-7u71-Linux-x64.gz

$ tar zxf jdk-7u71-Linux-x64.gz
$ ls
jdk1.7.0_71 jdk-7u71-Linux-x64.gz

ステップ3

すべてのユーザーがJavaを使用できるようにするには、「/usr/local/」の場所に移動する必要があります。 ルートを開き、次のコマンドを入力します。

$ su
password:
# mv jdk1.7.0_71/usr/local/
# exit

ステップ4

*PATH* および *JAVA_HOME* 変数を設定するには、*〜/.bashrc *ファイルに次のコマンドを追加します。
export JAVA_HOME=/usr/local/jdk1.7.0_71
export PATH=PATH:$JAVA_HOME/bin

次に、上記で説明したように、ターミナルから java -version コマンドを確認します。 上記のプロセスに従って、すべてのクラスターノードにjavaをインストールします。

ユーザーアカウントの作成

Hadoopインストールを使用するには、マスターシステムとスレーブシステムの両方でシステムユーザーアカウントを作成します。

# useradd hadoop
# passwd hadoop

ノードのマッピング

すべてのノードの /etc/ フォルダーにある hosts ファイルを編集し、各システムのIPアドレスとホスト名を指定する必要があります。

# vi/etc/hosts
enter the following lines in the/etc/hosts file.

192.168.1.109 hadoop-master
192.168.1.145 hadoop-slave-1
192.168.56.1 hadoop-slave-2

キーベースのログインの構成

パスワードを要求せずに相互に通信できるように、すべてのノードでsshをセットアップします。

# su hadoop
$ ssh-keygen -t rsa
$ ssh-copy-id -i ~/.ssh/id_rsa.pub finddevguides@hadoop-master
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp1@hadoop-slave-1
$ ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop_tp2@hadoop-slave-2
$ chmod 0600 ~/.ssh/authorized_keys
$ exit

Hadoopのインストール

マスターサーバーで、次のコマンドを使用してHadoopをダウンロードしてインストールします。

# mkdir/opt/hadoop
# cd/opt/hadoop/
# wget http://apache.mesi.com.ar/hadoop/common/hadoop-1.2.1/hadoop-1.2.0.tar.gz
# tar -xzf hadoop-1.2.0.tar.gz
# mv hadoop-1.2.0 hadoop
# chown -R hadoop/opt/hadoop
# cd/opt/hadoop/hadoop/

Hadoopの構成

以下のように以下の変更を行って、Hadoopサーバーを構成する必要があります。

core-site.xml

*core-site.xml* ファイルを開き、次のように編集します。
<configuration>
   <property>
      <name>fs.default.name</name>
      <value>hdfs://hadoop-master:9000/</value>
   </property>
   <property>
      <name>dfs.permissions</name>
      <value>false</value>
   </property>
</configuration>

hdfs-site.xml

*hdfs-site.xml* ファイルを開き、以下に示すように編集します。
<configuration>
   <property>
      <name>dfs.data.dir</name>
      <value>/opt/hadoop/hadoop/dfs/name/data</value>
      <final>true</final>
   </property>

   <property>
      <name>dfs.name.dir</name>
      <value>/opt/hadoop/hadoop/dfs/name</value>
      <final>true</final>
   </property>

   <property>
      <name>dfs.replication</name>
      <value>1</value>
   </property>
</configuration>

mapred-site.xml

*mapred-site.xml* ファイルを開き、以下に示すように編集します。
<configuration>
   <property>
      <name>mapred.job.tracker</name>
      <value>hadoop-master:9001</value>
   </property>
</configuration>

hadoop-env.sh

*hadoop-env.sh* ファイルを開き、以下に示すようにJAVA_HOME、HADOOP_CONF_DIR、およびHADOOP_OPTSを編集します。

-システム構成に従ってJAVA_HOMEを設定します。

export JAVA_HOME=/opt/jdk1.7.0_17
export HADOOP_OPTS=-Djava.net.preferIPv4Stack=true
export HADOOP_CONF_DIR=/opt/hadoop/hadoop/conf

スレーブサーバーへのHadoopのインストール

指定されたコマンドに従って、すべてのスレーブサーバーにHadoopをインストールします。

# su hadoop
$ cd/opt/hadoop
$ scp -r hadoop hadoop-slave-1:/opt/hadoop
$ scp -r hadoop hadoop-slave-2:/opt/hadoop

マスターサーバーでのHadoopの構成

マスターサーバーを開き、指定されたコマンドに従って構成します。

# su hadoop
$ cd/opt/hadoop/hadoop

マスターノードの構成

$ vi etc/hadoop/masters

hadoop-master

スレーブノードの構成

$ vi etc/hadoop/slaves

hadoop-slave-1
hadoop-slave-2

Hadoopマスターのフォーマット名ノード

# su hadoop
$ cd/opt/hadoop/hadoop
$ bin/hadoop namenode –format
11/10/14 10:58:07 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = hadoop-master/192.168.1.109
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.2.0
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.2 -r 1479473;
compiled by 'hortonfo' on Mon May 6 06:59:37 UTC 2013
STARTUP_MSG: java = 1.7.0_71

************************************************************/
11/10/14 10:58:08 INFO util.GSet: Computing capacity for map BlocksMap
editlog=/opt/hadoop/hadoop/dfs/name/current/edits
………………………………………………….
………………………………………………….
………………………………………………….
11/10/14 10:58:08 INFO common.Storage: Storage directory
/opt/hadoop/hadoop/dfs/name has been successfully formatted.
11/10/14 10:58:08 INFO namenode.NameNode:
SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop-master/192.168.1.15
************************************************************/

Hadoopサービスの開始

次のコマンドは、HadoopマスターですべてのHadoopサービスを開始します。

$ cd $HADOOP_HOME/sbin
$ start-all.sh

Hadoopクラスターに新しいDataNodeを追加する

以下に、Hadoopクラスターに新しいノードを追加するために従うべき手順を示します。

ネットワーキング

適切なネットワーク構成を使用して、既存のHadoopクラスターに新しいノードを追加します。 次のネットワーク構成を想定します。

新しいノード構成の場合-

IP address : 192.168.1.103
netmask : 255.255.255.0
hostname : slave3.in

ユーザーとSSHアクセスの追加

ユーザーを追加する

次のコマンドを使用して、新しいノードで「hadoop」ユーザーを追加し、Hadoopユーザーのパスワードを「hadoop123」または必要なものに設定します。

useradd hadoop
passwd hadoop

マスターから新しいスレーブへのセットアップパスワードレス接続。

マスターで次を実行します

mkdir -p $HOME/.ssh
chmod 700 $HOME/.ssh
ssh-keygen -t rsa -P '' -f $HOME/.ssh/id_rsa
cat $HOME/.ssh/id_rsa.pub >> $HOME/.ssh/authorized_keys
chmod 644 $HOME/.ssh/authorized_keys
Copy the public key to new slave node in hadoop user $HOME directory
scp $HOME/.ssh/id_rsa.pub [email protected]:/home/hadoop/

スレーブで次を実行します

hadoopにログインします。 そうでない場合は、hadoopユーザーにログインします。

su hadoop ssh -X [email protected]

公開キーの内容をファイル "$ HOME/.ssh/authorized_keys" にコピーしてから、次のコマンドを実行して、同じアクセス許可を変更します。

cd $HOME
mkdir -p $HOME/.ssh
chmod 700 $HOME/.ssh
cat id_rsa.pub >>$HOME/.ssh/authorized_keys
chmod 644 $HOME/.ssh/authorized_keys

マスターマシンからsshログインを確認します。 ここで、マスターからのパスワードなしで新しいノードにsshできるかどうかを確認します。

ssh [email protected] or hadoop@slave3

新しいノードのホスト名を設定

ファイル /etc/sysconfig/network でホスト名を設定できます

On new slave3 machine

NETWORKING = yes
HOSTNAME = slave3.in

変更を有効にするには、マシンを再起動するか、それぞれのホスト名で新しいマシンに対してhostnameコマンドを実行します(再起動は適切なオプションです)。

slave3ノードマシン上-

ホスト名slave3.in

次の行を使用して、クラスターのすべてのマシンで /etc/hosts を更新します-

192.168.1.102 slave3.in slave3

ここで、ホスト名を使用してマシンをpingして、IPに解決されているかどうかを確認してください。

新しいノードマシンで-

ping master.in

新しいノードでDataNodeを開始します

*$ HADOOP_HOME/bin/hadoop-daemon.sh script* を使用して、datanodeデーモンを手動で起動します。 マスター(NameNode)に自動的に接続し、クラスターに参加します。 また、新しいノードをマスターサーバーのconf/slavesファイルに追加する必要があります。 スクリプトベースのコマンドは、新しいノードを認識します。

新しいノードにログイン

su hadoop or ssh -X [email protected]

次のコマンドを使用して、新しく追加されたスレーブノードでHDFSを起動します

./bin/hadoop-daemon.sh start datanode

新しいノードでjpsコマンドの出力を確認します。 次のようになります。

$ jps
7141 DataNode
10312 Jps

HadoopクラスターからのDataNodeの削除

データを失うことなく、実行中にクラスターからノードをその場で削除できます。 HDFSは、ノードの削除が安全に実行されることを保証する廃止機能を提供します。 それを使用するには、以下の手順に従ってください-

ステップ1-マスターへのログイン

Hadoopがインストールされているマスターマシンユーザーにログインします。

$ su hadoop

ステップ2-クラスター構成の変更

除外ファイルは、クラスターを開始する前に構成する必要があります。 dfs.hosts.excludeという名前のキーを $ HADOOP_HOME/etc/hadoop/hdfs-site.xml ファイルに追加します。 このキーに関連付けられた値は、HDFSへの接続が許可されていないマシンのリストを含むNameNodeのローカルファイルシステム上のファイルへのフルパスを提供します。

たとえば、これらの行を etc/hadoop/hdfs-site.xml ファイルに追加します。

<property>
   <name>dfs.hosts.exclude</name>
   <value>/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt</value>
   <description>DFS exclude</description>
</property>

ステップ3-廃止するホストを決定する

廃止する各マシンは、hdfs_exclude.txtで識別されるファイルに追加する必要があります(1行に1つのドメイン名)。 これにより、NameNodeに接続できなくなります。 DataNode2を削除する場合、 "/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt" ファイルの内容を以下に示します。

slave2.in

ステップ4-構成の再読み込みを強制する

*"$ HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes"* コマンドを引用符なしで実行します。
$ $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes

これにより、新しく更新された「除外」ファイルを含め、NameNodeがその構成を強制的に再読み込みされます。 一定期間にわたってノードを使用停止し、各ノードのブロックがアクティブのままになるようにスケジュールされているマシンに複製される時間を確保します。

*slave2.in* で、jpsコマンドの出力を確認します。 しばらくすると、DataNodeプロセスが自動的にシャットダウンされます。

ステップ5-ノードのシャットダウン

廃止プロセスが完了したら、廃止されたハードウェアをメンテナンスのために安全にシャットダウンできます。 レポートコマンドをdfsadminに実行して、使用停止のステータスを確認します。 次のコマンドは、廃止ノードとクラスターに接続されたノードのステータスを記述します。

$ $HADOOP_HOME/bin/hadoop dfsadmin -report

ステップ6-除外ファイルを再度編集する

マシンが廃止されたら、「除外」ファイルから削除できます。 "$ HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes" を再度実行すると、除外ファイルが読み取られてNameNodeに戻されます。メンテナンスが完了した後、またはクラスター内で追加の容量が再び必要になった後などに、DataNodeがクラスターに再参加できるようにします。

特記事項-上記のプロセスに従っても、タスクトラッカープロセスがノードで実行されている場合は、シャットダウンする必要があります。 1つの方法は、上記の手順で行ったようにマシンを切断することです。 マスターはプロセスを自動的に認識し、デッドとして宣言します。 タスクトラッカーを削除するために同じプロセスを実行する必要はありません。これは、DataNodeと比較してそれほど重要ではないためです。 DataNodeには、データを失うことなく安全に削除するデータが含まれています。

tasktrackerは、いつでも次のコマンドでオンザフライで実行/シャットダウンできます。

$ $HADOOP_HOME/bin/hadoop-daemon.sh stop tasktracker
$HADOOP_HOME/bin/hadoop-daemon.sh start tasktracker

Hadoop-questions-answers