Ubuntu18.04上でHadoop3.1.2の環境構築を行う
概要
Ubuntu18.04上でHadoop 3.1.2をインストールして設定を行う
1. Oracle Java 11をUbuntuにインストール
ステップ1: 準備
$ sudo apt update
$ sudo apt upgrade
ステップ2: Java11をUbuntu18.04にインストールする
$ sudo add-apt-repository ppa:linuxuprising/java
$ sudo apt update
java11をインストールする。
$ sudo apt install oracle-java11-installer
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
パッケージ oracle-java11-installer は使用できませんが、別のパッケージから参照されます。
これは、パッケージが欠落しているか、廃止されたか、または別のソース
からのみ利用可能であることを意味します。
しかし、以下のパッケージが置き換えます:
oracle-java11-installer-local
E: パッケージ 'oracle-java11-installer' にはインストール候補がありません
エラーが出ているが、oracle-java11-installer-local
はあるっぽいのでそちらをインストールすることにする。ただし、oracle-java11-installer-local
をインストールするためにはOracle Java 11 .tar.gz
を/var/cache/oracle-jdk11-installer-local/
に置いておく必要があるので注意。ダウンロードはココの公式HPから行う。なお、ダウンロードにはユーザー登録が必要なはず。ここではjdk-11.0.3_linux-x64_bin.tar.gz
をダウンロードしてきた。
$ sudo mkdir -p /var/cache/oracle-jdk11-installer-local/
$ sudo cp jdk-11.0.3_linux-x64_bin.tar.gz /var/cache/oracle-jdk11-installer-local/
これが終われば以下のパッケージがインストールできるはず。
$ sudo apt install oracle-java11-installer-local
複数のバージョンのJavaがインストールされている場合、Java11をデフォルトにするためにoracle-java11-set-default
をインストールする。
$ sudo apt-get install oracle-java11-set-default-local
2. Hadoopのインストールと設定
ステップ1: 必要とされるソフトウェアの確認
・Java(Java11)
・ssh
・rsync
ステップ2: 必要なソフトウェアのインストール
Java11は先のセクション1でインストール済とする。
$ sudo apt-get install ssh
$ sudo apt-get install rsync
ステップ3: Hadoop用のユーザーを作成
※実際にはこの後の操作においてhadoopユーザーではなく別のユーザーアカウント(ksn)を使っているので注意。ホームディレクトリは/home/ksn/
になっている。
$ sudo adduser hadoop
アカウントを作成後、key-based sshを自身のアカウントにセットアップする必要がある。
su - hadoop
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys
これで、Hadoopユーザーでlocalhostにsshでつなぐことができる。(当然ではあるが、sshサーバーがないとつなぐことはできないので、$ which sshd
でsshdが見つからないようだったらsudo apt-get install openssh-server
でsshサーバーをインストールする)
$ ssh localhost
$ exit
ステップ4: Hadoopソースアーカイブをダウンロードする
$ cd ~
$ wget http://www-eu.apache.org/dist/hadoop/common/hadoop-3.1.2/hadoop-3.1.2.tar.gz
$ tar xzf hadoop-3.1.2.tar.gz
$ mv hadoop-3.1.2 hadoop
ステップ5: Hadoop Pseudo-Distributed Modeのセットアップ
Hadoopによって使われる環境変数のセットアップを行う。~/.bashrcに以下を付け加える。
export HADOOP_HOME=/home/ksn/hadoop
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
.bashrc
を再度読み込む。
$ source ~/.bashrc
$ nano $HADOOP_HOME/etc/hadoop/hadoop-env.sh
でhadoop-env.shファイルを開き、以下の設定を行う。
export JAVA_HOME=/usr/lib/jvm/java-11-oracle
ステップ6: Hadoop設定ファイルのセットアップ
cd $HADOOP_HOME/etc/hadoop
ここに色んな設定ファイルが置いてあるのでそれらの適切な場所を以下のように編集する。
core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>file:///home/ksn/hadoop/hadoopdata/hdfs/namenode</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>file:///home/ksn/hadoop/hadoopdata/hdfs/datanode</value>
</property>
</configuration>
mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
ステップ7: Namenodeをフォーマットする
$ hdfs namenode -format
WARNING: /home/ksn/hadoop/logs does not exist. Creating.
2019-07-04 06:01:49,407 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = omega/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 3.1.2
...
2019-07-04 06:01:52,712 INFO namenode.FSImageFormatProtobuf: Image file /tmp/hadoop-ksn/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 390 bytes saved in 0 seconds .
2019-07-04 06:01:52,775 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
2019-07-04 06:01:52,803 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at omega/127.0.1.1
************************************************************/
ステップ8: Hadoop Clusterを起動する
$ cd $HADOOP_HOME/sbin/
$ ./start-dfs.sh
Starting namenodes on [omega]
omega: Warning: Permanently added 'omega' (ECDSA) to the list of known hosts.
Starting datanodes
Starting secondary namenodes [omega]
2019-07-04 06:26:02,223 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
$ ./start-yarn.sh
Starting resourcemanager
Starting nodemanagers
サービスが立ち上がっているか確認。
$ jps
29474 NameNode
15047 SecondaryNameNode
2616 SparkSubmit
29640 DataNode
9806 Jps
ステップ9: ブラウザでHadoopサービスにアクセスする
Hadoop NameNodeはデフォルトでは9870番ポートで起動するのでブラウザでlocalhost:9870にアクセスすると接続できる。
また、クラスターおよび全てのアプリケーションについての情報を得るためには8042番ポートにアクセスすればよい。1
最後に。Hadoopノードに関する詳細を得るためには9864番ポートにアクセスすればよい。
参考
-
が、これは今私は見れていない。どうもHadoop3.xはJava8までしか対応していないらしいとかなんとかでResourceManagerは立ち上がらないっぽい。よって、おいおい対策を考えることに。 ↩