Hadoop は、Apache Foundation によって開発されたオープンソースの分散 Java ベースソフトウェアフレームワークです。このトピックでは、Linux Elastic Compute Service (ECS) インスタンスに分散 Hadoop 環境と擬似分散 Hadoop 環境を迅速に構築する方法について説明します。
背景情報
Apache Hadoop ソフトウェアライブラリは、シンプルなプログラミングモデルを使用して、コンピュータのクラスタ全体で大規模なデータセットを分散処理できるようにするフレームワークです。このフレームワークは、単一サーバーから数千台のコンピュータまで拡張でき、ローカルコンピューティングとストレージ機能を提供します。Hadoop は、高可用性を実現するためにハードウェアに依存しません。アプリケーション層で障害を検出して処理し、障害が発生しやすいコンピュータのクラスタ上で高可用性サービスを提供するように設計されています。
Hadoop 分散ファイルシステム (HDFS) と MapReduce は、Hadoop の重要なコンポーネントです。
HDFS は、アプリケーションデータの分散ストレージに使用される分散ファイルシステムであり、アプリケーションデータへのアクセスを提供します。
MapReduce は、Hadoop クラスタ内のサーバー間でコンピューティングジョブを分散する分散コンピューティングフレームワークです。コンピューティングジョブは、マップタスクとリデュースタスクに分割されます。JobTracker は、分散処理のためにタスクをスケジュールします。
項目 | 擬似分散モード | 分散モード |
ノード数 | シングルノード。単一ノードがすべてのサービスをホストします。 | 複数ノード。サービスは複数のノードに分散されます。 |
リソース使用率 | 1 台のマシンのリソースを使用します。 | 複数マシンのコンピューティングリソースとストレージリソースを利用します。 |
フォールトトレランス | 低。単一障害点により、クラスタが使用できなくなります。 | 高。データレプリケーションと高可用性構成がサポートされています。 |
シナリオ |
|
|
前提条件
次の表に示す要件を満たす ECS インスタンスが作成されます。
環境 | 要件 | |
インスタンス | 擬似分散モード | 1 つのインスタンス |
分散モード | 3 つ以上のインスタンス 説明 可用性、ディザスタリカバリ、Hadoop クラスタ管理を向上させるために、[高可用性] 戦略を使用するデプロイメントセットにインスタンスを追加することをお勧めします。 | |
オペレーティングシステム | Linux | |
パブリック IP アドレス | 各 ECS インスタンスには、システムによってパブリック IP アドレスが割り当てられるか、Elastic IP アドレス (EIP) が関連付けられます。 | |
インスタンスセキュリティグループ | ポート 22、443、8088、9870 を開くために、ECS インスタンスに関連付けられたセキュリティグループにインバウンドルールが追加されます。ポート 8088 は、Hadoop Yet Another Resource Negotiator (YARN) のデフォルトの Web UI ポートです。ポート 9870 は、Hadoop NameNode のデフォルトの Web UI ポートです。 説明 分散 Hadoop 環境をデプロイする場合は、Hadoop Secondary NameNode カスタム Web UI ポートであるポート 9868 も開く必要があります。 詳細については、「セキュリティグループルールの管理」をご参照ください。 | |
Java 開発キット (JDK) このトピックでは、Hadoop 3.2.4 と Java 8 が使用されています。他の Hadoop と Java のバージョンを使用するには、Hadoop の公式 Web サイトで手順をご確認ください。詳細については、「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 つのインスタンスを使用して Hadoop をデプロイします。 hadoop001 ノードは master
ノードとして機能し、hadoop002 ノードと hadoop003 ノードは worker
ノードとして機能します。
機能コンポーネント | hadoop001 | hadoop002 | hadoop003 |
HDFS |
| DataNode |
|
YARN | NodeManager |
| NodeManager |
ステップ 1: JDK をインストールする
JDK 環境はすべてのノードにインストールする必要があります。
作成した各 ECS インスタンスに接続します。
詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。
重要システムのセキュリティと安定性を確保するために、Apache は root ユーザーとして Hadoop を起動することをお勧めしません。権限の問題により、root ユーザーとして Hadoop を起動できない場合があります。
ecs-user
などの root 以外のユーザーとして Hadoop を起動できます。次のコマンドを実行して、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 インストールファイルが抽出されるフォルダを移動して名前を変更します。
この例では、フォルダの名前は
java8
に変更されています。ビジネス要件に基づいて、フォルダに別の名前を指定できます。sudo mv java-se-8u41-ri/ /usr/java8
次のコマンドを実行して、Java 環境変数を構成します。
JDK インストールファイルの抽出先フォルダに指定した名前が java8 でない場合は、次のコマンドの
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
次のコマンド出力は、JDK がインストールされていることを示しています。
ステップ 2: パスワードなし SSH ログインを構成する
この手順はすべてのインスタンスで実行します。
パスワードなし SSH ログイン機能を使用すると、ノードは ID を検証するためのパスワードを入力することなく、互いにシームレスに接続できます。これにより、Hadoop クラスタをより便利かつ効率的に管理および保守できます。
ホスト名と通信方法を構成します。
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 と対応する ECS インスタンスのパスワードを入力します。ssh-copy-id hadoop001 ssh-copy-id hadoop002 ssh-copy-id hadoop003
次のコマンド出力が返された場合、パスワードなしログイン構成は成功です。
ステップ 3: Hadoop をインストールする
すべての ECS インスタンスで次のコマンドを実行します。
次のコマンドを実行して、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
次のコマンド出力は、Hadoop がインストールされていることを示しています。
ステップ 4: Hadoop を構成する
すべてのインスタンスで Hadoop の構成ファイルを修正します。
core-site.xml
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>
hdfs-site.xml
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> <!-- セカンダリ NameNode の Web アドレス。--> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop003:9868</value> </property>
yarn-site.xml
Hadoop 構成ファイルを修正します。次のコマンドを実行して、yarn-site 構成ファイルを開きます。
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>
mapred-site.xml
Hadoop 構成ファイルを修正します。次のコマンドを実行して、mapred-site.xml 構成ファイルを開きます。
sudo vim /opt/hadoop/etc/hadoop/mapred-site.xml
<configuration></configuration>
セクションに次のコンテンツを追加します。<!--YARN で Map/Reduce (MR) を実行するように Hadoop に指示します。--> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
workers
Hadoop 構成ファイルを修正します。次のコマンドを実行して、workers 構成ファイルを開きます。
sudo vim /opt/hadoop/etc/hadoop/workers
workers
ファイルにインスタンス情報を追加します。hadoop001 hadoop002 hadoop003
ステップ 5: Hadoop を起動する
次のコマンドを実行して、
NameNode
を初期化します。警告NameNode
の初期化は、最初の Hadoop 起動時にのみ必要です。この手順はすべてのインスタンスで実行します。hadoop namenode -format
Hadoop を起動します。
重要システムのセキュリティと安定性を確保するために、Apache は root ユーザーとして Hadoop を起動することをお勧めしません。権限の問題により、root ユーザーとして Hadoop を起動できない場合があります。
ecs-user
などの root 以外のユーザーとして Hadoop を起動できます。root ユーザーとして Hadoop を起動する場合は、Hadoop 権限の管理手順と関連するリスクをよく理解し、次の構成ファイルを修正する必要があります。
root ユーザーとして Hadoop を起動すると、深刻なセキュリティリスクが発生する可能性があることに注意してください。セキュリティリスクには、データ漏洩、マルウェアによって悪用されて最高のシステム権限を取得される可能性のある脆弱性、予期しない権限の問題や操作などが含まれますが、これらに限定されません。Hadoop 権限の詳細については、「Hadoop in Secure Mode」をご参照ください。
hadoop001
ノードでstart-dfs.sh
コマンドを実行して、HDFS を起動します。start-dfs.sh コマンドは、NameNode、SecondaryNameNode、DataNode などのコンポーネントを起動することにより、HDFS サービスを起動します。
start-dfs.sh
jps
コマンドを実行します。次のコマンド出力は、HDFS が起動されたことを示しています。hadoop002
ノードでstart-yarn.sh
コマンドを実行して、YARN サービスを起動します。start-yarn.sh コマンドは、ResourceManager と NodeManager などのコンポーネントを起動することにより、YARN サービスを起動します。
start-yarn.sh
次のコマンド出力は、YARN が起動されたことを示しています。
次のコマンドを実行して、起動されたプロセスを表示します。
jps
次の図に示すプロセスが起動されます。
オンプレミスコンピュータの Web ブラウザのアドレスバーに
http://<hadoop002 ノードのパブリック IP アドレス>:8088
と入力して、YARN の Web UI にアクセスします。Web UI には、リソース使用量、アプリケーション (MapReduce ジョブなど) のステータス、キュー情報など、クラスタ全体の情報が表示されます。
重要ポート 8088 を開くために、ECS インスタンスが属するセキュリティグループにインバウンドルールが追加されていることを確認してください。そうでない場合、Web UI にアクセスできません。セキュリティグループルールの追加方法については、「セキュリティグループルールの追加」をご参照ください。
オンプレミスコンピュータの Web ブラウザのアドレスバーに
http://<hadoop001 ノードのパブリック IP アドレス>:9870
と入力して、NameNode の Web UI にアクセスします。http://<hadoop003 ノードのパブリック IP アドレス>:9868
と入力して、SecondaryNameNode の Web UI にアクセスします。Web UI には、ファイルシステムのステータス、クラスタのヘルス、アクティブなノード、NameNode ログなど、HDFS ファイルシステムに関する情報が表示されます。
次の図に示すページは、分散 Hadoop 環境が構築されていることを示しています。
重要ポート 9870 を開くために、ECS インスタンスが属するセキュリティグループにインバウンドルールが追加されていることを確認してください。そうでない場合、Web UI にアクセスできません。セキュリティグループルールの追加方法については、「セキュリティグループルールの追加」をご参照ください。
擬似分散モード
ステップ 1: JDK をインストールする
作成した ECS インスタンスに接続します。
詳細については、「Workbench を使用して SSH 経由で Linux インスタンスに接続する」をご参照ください。
重要システムのセキュリティと安定性を確保するために、Apache は root ユーザーとして Hadoop を起動することをお勧めしません。権限の問題により、root ユーザーとして Hadoop を起動できない場合があります。
ecs-user
などの root 以外のユーザーとして Hadoop を起動できます。次のコマンドを実行して、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 インストールファイルが抽出されるフォルダを移動して名前を変更します。
この例では、フォルダの名前は
java8
に変更されています。ビジネス要件に基づいて、フォルダに別の名前を指定できます。sudo mv java-se-8u41-ri/ /usr/java8
次のコマンドを実行して、Java 環境変数を構成します。
JDK インストールファイルの抽出先フォルダに指定した名前が java8 でない場合は、次のコマンドの
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
次のコマンド出力は、JDK がインストールされていることを示しています。
ステップ 2: パスワードなし SSH ログインを構成する
単一ノードの SSH パスワードなしログインを構成する必要があります。そうでない場合、NameNode と DataNode を起動するときに Permission Denied エラーが発生します。
次のコマンドを実行して、公開鍵と秘密鍵を作成します。
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
次のコマンド出力は、Hadoop がインストールされていることを示しています。
ステップ 4: Hadoop を構成する
core-site.xml
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>
hdfs-site.xml
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 を起動します。
重要システムのセキュリティと安定性を確保するために、Apache は root ユーザーとして Hadoop を起動することをお勧めしません。権限の問題により、root ユーザーとして Hadoop を起動できない場合があります。
ecs-user
などの root 以外のユーザーとして Hadoop を起動できます。root ユーザーとして Hadoop を起動する場合は、Hadoop 権限の管理手順と関連するリスクをよく理解し、次の構成ファイルを修正する必要があります。
root ユーザーとして Hadoop を起動すると、深刻なセキュリティリスクが発生する可能性があることに注意してください。セキュリティリスクには、データ漏洩、マルウェアによって悪用されて最高のシステム権限を取得される可能性のある脆弱性、予期しない権限の問題や操作などが含まれますが、これらに限定されません。Hadoop 権限の詳細については、「Hadoop in Secure Mode」をご参照ください。
次のコマンドを実行して HDFS サービスを起動します。
start-dfs.sh コマンドは、NameNode、SecondaryNameNode、DataNode などのコンポーネントを起動することにより、HDFS サービスを起動します。
start-dfs.sh
次のコマンド出力は、HDFS サービスが起動されたことを示しています。
次のコマンドを実行して、YARN サービスを起動します。
start-yarn.sh コマンドは、ResourceManager、NodeManager、ApplicationHistoryServer などのコンポーネントを起動することにより、YARN サービスを起動します。
start-yarn.sh
次のコマンド出力は、YARN が起動されたことを示しています。
次のコマンドを実行して、起動されたプロセスを表示します。
jps
次の図に示すプロセスが起動されます。
オンプレミスコンピュータの Web ブラウザのアドレスバーに
http://<ECS インスタンスのパブリック IP アドレス>:8088
と入力して、YARN の Web UI にアクセスします。Web UI には、リソース使用量、アプリケーション (MapReduce ジョブなど) のステータス、キュー情報など、クラスタ全体の情報が表示されます。
重要ポート 8088 を開くために、ECS インスタンスが属するセキュリティグループにインバウンドルールが追加されていることを確認してください。そうでない場合、Web UI にアクセスできません。セキュリティグループルールの追加方法については、「セキュリティグループルールの追加」をご参照ください。
オンプレミスコンピュータの Web ブラウザのアドレスバーに
http://<ECS インスタンスのパブリック IP アドレス>:9870
と入力して、NameNode の Web UI にアクセスします。Web UI には、ファイルシステムのステータス、クラスタのヘルス、アクティブなノード、NameNode ログなど、HDFS ファイルシステムに関する情報が表示されます。
次の図に示すページは、分散 Hadoop 環境が構築されていることを示しています。
重要ポート 9870 を開くために、ECS インスタンスが属するセキュリティグループにインバウンドルールが追加されていることを確認してください。そうでない場合、Web UI にアクセスできません。セキュリティグループルールの追加方法については、「セキュリティグループルールの追加」をご参照ください。
関連操作
スナップショット整合性グループを作成する
分散 Hadoop を使用する場合は、スナップショット整合性グループを作成して、Hadoop クラスタのデータの整合性と信頼性を確保し、後続のデータ処理と分析のための安定した環境を提供することをお勧めします。詳細については、「スナップショット整合性グループを作成する」をご参照ください。
Hadoop 関連の操作
HDFS コンポーネントの使用方法については、「一般的な HDFS コマンド」をご参照ください。
参考文献
Alibaba Cloud ECS と統合されているビッグデータ環境の使用方法については、「EMR を使い始める」をご参照ください。
データレイク開発およびガバナンス環境の使用方法については、「DataWorks を使い始める」をご参照ください。