CentOS 7におけるHadoopクラスターおよびHive環境の構築手順

前提環境の構築

サーバーの基本設定

Hadoopクラスターは3台構成で構築する。各ノードのホスト名は以下のように定義する。

  • node-master (マスターノード)
  • node-worker1 (ワーカーノード1)
  • node-worker2 (ワーカーノード2)

まず、マスターノードとなるサーバー側で基本設定を行う。

1. ホスト名の変更

以下のコマンドを実行し、ホスト名を変更する。

vim /etc/hostname
# 内容を node-master に変更

2. IPアドレスの固定

ネットワークインターフェースの設定ファイルを編集する。

vim /etc/sysconfig/network-scripts/ifcfg-ens33
# IPADDRをご自身のネットワーク環境に合わせて設定

設定後、ネットワークサービスを再起動する。

systemctl restart network

3. ファイアウォールの無効化

systemctl stop firewalld
systemctl disable firewalld

4. 名前解決の設定

各ノードのIPアドレスとホスト名のマッピングを /etc/hosts に追記する。

vim /etc/hosts
# 例:
# 192.168.10.100 node-master
# 192.168.10.101 node-worker1
# 192.168.10.102 node-worker2

5. 時刻同期

NTPクライアントをインストールし、時刻を同期する。

yum install ntpdate
ntpdate ntp.nict.jp

JDKのインストール

任意のディレクトリにJDKのアーカイブを配置し、展開する。

mkdir -p /opt/java
tar -zxvf jdk-8u311-linux-x64.tar.gz -C /opt/java/

環境変数を設定するため、/etc/profile の末尾に以下を追記する。

export JAVA_HOME=/opt/java/jdk1.8.0_311
export CLASSPATH=.:$JAVA_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH

設定を反映し、バージョン確認を行う。

source /etc/profile
java -version

MySQLのインストール

CentOS 7デフォルトのMariaDBを削除する。

rpm -qa | grep mariadb
rpm -e mariadb-libs-5.5.68-1.el7.x86_64 --nodeps

MySQL 5.7のRPMバンドルを展開し、依存関係を解決したうえでインストールする。

mkdir -p /opt/modules/mysql
tar xvf mysql-5.7.35-1.el7.x86_64.rpm-bundle.tar -C /opt/modules/mysql/

# 依存パッケージのインストール
yum install libaio perl net-tools

# RPMの順次インストール
rpm -ivh mysql-community-common-5.7.35-1.el7.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.35-1.el7.x86_64.rpm
rpm -ivh mysql-community-client-5.7.35-1.el7.x86_64.rpm
rpm -ivh mysql-community-server-5.7.35-1.el7.x86_64.rpm

データベースの初期化と起動を行う。

mysqld --initialize
chown mysql:mysql /var/lib/mysql -R
systemctl start mysqld

初期パスワードを確認し、セキュリティ設定を行う。

cat /var/log/mysqld.log | grep password
mysql -u root -p

# SQL内でパスワード変更とリモートアクセス許可
ALTER USER 'root'@'localhost' IDENTIFIED BY 'RootPass123!';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'RootPass123!' WITH GRANT OPTION;
FLUSH PRIVILEGES;
exit

自動起動を有効化する。

systemctl enable mysqld

仮想マシンの複製とSSH設定

ノードの複製

構成済みのマスターノードをシャットダウンし、仮想マシンのクローン機能を利用して2台のワーカーノードを作成する。クローン後、各ワーカーノードでホスト名とIPアドレスを一意の値に変更し、ネットワークを再起動する。

SSH鍵認証の設定

全ノードでRSA鍵ペアを作成する。

ssh-keygen -t rsa

各ノードから他の全ノードへ公開鍵を配布する。

# node-masterでの実行例
ssh-copy-id node-worker1
ssh-copy-id node-worker2
# 同様にワーカーノードからも他ノードへ配布

パスワードなしでログインできるか確認する。

ssh node-worker1

Hadoopクラスターの構築

Hadoopのインストール

Hadoop用ユーザーを作成し、切り替える。

adduser bigdata
passwd bigdata
su - bigdata

Hadoopアーカイブを展開する。

mkdir -p /opt/hadoop
tar -zxvf hadoop-3.3.6.tar.gz -C /opt/hadoop/

設定ファイルの編集

/opt/hadoop/hadoop-3.3.6/etc/hadoop/ 配下のファイルを編集する。

1. hadoop-env.sh

JAVA_HOMEと実行ユーザーを指定する。

export JAVA_HOME=/opt/java/jdk1.8.0_311
export HDFS_NAMENODE_USER=root
export HDFS_DATANODE_USER=root
export HDFS_SECONDARYNAMENODE_USER=root
export YARN_RESOURCEMANAGER_USER=root
export YARN_NODEMANAGER_USER=root

2. core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://node-master:9820</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/data/hadoop/tmp</value>
    </property>
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>root</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
    </property>
</configuration>

3. hdfs-site.xml

<configuration>
    <property>
        <name>dfs.replication</name>
        <value>3</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/data/hadoop/namenode</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/data/hadoop/datanode</value>
    </property>
</configuration>

4. mapred-site.xml

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>node-master:10020</value>
    </property>
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>node-master:19888</value>
    </property>
    <property>
        <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=${HADOOP_HOME}</value>
    </property>
</configuration>

5. yarn-site.xml

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>node-master</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

6. workers

node-master
node-worker1
node-worker2

7. 環境変数と設定の配布

/etc/profile にHadoopのパスを追記する。

export HADOOP_HOME=/opt/hadoop/hadoop-3.3.6
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

設定ファイルをワーカーノードへ同期する。

scp -r /opt/hadoop/hadoop-3.3.6/etc/hadoop/ root@node-worker1:/opt/hadoop/hadoop-3.3.6/etc/
scp -r /opt/hadoop/hadoop-3.3.6/etc/hadoop/ root@node-worker2:/opt/hadoop/hadoop-3.3.6/etc/

Hadoopクラスターの起動と検証

ネームノードのフォーマット

初回起動時にのみ実行する。

hdfs namenode -format

サービスの起動

start-dfs.sh
start-yarn.sh

起動確認

各ノードで jps コマンドを実行し、必要なプロセスが起動していることを確認する。

ブラウザから http://<node-masterのIP>:8088 にアクセスし、YARNの管理画面を表示する。

サービスの停止

stop-yarn.sh
stop-dfs.sh

Hiveのインストール

セットアップ

Hiveのアーカイブを展開する。

mkdir -p /opt/hive
tar -zxvf apache-hive-3.1.3-bin.tar.gz -C /opt/hive/

設定ファイルの編集

1. hive-env.sh

cd /opt/hive/apache-hive-3.1.3-bin/conf/
cp hive-env.sh.template hive-env.sh
vim hive-env.sh

以下の変数を定義する。

export HADOOP_HOME=/opt/hadoop/hadoop-3.3.6
export HIVE_CONF_DIR=/opt/hive/apache-hive-3.1.3-bin/conf
export HIVE_AUX_JARS_PATH=/opt/hive/apache-hive-3.1.3-bin/lib

2. hive-site.xml

MySQLをメタストアとして使用する設定を行う。

<configuration>
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://node-master:3306/hive_db?createDatabaseIfNotExist=true&useSSL=false</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.cj.jdbc.Driver</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>RootPass123!</value>
</property>
<property>
    <name>hive.server2.thrift.bind.host</name>
    <value>node-master</value>
</property>
<property>
    <name>hive.metastore.uris</name>
    <value>thrift://node-master:9083</value>
</property>
<property>
    <name>hive.metastore.event.db.notification.api.auth</name>
    <value>false</value>
</property>
</configuration>

MySQLのJDBCドライバをダウンロードし、/opt/hive/apache-hive-3.1.3-bin/lib/ に配置する。

~/.bashrc に環境変数を追記し、反映する。

export HIVE_HOME=/opt/hive/apache-hive-3.1.3-bin
export PATH=$PATH:$HIVE_HOME/bin

source ~/.bashrc

メタストアの初期化と起動

schematool -dbType mysql -initSchema

Metastoreサービスを起動する。

hive --service metastore

別セッションを開き、HiveServer2をバックグラウンドで起動する。

hive --service hiveserver2 &

Beelineによる接続確認

beeline -u jdbc:hive2://node-master:10000

DBeaverによるHiveへの接続

DBeaverを起動し、新しい接続としてApache Hiveを選択する。ホストにはマスターノードのIPアドレス、ポートには10000を設定し、認証情報を入力後、接続テストを実行する。

タグ: CentOS Hadoop HDFS YaRN Hive

7月15日 17:40 投稿