Ubuntu18.04上でHadoop3.1.2の環境構築を行う


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番ポートにアクセスすればよい。

参考


  1. が、これは今私は見れていない。どうもHadoop3.xはJava8までしか対応していないらしいとかなんとかでResourceManagerは立ち上がらないっぽい。よって、おいおい対策を考えることに。