Hadoop-クイックガイド

「世界のデータの90%は過去数年間に生成されました。」

新しいテクノロジー、デバイス、ソーシャルネットワーキングサイトなどの通信手段の出現により、人類が生成するデータの量は毎年急速に増加しています。当初から2003年までに作成されたデータ量は50億ギガバイトでした。データをディスクの形で積み上げると、サッカー場全体がいっぱいになる可能性があります。で2日ごとに同じ量が作成されました2011、および10分ごとに 2013。この率はまだ非常に大きくなっています。生成されたこのすべての情報は意味があり、処理時に役立つ可能性がありますが、無視されています。

ビッグデータとは?

Big dataは、従来のコンピューティング技術では処理できない大きなデータセットのコレクションです。それは単一の技術やツールではなく、さまざまなツール、技術、フレームワークを含む完全な主題になっています。

ビッグデータには何が含まれますか?

ビッグデータには、さまざまなデバイスやアプリケーションによって生成されたデータが含まれます。以下に、ビッグデータの傘下にあるフィールドの一部を示します。

  • Black Box Data −ヘリコプター、飛行機、ジェット機などのコンポーネントです。飛行乗務員の声、マイクとイヤホンの録音、および航空機の性能情報をキャプチャします。

  • Social Media Data − FacebookやTwitterなどのソーシャルメディアは、世界中の何百万もの人々によって投稿された情報と意見を保持しています。

  • Stock Exchange Data −証券取引所のデータには、顧客が行ったさまざまな会社の株式について行われた「購入」および「販売」の決定に関する情報が保持されています。

  • Power Grid Data −電力網データは、基地局に関して特定のノードによって消費される情報を保持します。

  • Transport Data −輸送データには、車両のモデル、容量、距離、および可用性が含まれます。

  • Search Engine Data −検索エンジンは、さまざまなデータベースから大量のデータを取得します。

したがって、ビッグデータには、膨大な量、高速、および拡張可能なさまざまなデータが含まれます。その中のデータは3つのタイプになります。

  • Structured data −リレーショナルデータ。

  • Semi Structured data −XMLデータ。

  • Unstructured data − Word、PDF、テキスト、メディアログ。

ビッグデータのメリット

  • Facebookなどのソーシャルネットワークに保持されている情報を使用して、マーケティングエージェンシーはキャンペーン、プロモーション、およびその他の広告媒体に対する反応について学習しています。

  • 消費者の好みや製品の認識などのソーシャルメディアの情報を使用して、製品会社や小売組織は生産を計画しています。

  • 患者の以前の病歴に関するデータを使用して、病院はより良い迅速なサービスを提供しています。

ビッグデータテクノロジー

ビッグデータテクノロジーは、より正確な分析を提供する上で重要です。これにより、より具体的な意思決定が可能になり、運用効率が向上し、コストが削減され、ビジネスのリスクが軽減されます。

ビッグデータの力を活用するには、大量の構造化データと非構造化データをリアルタイムで管理および処理し、データのプライバシーとセキュリティを保護できるインフラストラクチャが必要になります。

ビッグデータを処理するために、Amazon、IBM、Microsoftなどのさまざまなベンダーのさまざまなテクノロジーが市場に出回っています。ビッグデータを処理するテクノロジーを調べながら、次の2つのクラスのテクノロジーを調べます。

運用上のビッグデータ

これには、データが主にキャプチャおよび保存されるリアルタイムのインタラクティブなワークロードの運用機能を提供するMongoDBのようなシステムが含まれます。

NoSQLビッグデータシステムは、過去10年間に出現した新しいクラウドコンピューティングアーキテクチャを利用して、大規模な計算を安価かつ効率的に実行できるように設計されています。これにより、運用上のビッグデータワークロードの管理がはるかに簡単になり、実装が安価で高速になります。

一部のNoSQLシステムは、最小限のコーディングで、データサイエンティストや追加のインフラストラクチャを必要とせずに、リアルタイムデータに基づいてパターンとトレンドへの洞察を提供できます。

分析ビッグデータ

これらには、大部分またはすべてのデータに影響を与える可能性のある遡及的かつ複雑な分析のための分析機能を提供する、超並列処理(MPP)データベースシステムやMapReduceなどのシステムが含まれます。

MapReduceは、SQLによって提供される機能を補完するデータを分析する新しい方法と、単一サーバーから数千のハイエンドおよびローエンドマシンにスケールアップできるMapReduceに基づくシステムを提供します。

これらの2つのクラスのテクノロジーは補完的であり、頻繁に一緒に展開されます。

運用システムと分析システム

運用 分析
レイテンシー 1ミリ秒-100ミリ秒 1分-100分
並行性 1000〜100,000 1〜10
アクセスパターン 書き込みと読み取り 読み取り
クエリ 選択的 非選択的
データスコープ 運用 回顧展
エンドユーザー お客様 データサイエンティスト
技術 NoSQL MapReduce、MPPデータベース

ビッグデータの課題

ビッグデータに関連する主な課題は次のとおりです-

  • データのキャプチャ
  • Curation
  • Storage
  • Searching
  • Sharing
  • Transfer
  • Analysis
  • Presentation

上記の課題を解決するために、組織は通常、エンタープライズサーバーの助けを借ります。

従来のアプローチ

このアプローチでは、企業はビッグデータを保存および処理するためのコンピューターを所有します。ストレージの目的で、プログラマーはOracle、IBMなどのデータベースベンダーの選択の助けを借ります。このアプローチでは、ユーザーはアプリケーションと対話し、アプリケーションはデータのストレージと分析の一部を処理します。

制限

このアプローチは、標準のデータベースサーバーで対応できる量の少ないデータを処理するアプリケーション、またはデータを処理するプロセッサの制限までは正常に機能します。しかし、大量のスケーラブルなデータを処理する場合、単一のデータベースのボトルネックを介してそのようなデータを処理することは多忙な作業です。

Googleのソリューション

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

Hadoop

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

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

Hadoopは、Javaで記述されたApacheオープンソースフレームワークであり、単純なプログラミングモデルを使用して、コンピューターのクラスター全体で大規模なデータセットの分散処理を可能にします。Hadoopフレームワークアプリケーションは、コンピューターのクラスター全体に分散ストレージ計算を提供する環境で機能します。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は、GNU / Linuxプラットフォームとそのフレーバーによってサポートされています。したがって、Hadoop環境をセットアップするためにLinuxオペレーティングシステムをインストールする必要があります。Linux以外のOSを使用している場合は、Virtualboxソフトウェアをインストールして、Virtualbox内にLinuxを含めることができます。

インストール前のセットアップ

Linux環境にHadoopをインストールする前に、を使用してLinuxをセットアップする必要があります。 ssh(セキュアシェル)。Linux環境をセットアップするには、以下の手順に従ってください。

ユーザーの作成

最初に、HadoopファイルシステムをUnixファイルシステムから分離するために、Hadoop用に別のユーザーを作成することをお勧めします。以下の手順に従って、ユーザーを作成します-

  • コマンド「su」を使用してルートを開きます。

  • コマンド「useraddusername」を使用して、rootアカウントからユーザーを作成します。

  • これで、コマンド「suusername」を使用して既存のユーザーアカウントを開くことができます。

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が存在することを確認する必要があります。javaversionコマンドの構文を以下に示します。

$ 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

次のリンクwww.oracle.comにアクセスして、Java(JDK <最新バージョン> -X64.tar.gz)をダウンロードします。

次に jdk-7u71-linux-x64.tar.gz システムにダウンロードされます。

ステップ2

通常、ダウンロードしたJavaファイルはDownloadsフォルダーにあります。それを確認し、抽出します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を使用できるようにするには、Javaを「/ usr / local /」の場所に移動する必要があります。rootを開き、次のコマンドを入力します。

$ 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 SoftwareFoundationからHadoop2.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クラスターを操作できます。

  • Local/Standalone Mode −システムにHadoopをダウンロードした後、デフォルトでは、スタンドアロンモードで構成され、単一のJavaプロセスとして実行できます。

  • Pseudo Distributed Mode−単一マシンでの分散シミュレーションです。hdfs、yarn、MapReduceなどの各Hadoopデーモンは、個別のJavaプロセスとして実行されます。このモードは開発に役立ちます。

  • Fully Distributed Mode−このモードは、クラスターとして最低2台以上のマシンで完全に分散されます。このモードについては、次の章で詳しく説明します。

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

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

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

Hadoopのセットアップ

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

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 jarファイルの例が提供されます。これは、MapReduceの基本機能を提供し、Pi値、特定のファイルリストの単語数などの計算に使用できます。

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

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

$ 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のインストール

以下の手順に従って、Hadoop2.4.1を疑似分散モードでインストールします。

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

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

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環境変数をリセットする必要があります。 hadoop-env.sh 置き換えることによってファイル JAVA_HOME システム内の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> </ 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</name> 
      <value>file:///home/hadoop/hadoopinfra/hdfs/datanode </value> 
   </property>
</configuration>

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

yarn-site.xml

このファイルは、Hadoopにyarnを構成するために使用されます。ヤーンサイト.xmlファイルを開き、このファイルの<configuration>、</ configuration>タグの間に次のプロパティを追加します。

<configuration>
   <property>
      <name>yarn.nodemanager.aux-services</name>
      <value>mapreduce_shuffle</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-名前ノードの設定

次のようにコマンド「hdfsnamenode-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-Hadoopdfsの確認

次のコマンドは、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-糸スクリプトの検証

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

$ 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です。ブラウザーでHadoopサービスを取得するには、次のURLを使用します。

http://localhost:50070/

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

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

http://localhost:8088/

Hadoopファイルシステムは、分散ファイルシステム設計を使用して開発されました。コモディティハードウェアで実行されます。他の分散システムとは異なり、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の目標

Fault detection and recovery− HDFSには多数のコモディティハードウェアが含まれているため、コンポーネントの障害が頻繁に発生します。したがって、HDFSには、迅速かつ自動の障害検出と回復のためのメカニズムが必要です。

Huge datasets − HDFSには、巨大なデータセットを持つアプリケーションを管理するために、クラスターごとに数百のノードが必要です。

Hardware at data−計算がデータの近くで行われる場合、要求されたタスクを効率的に実行できます。特に巨大なデータセットが関係している場合、ネットワークトラフィックが減少し、スループットが向上します。

HDFSの開始

最初に、構成済みのHDFSファイルシステムをフォーマットし、namenode(HDFSサーバー)を開いて、次のコマンドを実行する必要があります。

$ hadoop namenode -format

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

$ 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からのデータの取得

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

ステップ1

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

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

ステップ2

を使用してHDFSからローカルファイルシステムにファイルを取得します get コマンド。

$ $HADOOP_HOME/bin/hadoop fs -get /user/output/ /home/hadoop_tp/

HDFSのシャットダウン

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

$ stop-dfs.sh

にはさらに多くのコマンドがあります "$HADOOP_HOME/bin/hadoop fs"ここに示されているよりも、これらの基本的な操作で開始できます。追加の引数なしで./bin/hadoopdfsを実行すると、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内のオブジェクトを参照します。

シニア番号 コマンドと説明
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内の宛先にコピーします。

10

-copyFromLocal <localSrc> <dest>

-putと同じ

11

-moveFromLocal <localSrc> <dest>

localSrcによって識別されたローカルファイルシステムからファイルまたはディレクトリをHDFS内の宛先にコピーし、成功するとローカルコピーを削除します。

12

-get [-crc] <src> <localDest>

srcで識別されるHDFS内のファイルまたはディレクトリを、localDestで識別されるローカルファイルシステムパスにコピーします。

13

-getmerge <src> <localDest>

HDFSのパスsrcに一致するすべてのファイルを取得し、localDestで識別されるローカルファイルシステム内の単一のマージされたファイルにコピーします。

14

-cat <filen-ame>

stdoutのファイル名の内容を表示します。

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で再帰的に変更を実行します。モードは3桁の8進数モード、つまり{augo} +/- {rwxX}です。スコープが指定されておらず、umaskを適用しない場合を想定します。

24

-chown [-R] [owner][:[group]] <path>...

パスで識別されるファイルまたはディレクトリの所有ユーザーまたはグループ、あるいはその両方を設定します。-Rが指定されている場合、所有者を再帰的に設定します。

25

-chgrp [-R] group <path>...

パスで識別されるファイルまたはディレクトリの所有グループを設定します。-Rが指定されている場合、グループを再帰的に設定します。

26

-help <cmd-name>

上記のいずれかのコマンドの使用法情報を返します。cmdの先頭の「-」文字は省略してください。

MapReduceは、コモディティハードウェアの大規模なクラスター上で信頼性の高い方法で大量のデータを並行して処理するアプリケーションを作成するために使用できるフレームワークです。

MapReduceとは何ですか?

MapReduceは、Javaに基づく分散コンピューティングのための処理技術およびプログラムモデルです。MapReduceアルゴリズムには、MapとReduceという2つの重要なタスクが含まれています。Mapはデータのセットを取得し、それを別のデータのセットに変換します。ここで、個々の要素はタプル(キーと値のペア)に分割されます。次に、タスクを減らします。これは、マップからの出力を入力として受け取り、それらのデータタプルをより小さなタプルのセットに結合します。MapReduceという名前のシーケンスが示すように、reduceタスクは常にマップジョブの後に実行されます。

MapReduceの主な利点は、複数のコンピューティングノード間でデータ処理を簡単にスケーリングできることです。MapReduceモデルでは、データ処理プリミティブはマッパーおよびリデューサーと呼ばれます。データ処理アプリケーションをマッパーリデューサーに分解することは、簡単ではない場合があります。ただし、MapReduceフォームでアプリケーションを作成すると、クラスター内で数百、数千、さらには数万のマシンを実行するようにアプリケーションをスケーリングするだけで、構成を変更するだけです。この単純なスケーラビリティは、多くのプログラマーがMapReduceモデルを使用するように惹きつけてきたものです。

アルゴリズム

  • 一般に、MapReduceパラダイムは、データが存在する場所にコンピューターを送信することに基づいています。

  • MapReduceプログラムは、マップステージ、シャッフルステージ、リデュースステージの3つのステージで実行されます。

    • Map stage−マップまたはマッパーの仕事は、入力データを処理することです。通常、入力データはファイルまたはディレクトリの形式であり、Hadoopファイルシステム(HDFS)に保存されます。入力ファイルは、マッパー関数に1行ずつ渡されます。マッパーはデータを処理し、データのいくつかの小さなチャンクを作成します。

    • Reduce stage −この段階は、 Shuffle ステージと Reduceステージ。レデューサーの仕事は、マッパーからのデータを処理することです。処理後、新しい出力セットが生成され、HDFSに保存されます。

  • MapReduceジョブ中に、HadoopはMapタスクとReduceタスクをクラスター内の適切なサーバーに送信します。

  • フレームワークは、タスクの発行、タスクの完了の確認、ノード間のクラスター周辺でのデータのコピーなど、データ受け渡しのすべての詳細を管理します。

  • ほとんどのコンピューティングは、ネットワークトラフィックを削減するローカルディスク上のデータを持つノードで実行されます。

  • 指定されたタスクの完了後、クラスターはデータを収集および削減して適切な結果を形成し、それをHadoopサーバーに送り返します。

入力と出力(Javaパースペクティブ)

MapReduceフレームワークは<key、value>ペアで動作します。つまり、フレームワークはジョブへの入力を<key、value>ペアのセットとして表示し、<key、value>ペアのセットをジョブの出力として生成します。 、おそらく異なるタイプのもの。

キークラスと値クラスはフレームワークによってシリアル化されている必要があるため、書き込み可能なインターフェイスを実装する必要があります。さらに、キークラスは、フレームワークによる並べ替えを容易にするために、Writable-Comparableインターフェイスを実装する必要があります。の入力および出力タイプMapReduce job −(入力)<k1、v1>→map→<k2、v2>→reduce→<k3、v3>(出力)。

入力 出力
地図 <k1​​、v1> リスト(<k2、v2>)
減らす <k2、list(v2)> リスト(<k3、v3>)

用語

  • PayLoad −アプリケーションは、Map関数とReduce関数を実装し、ジョブの中核を形成します。

  • Mapper −マッパーは、入力キー/値ペアを中間キー/値ペアのセットにマップします。

  • NamedNode − Hadoop分散ファイルシステム(HDFS)を管理するノード。

  • DataNode −処理が行われる前にデータが事前に提示されるノード。

  • MasterNode − JobTrackerが実行され、クライアントからのジョブ要求を受け入れるノード。

  • SlaveNode − Map andReduceプログラムが実行されるノード。

  • JobTracker −ジョブをスケジュールし、タスクトラッカーへの割り当てジョブを追跡します。

  • Task Tracker −タスクを追跡し、ステータスをJobTrackerに報告します。

  • Job −プログラムは、データセット全体でのマッパーとリデューサーの実行です。

  • Task −データのスライスに対するマッパーまたはレデューサーの実行。

  • Task Attempt −SlaveNodeでタスクを実行しようとする特定のインスタンス。

シナリオ例

以下は、組織の電力消費に関するデータです。毎月の電力消費量とさまざまな年の年間平均が含まれています。

1月 2月 3月 4月 五月 6月 7月 8月 9月 10月 11月 12月 平均
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

If the above data is given as input, we have to write applications to process it and produce results such as finding the year of maximum usage, year of minimum usage, and so on. This is a walkover for the programmers with finite number of records. They will simply write the logic to produce the required output, and pass the data to the application written.

But, think of the data representing the electrical consumption of all the largescale industries of a particular state, since its formation.

When we write applications to process such bulk data,

  • They will take a lot of time to execute.

  • There will be a heavy network traffic when we move data from source to network server and so on.

To solve these problems, we have the MapReduce framework.

Input Data

The above data is saved as sample.txtand given as input. The input file looks as shown below.

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

Example Program

Given below is the program to the sample data using MapReduce framework.

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

ダウンロード Hadoop-core-1.2.1.jar,これは、MapReduceプログラムをコンパイルして実行するために使用されます。次のリンク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.txtHDFSの入力ディレクトリにあります。

$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スクリプトを実行すると、すべてのコマンドの説明が出力されます。

Usage − hadoop [--configconfdir]コマンド

次の表に、使用可能なオプションとその説明を示します。

シニア番号 オプションと説明
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

Hadoopjarと必要なライブラリを取得するために必要なクラスパスを出力します。

24

daemonlog

各デーモンのログレベルを取得/設定します

MapReduceジョブと対話する方法

使用法-hadoopジョブ[GENERIC_OPTIONS]

以下は、Hadoopジョブで使用できる汎用オプションです。

シニア番号 GENERIC_OPTION&説明
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>

指定された範囲でjobtrackerが受信したイベントの詳細を出力します。

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

Pythonの使用例

Hadoopストリーミングでは、単語数の問題を検討しています。Hadoopのジョブには、マッパーとレデューサーの2つのフェーズが必要です。マッパーとリデューサーのコードをPythonスクリプトで記述し、Hadoopで実行します。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 + xmapper.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)から行指向の出力を収集し、各行をキーと値のペアに変換します。これはマッパーの出力として収集されます。デフォルトでは、最初のタブ文字までの行のプレフィックスがキーであり、行の残りの部分(タブ文字を除く)が値になります。行にタブ文字がない場合、行全体がキーと見なされ、値はnullになります。ただし、これは必要に応じてカスタマイズできます。

レデューサーにスクリプトが指定されている場合、各レデューサータスクはスクリプトを個別のプロセスとして起動し、レデューサーが初期化されます。レデューサータスクが実行されると、入力キーと値のペアが行に変換され、その行がプロセスの標準入力(STDIN)に送られます。その間、レデューサーはプロセスの標準出力(STDOUT)から行指向の出力を収集し、各行をキーと値のペアに変換します。これは、レデューサーの出力として収集されます。デフォルトでは、最初のタブ文字までの行のプレフィックスがキーであり、行の残りの部分(タブ文字を除く)が値です。ただし、これは特定の要件に従ってカスタマイズできます。

重要なコマンド

パラメーター オプション 説明
-入力ディレクトリ/ファイル名 必須 マッパーの場所を入力します。
-出力ディレクトリ名 必須 レデューサーの出力位置。
-マッパー実行可能ファイルまたはスクリプトまたはJavaClassName 必須 マッパー実行可能ファイル。
-reducer実行可能ファイルまたはスクリプトまたはJavaClassName 必須 レデューサー実行可能ファイル。
-ファイルファイル名 オプション マッパー、レデューサー、またはコンバイナーの実行可能ファイルを計算ノードでローカルに使用できるようにします。
-inputformat JavaClassName オプション 指定するクラスは、Textクラスのキーと値のペアを返す必要があります。指定しない場合、TextInputFormatがデフォルトとして使用されます。
-outputformat JavaClassName オプション 指定するクラスは、Textクラスのキーと値のペアを取る必要があります。指定しない場合、TextOutputformatがデフォルトとして使用されます。
-パーティショナーJavaClassName オプション キーが送信されるreduceを決定するクラス。
-コンバイナーstreamingCommandまたはJavaClassName オプション マップ出力用のコンバイナー実行可能ファイル。
-cmdenv name = value オプション 環境変数をストリーミングコマンドに渡します。
-inputreader オプション 下位互換性の場合:(入力フォーマットクラスの代わりに)レコードリーダークラスを指定します。
-詳細 オプション 冗長出力。
-lazyOutput オプション 遅延出力を作成します。たとえば、出力形式がFileOutputFormatに基づいている場合、出力ファイルはoutput.collect(またはContext.write)の最初の呼び出しでのみ作成されます。
-numReduceTasks オプション レデューサーの数を指定します。
-mapdebug オプション マップタスクが失敗したときに呼び出すスクリプト。
-reducedebug オプション reduceタスクが失敗したときに呼び出すスクリプト。

この章では、分散環境でのHadoopマルチノードクラスターのセットアップについて説明します。

クラスター全体を示すことはできないため、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マルチノードクラスターをセットアップします。

Javaのインストール

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

$ 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

次のリンクwww.oracle.comにアクセスして、Java(JDK <最新バージョン> -X64.tar.gz)をダウンロードします。

次に jdk-7u71-linux-x64.tar.gz システムにダウンロードされます。

ステップ2

通常、ダウンロードしたJavaファイルはDownloadsフォルダーにあります。それを確認し、抽出します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を使用できるようにするには、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

ノードのマッピング

編集する必要があります hosts ファイルに /etc/ すべてのノードのフォルダで、各システムの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 tutorialspoint@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をファイルして編集します。

Note −システム構成に従って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-Masterですべての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。自動的にマスター(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に接続できなくなります。の内容"/home/hadoop/hadoop-1.2.1/hdfs_exclude.txt" DataNode2を削除する場合のファイルを以下に示します。

slave2.in

ステップ4-構成のリロードを強制する

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

$ $HADOOP_HOME/bin/hadoop dfsadmin -refreshNodes

これにより、NameNodeは、新しく更新された「excludes」ファイルを含め、その構成を再読み取りします。一定期間にわたってノードを廃止し、アクティブな状態を維持するようにスケジュールされているマシンに各ノードのブロックを複製できるようにします。

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

ステップ5-ノードをシャットダウンする

廃止措置プロセスが完了した後、廃止措置されたハードウェアはメンテナンスのために安全にシャットダウンできます。dfsadminに対してreportコマンドを実行して、廃止のステータスを確認します。次のコマンドは、廃止ノードとクラスターに接続されているノードのステータスを示します。

$ $HADOOP_HOME/bin/hadoop dfsadmin -report

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

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

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

タスクトラッカーは、次のコマンドを使用して、いつでもオンザフライで実行/シャットダウンできます。

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