前書き
このチュートリアルでは、DigitalOceanでのHadoopクラスターのセットアップについて説明します。 Hadoop software libraryは、基本的なプログラミングモデルを活用して、サーバークラスター全体に分散した方法で大規模なデータセットを処理できるようにするApacheフレームワークです。 Hadoopが提供するスケーラビリティにより、単一サーバーから数千台のマシンにスケールアップできます。 また、アプリケーション層で障害検出を提供するため、障害を検出して高可用性サービスとして処理できます。
このチュートリアルで扱う4つの重要なモジュールがあります。
-
Hadoop Commonは、他のHadoopモジュールをサポートするために必要な一般的なユーティリティとライブラリのコレクションです。
-
the Apache organizationで示されるように、Hadoop Distributed File System (HDFS)は、非常にフォールトトレラントな分散ファイルシステムであり、特にコモディティハードウェアで実行して大規模なデータセットを処理するように設計されています。
-
Hadoop YARNは、ジョブのスケジューリングとクラスターリソースの管理に使用されるフレームワークです。
-
Hadoop MapReduceは、大規模なデータセットを並列処理するためのYARNベースのシステムです。
このチュートリアルでは、4つのDigitalOcean DropletsでHadoopクラスターをセットアップして実行します。
前提条件
このチュートリアルには次のものが必要です。
-
非ルートsudoユーザーが設定された4つのUbuntu 16.04ドロップレット。 これを設定していない場合は、Initial Server Setup with Ubuntu 16.04の手順1〜4に従ってください。 このチュートリアルでは、ローカルマシンのSSHキーを使用していることを前提としています。 Hadoopの言語ごとに、これらのドロップレットを次の名前で参照します。
-
hadoop-master
-
hadoop-worker-01
-
hadoop-worker-02
-
hadoop-worker-03
-
-
さらに、サーバーの初期セットアップと、最初のドロップレットのSteps 1および2(下記)の完了後にDigitalOcean Snapshotsを使用することもできます。
これらの前提条件が整ったら、Hadoopクラスターのセットアップを開始できます。
[[step-1 -—- installation-setup-for-each-droplet]] ==ステップ1—各ドロップレットのインストールセットアップ
fourのドロップレットのeachにJavaとHadoopをインストールします。 各ドロップレットで各手順を繰り返したくない場合は、Step 2の最後にDigitalOcean Snapshotsを使用して、初期インストールと構成を複製できます。
まず、利用可能な最新のソフトウェアパッチで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
ディレクトリを作成したら、Hadoop releases listから最新のバイナリをインストールしましょう。 このチュートリアルの時点では、最新のものはHadoop 3.0.1
です。
[.note]#Note:これらのダウンロードはミラーサイトを介して配布されることに注意してください。GPGまたはSHA-256を使用して改ざんされていないか最初に確認することをお勧めします。
#
選択したダウンロードに問題がなければ、次のように、選択したバイナリリンクでwget
コマンドを使用できます。
wget http://mirror.cc.columbia.edu/pub/software/apache/hadoop/common/hadoop-3.0.1/hadoop-3.0.1.tar.gz
ダウンロードが完了したら、Ubuntuのファイルアーカイブツールであるtar
を使用してファイルの内容を解凍します。
tar xvzf hadoop-3.0.1.tar.gz
これで、初期構成を開始する準備が整いました。
[[step-2 -—- update-hadoop-environment-configuration]] ==ステップ2—Hadoop環境構成を更新する
ドロップレットノードごとに、JAVA_HOME
を設定する必要があります。 nanoまたは選択した別のテキストエディターで次のファイルを開き、更新できるようにします。
nano ~/my-hadoop-install/hadoop-3.0.1/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!
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
# Location of Hadoop. By default, Hadoop will attempt to determine
# this location based upon its execution path.
# export HADOOP_HOME=
...
また、Hadoopとそのモジュールを実行するためにいくつかの環境変数を追加する必要があります。 これらはファイルの最後に追加して、次のようにする必要があります。ここで、sammy
はsudoの非rootユーザーのユーザー名になります。
[.note]#Note:クラスタードロップレット全体で異なるユーザー名を使用している場合、特定のドロップレットごとに正しいユーザー名を反映するために、このファイルを編集する必要があります。
#
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="sammy"
export HDFS_DATANODE_USER="sammy"
export HDFS_SECONDARYNAMENODE_USER="sammy"
export YARN_RESOURCEMANAGER_USER="sammy"
export YARN_NODEMANAGER_USER="sammy"
この時点で、ファイルを保存して終了できます。 次に、次のコマンドを実行してエクスポートを適用します。
source ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/hadoop-env.sh
hadoop-env.sh
スクリプトが更新され、ソースが設定されたら、Hadoop分散ファイルシステム(HDFS)のデータディレクトリを作成して、関連するすべてのHDFS
ファイルを保存する必要があります。
sudo mkdir -p /usr/local/hadoop/hdfs/data
このファイルのパーミッションをそれぞれのユーザーに設定します。 各ドロップレットで異なるユーザー名を使用している場合は、それぞれのsudoユーザーにこれらの権限を許可してください。
sudo chown -R sammy:sammy /usr/local/hadoop/hdfs/data
DigitalOceanスナップショットを使用してこれらのコマンドをドロップレットノード全体に複製する場合は、ここでスナップショットを作成し、このイメージから新しいドロップレットを作成できます。 これに関するガイダンスについては、An Introduction to DigitalOcean Snapshotsを読むことができます。
all fourのUbuntuドロップレット全体で上記の手順を完了したら、ノード間でこの構成を完了することに進むことができます。
[[step-3 -—- complete-initial-configuration-for-each-node]] ==ステップ3—各ノードの完全な初期構成
この時点で、Dropletノードのall 4のcore_site.xml
ファイルを更新する必要があります。 個々のドロップレット内で、次のファイルを開きます。
nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/core-site.xml
次の行が表示されます。
core-site.xml
...
次のXMLのようにファイルを変更して、server-ip
が書き込まれているプロパティ値の中にeach Droplet’s respective IPを含めます。 ファイアウォールを使用している場合は、ポート9000を開く必要があります。
core-site.xml
...
fs.defaultFS
hdfs://server-ip:9000
サーバーのall fourについて、関連するドロップレットIPで上記の書き込みを繰り返します。
これで、サーバーノードごとに一般的なHadoop設定がすべて更新され、SSHキーを介してノードの接続を続行できます。
[[step-4 -—- set-up-ssh-for-each-node]] ==ステップ4—ノードごとにSSHを設定する
Hadoopが正しく機能するためには、マスターノードとワーカーノードの間にパスワードなしのSSHを設定する必要があります(master
とworker
の言語は、primary
とを参照するHadoopの言語です。 secondary
サーバー)。
このチュートリアルでは、マスターノードは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
次に、各ワーカーノードのDropletにログインし、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 hadoop-master-server-ip
HostName hadoop-example-node-server-ip
User sammy
IdentityFile ~/.ssh/id_rsa
Host hadoop-worker-01-server-ip
HostName hadoop-worker-01-server-ip
User sammy
IdentityFile ~/.ssh/id_rsa
Host hadoop-worker-02-server-ip
HostName hadoop-worker-02-server-ip
User sammy
IdentityFile ~/.ssh/id_rsa
Host hadoop-worker-03-server-ip
HostName hadoop-worker-03-server-ip
User sammy
IdentityFile ~/.ssh/id_rsa
ファイルを保存して閉じます。
hadoop-master
から、各ノードにSSHで接続します。
現在のシステムがセットアップされた状態で各ノードにログインするのは初めてなので、次のことを尋ねられます。
Outputare you sure you want to continue connecting (yes/no)?
プロンプトにyes
で応答します。 これは実行する必要がある唯一の時間ですが、初期SSH接続の各ワーカーノードで必要です。 最後に、各ワーカーノードからログアウトして、hadoop-master
に戻ります。
logout
残りの2つのワーカーノードは必ずrepeat these stepsにしてください。
ワーカーノードごとにパスワードなしのSSHが正常にセットアップされたので、マスターノードの構成を続行できます。
[[step-5 -—- configure-the-master-node]] ==ステップ5—マスターノードを構成します
Hadoopクラスターの場合、マスターノードドロップレットでHDFSプロパティを構成する必要があります。
マスターノードで、次のファイルを編集します。
nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/hdfs-site.xml
configuration
セクションを編集して、以下のXMLのようにします。
hdfs-site.xml
...
dfs.replication
3
dfs.namenode.name.dir
file:///usr/local/hadoop/hdfs/data
ファイルを保存して閉じます。
次に、マスターノードでMapReduce
プロパティを構成します。 nanoまたは別のテキストエディタでmapred.site.xml
を開きます。
nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/mapred-site.xml
次に、現在のサーバーのIPアドレスが下に反映された状態で、このようにファイルを更新します。
mapred-site.xml
...
mapreduce.jobtracker.address
hadoop-master-server-ip:54311
mapreduce.framework.name
yarn
ファイルを保存して閉じます。 ファイアウォールを使用している場合は、必ずポート54311を開いてください。
次に、マスターノードでYARNをセットアップします。 繰り返しますが、別のXMLファイルの構成セクションを更新しているので、ファイルを開きましょう。
nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/yarn-site.xml
次に、現在のサーバーのIPアドレスを入力して、ファイルを更新します。
yarn-site.xml
...
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.nodemanager.aux-services.mapreduce.shuffle.class
org.apache.hadoop.mapred.ShuffleHandler
yarn.resourcemanager.hostname
hadoop-master-server-ip
最後に、Hadoopの参照ノードを設定して、マスターノードとワーカーノードを設定します。 まず、masters
ファイルを開きます。
nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/masters
このファイルに、現在のサーバーのIPアドレスを追加します。
マスターズ
hadoop-master-server-ip
ここで、workers
ファイルを開いて編集します。
nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/workers
ここでは、localhost
と表示されている場所の下に、各ワーカーノードのIPアドレスを追加します。
労働者
localhost
hadoop-worker-01-server-ip
hadoop-worker-02-server-ip
hadoop-worker-03-server-ip
MapReduce
およびYARN
プロパティの構成が完了したら、ワーカーノードの構成を完了できます。
[[step-6 -—- configure-the-worker-nodes]] ==ステップ6—ワーカーノードを構成します
ここで、ワーカーノードがHDFSのデータディレクトリへの正しい参照を持つようにワーカーノードを構成します。
each worker nodeで、次のXMLファイルを編集します。
nano ~/my-hadoop-install/hadoop-3.0.1/etc/hadoop/hdfs-site.xml
構成セクションを次のものに置き換えます。
hdfs-site.xml
dfs.replication
3
dfs.datanode.data.dir
file:///usr/local/hadoop/hdfs/data
ファイルを保存して閉じます。 この手順は、ワーカーノードのall threeに必ず複製してください。
この時点で、ワーカーノードドロップレットはHDFSのデータディレクトリを指しているため、Hadoopクラスターを実行できます。
[[step-7 --- run-the-hadoop-cluster]] ==ステップ7—Hadoopクラスターを実行します
Hadoopクラスターを開始できるようになりました。 起動する前に、マスターノードでHDFSをフォーマットする必要があります。 マスターノードドロップレットで、Hadoopがインストールされているディレクトリに移動します。
cd ~/my-hadoop-install/hadoop-3.0.1/
次に、次のコマンドを実行して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 [hadoop-master-server-ip]
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://hadoop-master-server-ip:9870
ファイアウォールがある場合は、必ずポート9870を開いてください。 次のようなものが表示されます。
ここから、メニューバーのDatanodes
項目に移動して、ノードのアクティビティを確認できます。
結論
このチュートリアルでは、DigitalOcean Ubuntu 16.04 Dropletsを使用して、Hadoopマルチノードクラスターをセットアップおよび構成する方法について説明しました。 また、HadoopのDFSヘルスウェブインターフェースを使用して、クラスターのヘルスを監視および確認できるようになりました。
新しく構成されたクラスターを利用するために取り組むことができる可能性のあるプロジェクトのアイデアを得るには、Apacheのプロジェクトpowered by Hadoopの長いリストを確認してください。