Elastic Compute Service (ECS) Linux インスタンス上に分散型または疑似分散型の Hadoop クラスターをデプロイし、ビッグデータの保存と処理を行います。
背景情報
Apache Hadoop は、コンピュータークラスター全体で大規模なデータセットを分散処理するためのフレームワークです。単一のサーバーから数千台のマシンまで拡張でき、各マシンはローカルでの計算とストレージを提供します。Hadoop はアプリケーションレイヤーで障害を検出し処理するため、ハードウェアの冗長性に頼ることなく高可用性を実現します。
Hadoop のコアコンポーネントは、Hadoop 分散ファイルシステム (HDFS) と MapReduce です。
-
HDFS:アプリケーションデータを保存し読み取るための分散ファイルシステムです。
-
MapReduce:タスクを Map と Reduce のフェーズに分割し、YARN (Yet Another Resource Negotiator) 上で実行される分散コンピューティングフレームワークです。
|
機能 |
疑似分散モード |
完全分散モード |
|
ノード数 |
単一ノード。すべてのサービスが 1 台のマシンで実行されます。 |
複数ノード。サービスは複数のマシンに分散されます。 |
|
リソース使用率 |
単一マシンのリソースを使用します。 |
複数のマシンのコンピューティングリソースとストレージリソースを活用します。 |
|
耐障害性 |
低。単一障害点によりクラスター全体が利用できなくなります。 |
高。データレプリケーションと高可用性設定をサポートします。 |
|
シナリオ |
|
|
クイックデプロイ
今すぐ実行 をクリックして Terraform Explorer を開き、Terraform コードを表示および実行して、ECS インスタンス上に Hadoop 環境を自動的に構築します。
前提条件
ECS インスタンスは、次の要件を満たす必要があります。
|
環境 |
要件 |
|
|
インスタンス |
疑似分散 |
インスタンス 1 台 |
|
分散 |
インスタンス 3 台以上 説明
インスタンスを [高可用性] 戦略を使用するデプロイメントセットに追加して、可用性を向上させ、クラスター管理を簡素化します。 |
|
|
オペレーティングシステム |
Linux |
|
|
パブリック IP アドレス |
インスタンスにはパブリック IP アドレスが割り当てられているか、Elastic IP アドレス (EIP) が関連付けられています。 |
|
|
インスタンスのセキュリティグループ |
ポート 22、443、8088 (Hadoop YARN Web UI)、および 9870 (Hadoop NameNode Web UI) でのインバウンドトラフィックを許可してください。 説明
分散デプロイメントの場合は、ポート 9868 (Hadoop Secondary NameNode Web UI) でのトラフィックも許可してください。 詳細については、「セキュリティグループルールの管理」をご参照ください。 |
|
|
Java 開発キット (JDK) このトピックでは、Hadoop 3.2.4 と Java 8 を使用します。他のバージョンについては、「Hadoop Java Versions」をご参照ください。 |
Hadoop バージョン |
Java バージョン |
|
Hadoop 3.3 |
Java 8 と Java 11 |
|
|
Hadoop 3.0.x~3.2.x |
Java 8 |
|
|
Hadoop 2.7.x~2.10.x |
Java 7 と Java 8 |
|
操作手順
分散
Hadoop をデプロイする前にノードを計画します。この例では 3 台のインスタンスを使用します。hadoop001 はマスターノード、hadoop002 と hadoop003 はワーカーノードです。
|
機能コンポーネント |
hadoop001 |
hadoop002 |
hadoop003 |
|
HDFS |
|
DataNode |
|
|
YARN |
NodeManager |
|
NodeManager |
ステップ 1:JDK のインストール
すべてのノードに JDK をインストールしてください。
-
通常のユーザーとして ECS インスタンスに接続します。
詳細については、「ワークベンチを使用して Linux インスタンスに接続する」をご参照ください。
重要Hadoop コミュニティでは、セキュリティと権限の問題から、root ユーザーとして Hadoop を実行することは推奨されていません。
ecs-userなどの非 root ユーザーを使用してください。 -
JDK 1.8 のインストールパッケージをダウンロードします。
wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -
JDK 1.8 のインストールパッケージを解凍します。
tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -
JDK のインストールフォルダーを移動して名前を変更します。
この例では、JDK のインストールフォルダーを
java8に変更します。別の名前を使用することもできます。sudo mv java-se-8u41-ri/ /usr/java8 -
Java の環境変数を設定します。
JDK のインストールフォルダーの名前を変更した場合は、次のコマンドの
java8を実際の名前で置き換えてください。sudo sh -c "echo 'export JAVA_HOME=/usr/java8' >> /etc/profile" sudo sh -c 'echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile' source /etc/profile -
JDK がインストールされていることを確認します。
java -version次の出力は、インストールが成功したことを示します。

ステップ 2:パスワードなしの SSH ログインの設定
この操作をすべてのインスタンスで実行してください。
パスワードなしの SSH ログインを設定すると、ノードはパスワード認証なしで接続できるようになり、クラスター管理が簡素化されます。
-
ホスト名とホスト名の名前解決を設定します。
sudo vim /etc/hostsすべてのインスタンスの
<プライマリプライベート IP アドレス> <ホスト名>情報を/etc/hostsファイルに追加します。例:<プライマリプライベート IP アドレス> hadoop001 <プライマリプライベート IP アドレス> hadoop002 <プライマリプライベート IP アドレス> hadoop003 -
公開鍵と秘密鍵を作成します。
ssh-keygen -t rsa
-
ssh-copy-id <ホスト名>を実行し、ホスト名を正しい名前に置き換えてください。例:hadoop001で、ssh-copy-id hadoop001、ssh-copy-id hadoop002、およびssh-copy-id hadoop003を実行します。各コマンドの後、yes と対応するインスタンスのパスワードを入力してください。ssh-copy-id hadoop001 ssh-copy-id hadoop002 ssh-copy-id hadoop003出力が次のようになると、パスワードなしのログインが設定されます。

ステップ 3:Hadoop のインストール
すべてのインスタンスで次のコマンドを実行してください。
-
Hadoop のインストールパッケージをダウンロードします。
wget http://mirrors.cloud.aliyuncs.com/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz -
Hadoop のインストールパッケージを
/opt/hadoopに解凍します。sudo tar -zxvf hadoop-3.2.4.tar.gz -C /opt/ sudo mv /opt/hadoop-3.2.4 /opt/hadoop -
Hadoop の環境変数を設定します。
sudo sh -c "echo 'export HADOOP_HOME=/opt/hadoop' >> /etc/profile" sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/bin' >> /etc/profile" sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/sbin' >> /etc/profile" source /etc/profile -
yarn-env.shとhadoop-env.shの設定ファイルを変更します。sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/yarn-env.sh' sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/hadoop-env.sh' -
Hadoop がインストールされていることを確認します。
hadoop version次の出力は、インストールが成功したことを示します。

ステップ 4:Hadoop の設定
すべてのノードで Hadoop の設定ファイルを変更してください。
-
Hadoop 設定ファイル
core-site.xmlを変更します。-
ファイルを編集用に開きます。
sudo vim /opt/hadoop/etc/hadoop/core-site.xml -
<configuration></configuration>ノードに次の内容を挿入します。<!--NameNode アドレスを指定します--> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop001:8020</value> </property> <!--Hadoop が生成するファイルを格納するディレクトリを指定します--> <property> <name>hadoop.tmp.dir</name> <value>/opt/hadoop/data</value> </property> <!--HDFS Web ログインの静的ユーザーを hadoop として設定します--> <property> <name>hadoop.http.staticuser.user</name> <value>hadoop</value> </property>
-
-
Hadoop 設定ファイル
hdfs-site.xmlを変更します。-
ファイルを編集用に開きます。
sudo vim /opt/hadoop/etc/hadoop/hdfs-site.xml -
<configuration></configuration>ノードに次の内容を挿入します。<!-- NameNode の Web エンドポイント --> <property> <name>dfs.namenode.http-address</name> <value>hadoop001:9870</value> </property> <!-- Secondary NameNode の Web エンドポイント --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop003:9868</value> </property>
-
-
Hadoop 設定ファイル
yarn-site.xmlを変更します。-
ファイルを編集用に開きます。
sudo vim /opt/hadoop/etc/hadoop/yarn-site.xml -
<configuration></configuration>ノードに次の内容を挿入します。<!--NodeManager がデータを取得する方法はシャッフルです--> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--YARN (ResourceManager) のアドレスを指定します--> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop002</value> </property> <!--NodeManager がコンテナに渡すことができる環境変数のホワイトリストを指定します--> <property> <name>yarn.nodemanager.env-whitelist</name> <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value> </property>
-
-
Hadoop 設定ファイル
mapred-site.xmlを変更します。-
ファイルを編集用に開きます。
sudo vim /opt/hadoop/etc/hadoop/mapred-site.xml -
<configuration></configuration>ノードに次の内容を挿入します。<!--Hadoop に、YARN 上で MapReduce (MR) を実行するように指示します--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
-
-
Hadoop 設定ファイル
workersを変更します。-
ファイルを編集用に開きます。
sudo vim /opt/hadoop/etc/hadoop/workers -
workersファイルにインスタンス情報を挿入します。hadoop001 hadoop002 hadoop003
-
ステップ 5:Hadoop の起動
-
namenodeをフォーマットします。警告最初の起動時にのみ、マスターノード (
hadoop001) でnamenodeをフォーマットします。hadoop namenode -format -
Hadoop を起動します。
重要-
Hadoop コミュニティでは、セキュリティと権限の問題から、root ユーザーとして Hadoop を実行することは推奨されていません。
ecs-userなどの非 root ユーザーを使用してください。 -
Hadoop を root で実行する必要がある場合は、次の設定ファイルを変更する前に、アクセス制御モデルと関連するリスクを理解してください。
注:Hadoop を root として実行すると、データ漏洩、root 権限を取得できるマルウェアに対する脆弱性の増加、予期せぬ権限の問題など、深刻なセキュリティリスクが生じます。詳細については、「Hadoop 公式ドキュメント」をご参照ください。
-
hadoop001で、start-dfs.shを実行して HDFS サービスを起動します。このスクリプトは、NameNode、SecondaryNameNode、および DataNode を起動します。
start-dfs.shjpsの出力が次のようになると、HDFS が実行されています。
-
hadoop002で、start-yarn.shを実行して YARN サービスを起動します。このスクリプトは、ResourceManager と NodeManager を起動します。
start-yarn.sh出力が次のようになると、YARN が実行されています。

-
-
3 つすべてのノードで起動したプロセスを表示します。
jps起動したプロセスは次のとおりです。

-
ブラウザで
http://<hadoop002 ECS インスタンスのパブリック IP アドレス>:8088と入力して、YARN の Web UI にアクセスします。クラスターのリソース使用状況、MapReduce ジョブの状態、キュー情報を表示できます。
重要セキュリティグループでポート 8088 のインバウンドトラフィックを許可してください。そうしないと、Web UI にアクセスできません。詳細については、「セキュリティグループルールの追加」をご参照ください。

-
ブラウザで
http://<hadoop001 ECS インスタンスのパブリック IP アドレス>:9870と入力して NameNode の Web UI にアクセスし、http://<hadoop003 ECS インスタンスのパブリック IP アドレス>:9868と入力して SecondaryNameNode の Web UI にアクセスします。HDFS の状態、クラスターのヘルス状態、アクティブなノード、NameNode のログを表示できます。
次のページは、分散環境が構築されたことを示します。
重要セキュリティグループでポート 9870 のインバウンドトラフィックを許可してください。そうしないと、Web UI にアクセスできません。詳細については、「セキュリティグループルールの追加」をご参照ください。

疑似分散
ステップ 1:JDK のインストール
-
通常のユーザーとして ECS インスタンスに接続します。
詳細については、「ワークベンチを使用して Linux インスタンスに接続する」をご参照ください。
重要Hadoop コミュニティでは、セキュリティと権限の問題から、root ユーザーとして Hadoop を実行することは推奨されていません。
ecs-userなどの非 root ユーザーを使用してください。 -
JDK 1.8 のインストールパッケージをダウンロードします。
wget https://download.java.net/openjdk/jdk8u41/ri/openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -
JDK 1.8 のインストールパッケージを解凍します。
tar -zxvf openjdk-8u41-b04-linux-x64-14_jan_2020.tar.gz -
JDK のインストールフォルダーを移動して名前を変更します。
この例では、JDK のインストールフォルダーを
java8に変更します。別の名前を使用することもできます。sudo mv java-se-8u41-ri/ /usr/java8 -
Java の環境変数を設定します。
JDK のインストールフォルダーの名前を変更した場合は、次のコマンドの
java8を実際の名前で置き換えてください。sudo sh -c "echo 'export JAVA_HOME=/usr/java8' >> /etc/profile" sudo sh -c 'echo "export PATH=\$PATH:\$JAVA_HOME/bin" >> /etc/profile' source /etc/profile -
JDK がインストールされていることを確認します。
java -version次の出力は、インストールが成功したことを示します。

ステップ 2:パスワードなしの SSH ログインの設定
単一ノードでもパスワードなしの SSH ログインが必要です。そうしないと、NameNode と DataNode の起動が権限拒否エラーで失敗します。
-
公開鍵と秘密鍵を作成します。
ssh-keygen -t rsa
-
公開鍵を
authorized_keysファイルに追加します。cd .ssh cat id_rsa.pub >> authorized_keys
ステップ 3:Hadoop のインストール
-
Hadoop のインストールパッケージをダウンロードします。
wget http://mirrors.cloud.aliyuncs.com/apache/hadoop/common/hadoop-3.2.4/hadoop-3.2.4.tar.gz -
Hadoop のインストールパッケージを
/opt/hadoopに解凍します。sudo tar -zxvf hadoop-3.2.4.tar.gz -C /opt/ sudo mv /opt/hadoop-3.2.4 /opt/hadoop -
Hadoop の環境変数を設定します。
sudo sh -c "echo 'export HADOOP_HOME=/opt/hadoop' >> /etc/profile" sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/bin' >> /etc/profile" sudo sh -c "echo 'export PATH=\$PATH:/opt/hadoop/sbin' >> /etc/profile" source /etc/profile -
yarn-env.shとhadoop-env.shの設定ファイルを変更します。sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/yarn-env.sh' sudo sh -c 'echo "export JAVA_HOME=/usr/java8" >> /opt/hadoop/etc/hadoop/hadoop-env.sh' -
Hadoop がインストールされていることを確認します。
hadoop version次の出力は、インストールが成功したことを示します。

ステップ 4:Hadoop の設定
-
Hadoop 設定ファイル
core-site.xmlを変更します。-
ファイルを編集用に開きます。
sudo vim /opt/hadoop/etc/hadoop/core-site.xml -
<configuration></configuration>ノードに次の内容を挿入します。<property> <name>hadoop.tmp.dir</name> <value>file:/opt/hadoop/tmp</value> <description>一時ファイルを保存する場所</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property>
-
-
Hadoop 設定ファイル
hdfs-site.xmlを変更します。-
ファイルを編集用に開きます。
sudo vim /opt/hadoop/etc/hadoop/hdfs-site.xml -
<configuration></configuration>ノードに次の内容を挿入します。<property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/opt/hadoop/tmp/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/opt/hadoop/tmp/dfs/data</value> </property>
-
ステップ 5:Hadoop の起動
-
namenodeをフォーマットします。hadoop namenode -format -
Hadoop を起動します。
重要-
Hadoop コミュニティでは、セキュリティと権限の問題から、root ユーザーとして Hadoop を実行することは推奨されていません。
ecs-userなどの非 root ユーザーを使用してください。 -
Hadoop を root で実行する必要がある場合は、次の設定ファイルを変更する前に、アクセス制御モデルと関連するリスクを理解してください。
注:Hadoop を root として実行すると、データ漏洩、root 権限を取得できるマルウェアに対する脆弱性の増加、予期せぬ権限の問題など、深刻なセキュリティリスクが生じます。詳細については、「Hadoop 公式ドキュメント」をご参照ください。
-
HDFS サービスを起動します。
このスクリプトは、NameNode、SecondaryNameNode、および DataNode を起動します。
start-dfs.sh出力が次のようになると、HDFS が実行されています。

-
YARN サービスを起動します。
このスクリプトは、ResourceManager、NodeManager、および ApplicationHistoryServer を起動します。
start-yarn.sh出力が次のようになると、YARN が実行されています。

-
-
起動したプロセスを表示します。
jps起動したプロセスは次のとおりです。

-
ブラウザで
http://<ECS インスタンスのパブリック IP アドレス>:8088と入力して、YARN の Web UI にアクセスします。クラスターのリソース使用状況、MapReduce ジョブの状態、キュー情報を表示できます。
重要セキュリティグループでポート 8088 のインバウンドトラフィックを許可してください。そうしないと、Web UI にアクセスできません。詳細については、「セキュリティグループルールの追加」をご参照ください。

-
ブラウザで
http://<ECS インスタンスのパブリック IP アドレス>:9870と入力して、NameNode の Web UI にアクセスします。HDFS の状態、クラスターのヘルス状態、アクティブなノード、NameNode のログを表示できます。
次のページは、疑似分散環境が構築されたことを示します。
重要セキュリティグループでポート 9870 のインバウンドトラフィックを許可してください。そうしないと、Web UI にアクセスできません。詳細については、「セキュリティグループルールの追加」をご参照ください。

関連操作
スナップショット整合性グループの作成
分散 Hadoop の場合、スナップショット整合性グループを使用して、クラスター全体でデータの一貫性を確保します。詳細については、「スナップショット整合性グループの作成」をご参照ください。
Hadoop 関連の操作
HDFS の操作については、「一般的な HDFS コマンド」をご参照ください。
関連ドキュメント
-
ECS 上で Alibaba Cloud の統合ビッグデータ環境を使用するには、「Data Lake Analytics クラスターのクイック作成と使用」をご参照ください。
-
データレイク開発およびガバナンス環境を使用するには、「高度な設定:注文データからベストセラー商品カテゴリを分析する」をご参照ください。

