DigitalOceanドロップレットでHadoopクラスターをスピンアップする方法

前書き

このチュートリアルでは、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 4core_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を設定する必要があります(masterworkerの言語は、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で接続します。

ssh sammy@hadoop-worker-01-server-ip

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

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コマンドを実行すると、NodeManagerSecondaryNameNodeJpsNameNodeResourceManager、およびDataNodeが表示されます。が実行されています。 次の出力のようなものが表示されます。

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

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

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

http://hadoop-master-server-ip:9870

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

Hadoop Health Verification

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

結論

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

新しく構成されたクラスターを利用するために取り組むことができる可能性のあるプロジェクトのアイデアを得るには、Apacheのプロジェクトpowered by Hadoopの長いリストを確認してください。

Related