Hadoopは、Apache Foundationによって開発された、オープンソースの分散型Javaベースのソフトウェアフレームワークです。 Hadoopを使用すると、ユーザーは分散プログラムを開発し、分散システムの基本的な詳細を理解する必要なく、高速コンピューティングとストレージのためにクラスター容量を最大限に活用できます。 このトピックでは、Linuxオペレーティングシステムを実行するElastic Compute Service (ECS) インスタンス上にHadoop分散環境を構築する方法について説明します。
前提条件
次の要件を満たすECSインスタンスが作成されます。
ECSインスタンスは、システムに割り当てられたパブリックIPアドレスまたはelastic IPアドレス (EIP) に関連付けられています。
ECSインスタンスはLinuxオペレーティングシステムを実行します。
インバウンドルールは、開いているポート22、443、8088、および9870にECSインスタンスが属するセキュリティグループに追加されます。 ポート8088は、Hadoop Yet Another Resource Negotiator (YARN) のデフォルトのweb UIポートです。 ポート9870は、Hadoop NameNodeのデフォルトのweb UIポートです。 インバウンドセキュリティグループルールを追加する方法の詳細については、「セキュリティグループルールの追加」をご参照ください。
背景情報
Apache Hadoopソフトウェアライブラリは、単純なプログラミングモデルを使用して、コンピューターのクラスター全体で大規模なデータセットを分散して処理できるフレームワークです。 フレームワークは、単一のサーバーから、ローカル計算およびストレージ機能を提供する数千台のマシンにスケールアップできます。 Hadoopは、高可用性を提供するためにハードウェアに依存しません。 アプリケーション層で障害を検出して処理し、障害が発生しやすいコンピューターのクラスターの上に高可用性サービスを提供するように設計されています。
Hadoop分散ファイルシステム (HDFS) とMapReduceは、Hadoopの重要なコンポーネントです。
HDFSは、アプリケーションデータの分散ストレージに使用され、アプリケーションデータへのアクセスを提供する分散ファイルシステムです。
MapReduceは、Hadoopクラスター内のサーバー間でコンピューティングジョブを分散する分散コンピューティングフレームワークです。 コンピューティングジョブは、マップタスクと削減タスクに分割されます。 JobTrackerは、分散処理のタスクをスケジュールします。
詳細については、Apache Hadoop Webサイトをご覧ください。
HadoopはJava Development Kit (JDK) と統合されています。 Hadoopバージョンが異なれば、異なるJDKバージョンに対応する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.2.4とJava 8を使用します。 他のHadoopおよびJavaバージョンを使用するには、Hadoopの公式Webサイトにアクセスしてください。 詳細については、「Hadoop Javaバージョン」をご参照ください。
ステップ1: JDKのインストール
ECS インスタンスに接続します。
詳細については、「パスワードまたはキーを使用したLinuxインスタンスへの接続」をご参照ください。
次のコマンドを実行して、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: 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がインストールされていることを示します。
ステップ3: Hadoopの設定
Hadoopの
core-site.xml
設定ファイルを変更します。次のコマンドを実行して、core-site.xml設定ファイルを開きます。
sudo vim /opt/hadoop/etc/hadoop/core-site.xml
I
キーを押して挿入モードに入ります。<configuration></configuration>
セクションで、次の内容を追加します。<property> <name>hadoop.tmp.dir</name> <value>file:/opt/hadoop/tmp</value> <description>location to store temporary files</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property>
Esc
キーを押して挿入モードを終了し、:wq
と入力してファイルを保存して閉じます。
Hadoopの
hdfs-site.xml
設定ファイルを変更します。次のコマンドを実行して、hdfs-site.xml設定ファイルを開きます。
sudo vim /opt/hadoop/etc/hadoop/hdfs-site.xml
I
キーを押して挿入モードに入ります。<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>
Esc
キーを押して挿入モードを終了し、:wq
と入力してファイルを保存して閉じます。
ステップ4: パスワードなしのSSHログインを設定する
次のコマンドを実行して、公開鍵と秘密鍵のペアを作成します。
ssh-keygen -t rsa
次のコマンド出力は、公開鍵と秘密鍵が作成されたことを示します。
次のコマンドを実行して、公開鍵を
authorized_keys
ファイルに追加します。cd .ssh cat id_rsa.pub >> authorized_keys
ステップ5: Hadoopを起動する
次のコマンドを実行して
NameNode
を初期化します。hadoop namenode -format
Hadoopを起動します。
重要システムのセキュリティと安定性を確保するため、ApacheはHadoopをrootユーザーとして起動することを推奨しません。 権限の問題により、Hadoopをルートユーザーとして起動できない場合があります。 Hadoopは、
ecs-user
などの非rootユーザーとして起動できます。Hadoopをrootユーザーとして起動する場合は、Hadoop権限と関連するリスクを管理する手順に精通している必要があります。また、以下の設定ファイルを変更する必要があります。
Hadoopをrootユーザーとして起動すると、深刻なセキュリティリスクが発生する可能性があることに注意してください。 セキュリティリスクには、データリーク、最も高いシステム権限を取得するためにマルウェアによって悪用される可能性のある脆弱性、予期しない権限の問題や操作が含まれますが、これらに限定されません。 Hadoop権限の詳細については、「セキュアモードのHadoop」をご参照ください。
次のコマンドを実行して、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
次の図に示すプロセスが開始されます。
YARNのweb UIにアクセスするには、コンピューターのwebブラウザーのアドレスバーに
http:// <ECSインスタンスのパブリックIPアドレス>:8088
と入力します。web UIには、リソースの使用状況、アプリケーションのステータス (MapReduceジョブなど) 、キュー情報など、クラスター全体に関する情報が表示されます。
重要オープンポート8088にECSインスタンスが属するセキュリティグループにインバウンドルールが追加されていることを確認します。 それ以外の場合は、web UIにアクセスできません。 詳細については、「セキュリティグループルールの追加」をご参照ください。
NameNodeのweb UIにアクセスするには、コンピューターのwebブラウザーのアドレスバーに
http:// <ECSインスタンスのパブリックIPアドレス>:9870
と入力します。web UIには、ファイルシステムのステータス、クラスターの正常性、アクティブノード、NameNodeログなど、HDFSファイルシステムに関する情報が表示されます。
次の図に示すページは、分散Hadoop環境が構築されていることを示しています。
重要オープンポート9870にECSインスタンスが属するセキュリティグループにインバウンドルールが追加されていることを確認します。 それ以外の場合は、web UIにアクセスできません。 インバウンドセキュリティグループルールを追加する方法の詳細については、「セキュリティグループルールの追加」をご参照ください。