前書き

このチュートリアルでは、DigitalOceanでのHadoopクラスターのセットアップについて説明します。 Hadoopソフトウェアライブラリは、基本的なプログラミングモデルを活用して、サーバークラスター全体に分散した方法で大きなデータセットを処理できるApacheフレームワークです。 Hadoopが提供するスケーラビリティにより、単一サーバーから数千台のマシンにスケールアップできます。 また、アプリケーション層で障害検出を提供するため、障害を検出して高可用性サービスとして処理できます。

このチュートリアルで扱う4つの重要なモジュールがあります。

  • * Hadoop Common *は、他のHadoopモジュールをサポートするために必要な一般的なユーティリティとライブラリのコレクションです。

  • Apache組織で述べられているように、* Hadoop分散ファイルシステム(HDFS)*は、耐障害性に優れた分散ファイルシステムです。市販のハードウェアで実行して大規模なデータセットを処理するように特別に設計されています。

  • * Hadoop YARN *は、ジョブスケジューリングとクラスターリソース管理に使用されるフレームワークです。

  • * Hadoop MapReduce *は、大規模なデータセットの並列処理のためのYARNベースのシステムです。

このチュートリアルでは、4つのDigitalOcean DropletsでHadoopクラスターをセットアップして実行します。

前提条件

このチュートリアルには次のものが必要です。

  • 非ルートsudoユーザーが設定された4つのUbuntu 16.04ドロップレット。 この設定がない場合は、https://www.digitalocean.com/community/tutorials/initial-server-setup-with-ubuntu-16-04 [サーバーの初期セットアップUbuntu 16.04]。 このチュートリアルでは、ローカルマシンのSSHキーを使用していることを前提としています。 Hadoopの言語ごとに、これらのドロップレットを次の名前で参照します。

  • + hadoop-master +

  • + hadoop-worker-01 +

  • + hadoop-worker-02 +

  • + hadoop-worker-03 +

  • さらに、初期サーバーのセットアップとhttps:// wwwの完了後にhttps://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-snapshots[DigitalOcean Snapshots]を使用することもできます。 digitalocean.com/community/tutorials/how-to-spin-up-a-hadoop-cluster-with-digitalocean-droplets#step-1-%E2%80%94-installation-setup-for-each-droplet [手順1]およびhttps://www.digitalocean.com/community/tutorials/how-to-spin-up-a-hadoop-cluster-with-digitalocean-droplets#step-2-%E2%80%94-update-最初のドロップレットのhadoop-environment-configuration [2](下)。

これらの前提条件が整ったら、Hadoopクラスターのセットアップを開始できます。

手順1-各ドロップレットのインストールセットアップ

JavaとHadoopを* 4つの*ドロップレットの*それぞれ*にインストールします。 各ドロップレットで各手順を繰り返したくない場合は、https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-snapshots [DigitalOcean Snapshots]をhttpsの最後に使用できます。 //www.digitalocean.com/community/tutorials/how-to-spin-up-a-hadoop-cluster-with-digitalocean-droplets#step-2-%E2%80%94-update-hadoop-environment-configuration [ステップ2]初期インストールと構成を複製するため。

まず、利用可能な最新のソフトウェアパッチでUbuntuを更新します。

sudo apt-get update && sudo apt-get -y dist-upgrade

次に、各ドロップレットにUbuntu用のヘッドレスバージョンのJavaをインストールします。 「ヘッドレス」とは、グラフィカルユーザーインターフェイスなしでデバイス上で実行できるソフトウェアを指します。

sudo apt-get -y install openjdk-8-jdk-headless

各ドロップレットにHadoopをインストールするには、Hadoopをインストールするディレクトリを作成しましょう。 これを「+ my-hadoop-install +」と呼び、そのディレクトリに移動できます。

mkdir my-hadoop-install && cd my-hadoop-install

ディレクトリを作成したら、http://hadoop.apache.org/releases.html [Hadoopリリースリスト]から最新のバイナリをインストールしましょう。 このチュートリアルの時点で、最新のものは `+ Hadoop 3.0.1 +`です。

選択したダウンロードに満足したら、次のように、選択したバイナリリンクで `+ wget +`コマンドを使用できます。

wget http://mirror.cc.columbia.edu/pub/software/apache/hadoop/common/hadoop-3.0./hadoop-3.0..tar.gz

ダウンロードが完了したら、Ubuntu用のファイルアーカイブツールである `+ tar +`を使用してファイルの内容を解凍します。

tar xvzf hadoop-3.0..tar.gz

これで、初期構成を開始する準備が整いました。

ステップ2-Hadoop環境構成の更新

Dropletノードごとに、 `+ JAVA_HOME +`を設定する必要があります。 nanoまたは選択した別のテキストエディターで次のファイルを開き、更新できるようにします。

nano ~/my-hadoop-install/hadoop-3.0./etc/hadoop/hadoop-env.sh

`+ JAVA_HOME +`が配置されている次のセクションを更新します。

hadoop-env.sh

...
###
# Generic settings for HADOOP
###

# Technically, the only required environment variable is JAVA_HOME.
# All others are optional.  However, the defaults are probably not
# preferred.  Many sites configure these options outside of Hadoop,
# such as in /etc/profile.d

# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!
# export JAVA_HOME=

# Location of Hadoop.  By default, Hadoop will attempt to determine
# this location based upon its execution path.
# export HADOOP_HOME=
...

このようになります。

hadoop-env.sh

...
###
# Generic settings for HADOOP
###

# Technically, the only required environment variable is JAVA_HOME.
# All others are optional.  However, the defaults are probably not
# preferred.  Many sites configure these options outside of Hadoop,
# such as in /etc/profile.d

# The java implementation to use. By default, this environment
# variable is REQUIRED on ALL platforms except OS X!


# Location of Hadoop.  By default, Hadoop will attempt to determine
# this location based upon its execution path.
# export HADOOP_HOME=
...

また、Hadoopとそのモジュールを実行するためにいくつかの環境変数を追加する必要があります。 これらは、次のようにファイルの下部に追加する必要があります。「++」は、sudoの非ルートユーザーのユーザー名になります。

hadoop-env.sh

...
#
# To prevent accidents, shell commands be (superficially) locked
# to only allow certain users to execute certain subcommands.
# It uses the format of (command)_(subcommand)_USER.
#
# For example, to limit who can execute the namenode command,
export HDFS_NAMENODE_USER=""
export HDFS_DATANODE_USER=""
export HDFS_SECONDARYNAMENODE_USER=""
export YARN_RESOURCEMANAGER_USER=""
export YARN_NODEMANAGER_USER=""

この時点で、ファイルを保存して終了できます。 次に、次のコマンドを実行してエクスポートを適用します。

source ~/my-hadoop-install/hadoop-3.0./etc/hadoop/hadoop-env.sh

`+ hadoop-env.sh `スクリプトを更新してソースを取得したら、Hadoop分散ファイルシステム(HDFS)のデータディレクトリを作成して、関連するすべての ` HDFS +`ファイルを保存する必要があります。

sudo mkdir -p /usr/local/hadoop/hdfs/data

このファイルのパーミッションをそれぞれのユーザーに設定します。 ドロップレットごとに異なるユーザー名を持っている場合は、それぞれのsudoユーザーにこれらの権限を許可してください。

sudo chown -R : /usr/local/hadoop/hdfs/data

DigitalOceanスナップショットを使用してこれらのコマンドをドロップレットノード全体に複製する場合は、ここでスナップショットを作成し、このイメージから新しいドロップレットを作成できます。 これに関するガイダンスについては、https://www.digitalocean.com/community/tutorials/an-introduction-to-digitalocean-snapshots [DigitalOceanスナップショットの概要]をご覧ください。

4つすべてのUbuntuドロップレットで上記の手順を完了したら、ノード全体でこの構成を完了することができます。

ステップ3-各ノードの初期構成を完了する

この時点で、* 4つすべてのDropletノードの `+ core site.xml`ファイルを更新する必要があります。 個々のドロップレット内で、次のファイルを開きます。

nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/core-site.xml

次の行が表示されます。

core-site.xml

...
<configuration>
</configuration>

ファイルを次のXMLのように変更し、プロパティ値内に*各DropletのそれぞれのIP *を含めます。ここで、「++」を記述します。 ファイアウォールを使用している場合は、ポート9000を開く必要があります。

core-site.xml

...
<configuration>
   <property>
       <name>fs.defaultFS</name>
       <value>hdfs://:9000</value>
   </property>
</configuration>
  • 4つすべてのサーバーについて、関連するドロップレットIPで上記の記述を繰り返します。

これで、サーバーノードごとに一般的なHadoop設定がすべて更新され、SSHキーを介してノードの接続を続行できます。

ステップ4-各ノードにSSHをセットアップする

Hadoopが適切に機能するためには、マスターノードとワーカーノードの間にパスワードなしのSSHを設定する必要があります( `+ master `と ` worker `の言語は、 ` primary `と ` secondary +を参照するHadoopの言語です) `サーバー)。

このチュートリアルでは、マスターノードは + hadoop-master +`であり、ワーカーノードは集合的に `+ hadoop-worker +`と呼ばれますが、合計3つ( `+ -01と呼ばれます) + `、 + -02 + 、および + -03 + `)。 まず、マスターノード上で公開鍵と秘密鍵のペアを作成する必要があります。これは、 `+ hadoop-master +`に属するIPアドレスを持つノードになります。

`+ hadoop-master `ドロップレットで、次のコマンドを実行します。 キーの場所のデフォルトを使用するには「 enter」を押し、空のパスフレーズを使用するには「+ enter」を2回押します。

ssh-keygen

各ワーカーノードについて、マスターノードの公開キーを取得し、それを各ワーカーノードの `+ authorized_keys`ファイルにコピーする必要があります。

+ .ssh`フォルダーにある + id_rsa.pub`ファイルで `+ cat +`を実行してマスターノードから公開キーを取得し、コンソールに出力します。

cat ~/.ssh/id_rsa.pub

各ワーカーノードドロップレットにログインし、 `+ authorized_keys +`ファイルを開きます。

nano ~/.ssh/authorized_keys

マスターノードの公開鍵(マスターノード上の `+ cat〜/ .ssh / id_rsa.pub `コマンドから生成した出力)を各ドロップレットのそれぞれの `〜/ .ssh / authorized_keys +`ファイルにコピーします。 閉じる前に各ファイルを必ず保存してください。

3つのワーカーノードの更新が終了したら、同じコマンドを発行してマスターノードの公開キーを独自の `+ authorized_keys`ファイルにコピーします。

nano ~/.ssh/authorized_keys

`+ hadoop-master `では、関連するノードの各ホスト名を含むように ` ssh +`設定をセットアップする必要があります。 nanoを使用して、構成ファイルを編集用に開きます。

nano ~/.ssh/config

ファイルを次のように変更し、関連するIPとユーザー名を追加する必要があります。

config

Host
   HostName
   User
   IdentityFile ~/.ssh/id_rsa

Host
   HostName
   User
   IdentityFile ~/.ssh/id_rsa

Host
   HostName
   User
   IdentityFile ~/.ssh/id_rsa

Host
   HostName
   User
   IdentityFile ~/.ssh/id_rsa

ファイルを保存して閉じます。

`+ hadoop-master +`から、各ノードにSSHで接続します:

ssh @

現在のシステムがセットアップされた状態で各ノードにログインするのは初めてなので、次のことを尋ねられます。

Outputare you sure you want to continue connecting (yes/no)?

`+ yes `でプロンプトに返信します。 これは実行する必要がある唯一の時間ですが、初期SSH接続の各ワーカーノードで必要です。 最後に、各ワーカーノードからログアウトして、 ` hadoop-master +`に戻ります。

logout

残りの2つのワーカーノードについて、必ずこれらの手順を繰り返してください。

ワーカーノードごとにパスワードなしのSSHが正常にセットアップされたので、マスターノードの構成を続行できます。

手順5-マスターノードの構成

Hadoopクラスターの場合、マスターノードドロップレットでHDFSプロパティを構成する必要があります。

マスターノードで、次のファイルを編集します。

nano ~/my-hadoop-install/hadoop-3.0./etc/hadoop/hdfs-site.xml

`+ configuration`セクションを編集して、以下のXMLのようにします。

hdfs-site.xml

...
<configuration>
   <property>
       <name>dfs.replication</name>
       <value>3</value>
   </property>
   <property>
       <name>dfs.namenode.name.dir</name>
       <value>file:///usr/local/hadoop/hdfs/data</value>
   </property>
</configuration>

ファイルを保存して閉じます。

次に、マスターノードで `+ MapReduce `プロパティを設定します。 nanoまたは別のテキストエディターで ` mapred.site.xml`を開きます。

nano ~/my-hadoop-install/hadoop-3.0./etc/hadoop/mapred-site.xml

次に、現在のサーバーのIPアドレスが下に反映された状態で、このようにファイルを更新します。

mapred-site.xml

...
<configuration>
   <property>
       <name>mapreduce.jobtracker.address</name>
       <value>:54311</value>
   </property>
   <property>
       <name>mapreduce.framework.name</name>
       <value>yarn</value>
   </property>
</configuration>

ファイルを保存して閉じます。 ファイアウォールを使用している場合は、必ずポート54311を開いてください。

次に、マスターノードでYARNをセットアップします。 繰り返しますが、別のXMLファイルの構成セクションを更新しているので、ファイルを開きましょう。

nano ~/my-hadoop-install/hadoop-3.0./etc/hadoop/yarn-site.xml

次に、現在のサーバーのIPアドレスを入力して、ファイルを更新します。

yarn-site.xml

...
<configuration>

   <property>
       <name>yarn.nodemanager.aux-services</name>
       <value>mapreduce_shuffle</value>
   </property>
   <property>
       <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
       <value>org.apache.hadoop.mapred.ShuffleHandler</value>
   </property>
   <property>
       <name>yarn.resourcemanager.hostname</name>
       <value></value>
   </property>
</configuration>

最後に、Hadoopの参照ノードを設定して、マスターノードとワーカーノードを設定します。 まず、 `+ masters +`ファイルを開きます:

nano ~/my-hadoop-install/hadoop-3.0./etc/hadoop/masters

このファイルに、現在のサーバーのIPアドレスを追加します。

マスターズ

次に、 `+ workers +`ファイルを開いて編集します。

nano ~/my-hadoop-install/hadoop-3.0./etc/hadoop/workers

ここで、各ワーカーノードのIPアドレスを「+ localhost +」と表示されている場所の下に追加します。

労働者

localhost

`+ MapReduce `および ` YARN +`プロパティの設定が完了したら、ワーカーノードの設定を完了できます。

手順6-ワーカーノードの構成

ここで、ワーカーノードがHDFSのデータディレクトリへの正しい参照を持つようにワーカーノードを構成します。

*各ワーカーノード*で、このXMLファイルを編集します:

nano ~/my-hadoop-install/hadoop-3.0./etc/hadoop/hdfs-site.xml

構成セクションを次のものに置き換えます。

hdfs-site.xml

<configuration>
   <property>
       <name>dfs.replication</name>
       <value>3</value>
   </property>
   <property>
       <name>dfs.datanode.data.dir</name>
       <value>file:///usr/local/hadoop/hdfs/data</value>
   </property>
</configuration>

ファイルを保存して閉じます。 必ず3つすべてのワーカーノードでこの手順を複製してください。

この時点で、ワーカーノードドロップレットはHDFSのデータディレクトリを指しているため、Hadoopクラスターを実行できます。

ステップ7-Hadoopクラスターを実行する

Hadoopクラスターを開始できるようになりました。 起動する前に、マスターノードでHDFSをフォーマットする必要があります。 マスターノードドロップレットで、Hadoopがインストールされているディレクトリに移動します。

cd ~/my-hadoop-install/hadoop-3.0./

次に、次のコマンドを実行してHDFSをフォーマットします。

sudo ./bin/hdfs namenode -format

namenodeのフォーマットが成功すると、多くの出力が生成され、そのほとんどが `+ INFO +`ステートメントで構成されます。 下部に以下が表示され、ストレージディレクトリが正常にフォーマットされたことを確認します。

Output...
2018-01-28 17:58:08,323 INFO common.Storage: Storage directory /usr/local/hadoop/hdfs/data has been successfully formatted.
2018-01-28 17:58:08,346 INFO namenode.FSImageFormatProtobuf: Saving image file /usr/local/hadoop/hdfs/data/current/fsimage.ckpt_0000000000000000000 using no compression
2018-01-28 17:58:08,490 INFO namenode.FSImageFormatProtobuf: Image file /usr/local/hadoop/hdfs/data/current/fsimage.ckpt_0000000000000000000 of size 389 bytes saved in 0 seconds.
2018-01-28 17:58:08,505 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
2018-01-28 17:58:08,519 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at hadoop-example-node/127.0.1.1
************************************************************/

ここで、次のスクリプトを実行してHadoopクラスターを起動します( `+ less +`コマンドを使用して実行する前にスクリプトを確認してください):

sudo ./sbin/start-dfs.sh

その後、次を含む出力が表示されます。

OutputStarting namenodes on []
Starting datanodes
Starting secondary namenodes [hadoop-master]

次に、次のスクリプトを使用してYARNを実行します。

./sbin/start-yarn.sh

次の出力が表示されます。

OutputStarting resourcemanager
Starting nodemanagers

これらのコマンドを実行したら、マスターノードと各ワーカーノードでデーモンを実行する必要があります。

`+ jps +`コマンドを実行してJavaプロセスをチェックすることにより、デーモンをチェックできます。

jps

「+ jps 」コマンドを実行すると、「 NodeManager 」、「 SecondaryNameNode 」、「 Jps 」、「 NameNode 」、「 ResourceManager 」、および「 DataNode +」が実行されていることがわかります。 次の出力のようなものが表示されます。

Output9810 NodeManager
9252 SecondaryNameNode
10164 Jps
8920 NameNode
9674 ResourceManager
9051 DataNode

これにより、クラスターが正常に作成されたことと、Hadoopデーモンが実行されていることが確認されます。

選択したWebブラウザーで、以下にナビゲートすることにより、クラスターの正常性の概要を取得できます。

http://:9870

ファイアウォールがある場合は、必ずポート9870を開いてください。 次のようなものが表示されます。

image:https://assets.digitalocean.com/articles/hadoop-cluster/hadoop-verification.png [Hadoop Health Verification]

ここから、メニューバーの「+ Datanodes +」項目に移動して、ノードのアクティビティを確認できます。

結論

このチュートリアルでは、DigitalOcean Ubuntu 16.04 Dropletsを使用して、Hadoopマルチノードクラスターをセットアップおよび構成する方法について説明しました。 また、HadoopのDFSヘルスウェブインターフェースを使用して、クラスターのヘルスを監視および確認できるようになりました。

新しく構成されたクラスターを活用するために作業できるプロジェクトのアイデアを得るには、Apacheのプロジェクトの長いリストhttps://wiki.apache.org/hadoop/PoweredBy[powered by Hadoop]をご覧ください。