Help us understand the problem. What is going on with this article?

Cloudera CDH 6.2でHBaseの完全分散環境を構築する

はじめに

Cloudera CDH 6.2でHBaseの完全分散環境をお試しで構築してみます。
CDHはApache Hadoopと、HBaseやSpark等の関連したプロジェクトの有償ディストリビューションです(Expressという無償版もあり)。
CDHを利用することによりこれらのプロジェクトを用いた環境を簡単に構築でき、ホストの運用も統合的に実施することができます。

環境

使用する環境は以下のとおりです。

  • CentOS 7.5
  • Cloudera CDH 6.2

Cloudera Manager用のサーバ1台とClouderaのノード(ホスト)4台の計5台を使用しています。
諸事情でクラスタ作成時はノード3台で、クラスタ作成後に1台追加しています。

image.png

インストール

CDHのインストールは以下の公式サイトを参考に実施しました。

ネットワーク設定

まず、ホスト名をFQDNで設定します。
以下は1号機の場合で、5号機まで同様に実行します。

sudo hostnamectl set-hostname hbaseserver1.example.com

全てサーバのhostsファイルを修正します。

vi /etc/hosts

192.168.10.91  hbaseserver1.example.com  hbaseserver1
192.168.10.92  hbaseserver2.example.com  hbaseserver2
192.168.10.93  hbaseserver3.example.com  hbaseserver3
192.168.10.94  hbaseserver4.example.com  hbaseserver4
192.168.10.95  hbaseserver5.example.com  hbaseserver5

/etc/sysconfig/networkも全てのサーバで修正します。

vi /etc/sysconfig/network
HOSTNAME=hbaseserver1.example.com

Firewallを無効化

Firewallを無効化します。

systemctl disable firewalld
systemctl stop firewalld

SELinuxを無効化

SELinuxも無効化

setenforce 0

# vi /etc/selinux/config
SELINUX=disabled

ここでサーバを再起動しています。
確認のため、以下のコマンドを実行します。

# host -v -t A $(hostname)
Trying "hbaseserver4.example.com"
Received 99 bytes from 10.0.2.3#53 in 140 ms
Trying "hbaseserver4.example.com.example.com"
Host hbaseserver4.example.com not found: 3(NXDOMAIN)
Received 111 bytes from 10.0.2.3#53 in 141 ms

NTPを有効にする

1台目(NTPサーバ)
→1台目をNTPサーバにしようかと思いましたが、結局実施せず、外部NTPサーバを利用しました。

# yum install -y ntp
# systemctl start ntpd
# systemctl enable ntpd

# vi /etc/ntp.conf
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap

# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

server 127.127.1.0
fudge 127.127.1.0 stratum 10

2-4台目

#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
restrict 192.168.10.0 mask 255.255.255.0 nomodify notrap

server 192.168.10.91 iburst

nptdを再起動し、ntpqコマンドで同期されている事を確認します。
サーバ名の左に「*」が表示されていればOKです。

# systemctl restart ntpd
# ntpq -p
     remote           refid      st t when poll reach   delay   offset  jitter
==============================================================================
*192.168.10.91   LOCAL(0)        11 u    2   64    1    0.299    3.536   2.178


# systemctl stop ntpd
# ntpdate 192.168.10.91
# systemctl start ntpd

clouderaユーザの作成

今後の作業ではclouderaユーザを使用するので、まずはclouderaユーザを作成します。

groupadd cloudera
useradd -g cloudera cloudera
passwd cloudera

echo 'cloudera ALL=(ALL) NOPASSWD: ALL' > /etc/sudoers.d/cloudera
chmod 400 /etc/sudoers.d/cloudera

管理ノードから他の3サーバにsshで接続できることを確認する。

# ssh cloudera@hbaseserver2.example.com
# ssh cloudera@hbaseserver3.example.com
# ssh cloudera@hbaseserver4.example.com

Cloudera Manager用のリポジトリの登録

管理ノードでCloudera Manager用のリポジトリをダウンロードし、インストールします。

wget https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/cloudera-manager.repo -P /etc/yum.repos.d/

rpm --import https://archive.cloudera.com/cm6/6.2.0/redhat7/yum/RPM-GPG-KEY-cloudera

JDKインストール

管理ノードにJDKをインストールします。

yum install -y oracle-j2sdk1.8

Cloudera Manager Serverインストール

管理ノードにCloudera Managerパッケージをインストールします。

yum install -y cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server

PostgreSQLインストール

Cloudera Managerは、Cloudera Managerの設定情報等を保存するためにデータベースを利用します。
データベースは、Oracle、PostgreSQL、MySQLなど様々なDBが利用できます。今回はPostgreSQLをインストールしました。
※今回はお試しでPostgreSQLのバージョンは気にしていなかったので、リポジトリに登録されているバージョンを利用しています。

# yum install -y postgresql-server
# curl -kL https://bootstrap.pypa.io/get-pip.py | python
# pip install psycopg2==2.7.5 --ignore-installed

データベースを初期化します。

# echo 'LC_ALL="en_US.UTF-8"' >> /etc/locale.conf
# su -l postgres -c "postgresql-setup initdb"
# systemctl start postgresql
# passwd postgres

# su - postgres -c psql
ALTER USER postgres WITH PASSWORD 'postgres';
\q

pg_hba.confを修正し、MD5認証を有効にします。

# su - postgres -c "vi /var/lib/pgsql/data/pg_hba.conf"

local   all             all                                     md5
host all all 127.0.0.1/32 md5
->peer,ident を trustに変更
host    all             all             192.168.10.0/24            md5

# systemctl restart postgresql

postgresql.confに対して、最低限の修正を行います。

$ vi /var/lib/pgsql/data/postgresql.conf

listen_addresses = '*'
max_connection=100
shared_buffers = 256MB
wal_buffers = 8MB
checkpoint_segments = 16
checkpoint_completion_target = 0.9

※checkpoint_segments 設定はPostgreSQL 9.5以降で削除されています。

PostgreSQLを自動起動するように設定します。ついでに再起動しています。

# systemctl enable postgresql
Created symlink from /etc/systemd/system/multi-user.target.wants/postgresql.service to /usr/lib/systemd/system/postgresql.service.

# systemctl restart postgresql

データベース作成

各種データベースを作成します。

# sudo -u postgres psql

CREATE ROLE scm LOGIN PASSWORD 'scm';
CREATE ROLE amon LOGIN PASSWORD 'amon';
CREATE ROLE rman LOGIN PASSWORD 'rman';
CREATE ROLE hue LOGIN PASSWORD 'hue';
CREATE ROLE hive LOGIN PASSWORD 'hive';
CREATE ROLE sentry LOGIN PASSWORD 'sentry';
CREATE ROLE nav LOGIN PASSWORD 'nav';
CREATE ROLE navms LOGIN PASSWORD 'navms';
CREATE ROLE oozie LOGIN PASSWORD 'oozie';
CREATE DATABASE scm OWNER scm ENCODING 'UTF8';
CREATE DATABASE amon OWNER amon ENCODING 'UTF8';
CREATE DATABASE rman OWNER rman ENCODING 'UTF8';
CREATE DATABASE hue OWNER hue ENCODING 'UTF8';
CREATE DATABASE metastore OWNER hive ENCODING 'UTF8';
CREATE DATABASE sentry OWNER sentry ENCODING 'UTF8';
CREATE DATABASE nav OWNER nav ENCODING 'UTF8';
CREATE DATABASE navms OWNER navms ENCODING 'UTF8';
CREATE DATABASE oozie OWNER oozie ENCODING 'UTF8';

ALTER DATABASE metastore SET standard_conforming_strings=off;
ALTER DATABASE oozie SET standard_conforming_strings=off;

Cloudera Manager Databaseのデータベースを設定する

Cloudera Managerのデータベースを設定するためのscm_prepare_database.shを実行します。

# /opt/cloudera/cm/schema/scm_prepare_database.sh postgresql scm scm scm
JAVA_HOME=/usr/java/jdk1.8.0_181-cloudera
Verifying that we can write to /etc/cloudera-scm-server
Creating SCM configuration file in /etc/cloudera-scm-server
Executing:  /usr/java/jdk1.8.0_181-cloudera/bin/java -cp /usr/share/java/mysql-connector-java.jar:/usr/share/java/oracle-connector-java.jar:/usr/share/java/postgresql-connector-java.jar:/opt/cloudera/cm/schema/../lib/* com.cloudera.enterprise.dbutil.DbCommandExecutor /etc/cloudera-scm-server/db.properties com.cloudera.cmf.db.
[                          main] DbCommandExecutor              INFO  Successfully connected to database.
All done, your SCM database is configured correctly!

存在していたら以下のファイルを削除する。(ただし、存在していなかった)

# rm /etc/cloudera-scm-server/db.mgmt.properties

cloudera-scm-serverを起動します。

# systemctl start cloudera-scm-server

以下はログの確認方法です。
tail -f /var/log/cloudera-scm-server/cloudera-scm-server.log

CDHのインストール

以下のURL(私の環境)でCloudera Manager管理コンソールにログインします。

デフォルトの管理者のユーザ名とパスワードは以下になっています。

Username: admin
Password: admin

ログイン画面です。

image.png

ようこそページでは、「続行」ボタンを押します。

image.png

Accept Licenseページでは、チェックボックスにチェックを入れて「続行」ボタンを押します。

image.png

Select Editionページでは、Cloudera Enterpriseのトライアルが選択されています。「続行」ボタンを押します。
トライアルで使用できるのは60日間です。

image.png

続いて、クラスタの作成に移ります。
ようこそページでは、「続行」ボタンを押します。

image.png

Cluster Basicsページでは作成するクラスタ名を入力します。デフォルトで「Cluster 1」と入力されており、変更しないならそのまま「Continue」ボタンを押します。

image.png

Cloudera Managerの管理対象のホスト名を指定します。言い方を変えれば、HDFSやHBase等のサービスをインストールするホスト名のことです。
以下は「hbaseserver[2-4].example.com」と入力し、「検索」ボタンを押下した後の画面コピーです。
対象のホストのリストが問題なければ、「続行」ボタンを押します。

image.png

リポジトリの選択ページでは、Cloudera Manager Agent、CDH、その他のソフトウェアのリポジトリを指定できます。
メソッドの選択、CDHのバージョンは特に変更は必要ありません。
追加のParcelは必要があれば変更します。今回はデフォルトのまま進めています。

image.png

JDKインストールオプションでは、管理対象のノードにインストールするJDKのライセンスを確認します。商用利用でなければ特に気にせず、チェックを入れて「続行」ボタンを押します。

image.png

SSHログインの資格情報では、作成していたclouderaユーザを指定し、パスワードを入力します。
※パスワードなしでログインできるように設定しておくほうが良いです(今回は手抜きです)
同時インストールの数は、ネットワークの速度に応じて設定して下さい。今回は"1"を設定しました。(画面コピーでは"10"になっています)

image.png

image.png

Install AgentページにAgentのインストールの進行状況が表示されます。

image.png

Install Parcelsページに選択したParcelのインストールの進行状況が表示されます。
ダウンロード、配布、アンパック、アクティブ化の段階があり、サーバのスペックやネットワークの状況にもよりますが、時間がかかります。

image.png

Inspect Clusterページでは、ネットワークとホストの一般的な設定の検査を実行します。
まず、「Inspect Network Performance」ボタンをクリックします。

image.png

Inspect Hostsボタンを押下すると検査が始まり、実行が終わると以下のように表示されます。

image.png

インスペクタの結果を表示ボタンを押すと、以下のように結果が表示されます。
今回はSwappinessを10以下に設定してくださいなどの警告がでていますが、無視して進めます。

image.png

Inspect Network Performanceボタンを押下すると検査が始まり、実行が終わると以下のように表示されます。

image.png

インスペクタの結果を表示ボタンを押すと結果が表示されます。今回は特にエラー、警告はでませんでした。

image.png

このようにいくつか警告がでるかもしれませんが、致命的なものがなければ「I understand the risks, let me continue with cluster creation」を選択し、クラスタインストールを終了します。

クラスタインストールを終了すると、次はクラスタのセットアップに移ります。

クラスタのセットアップ

Select Servicesページでは、インストールしたいサービスを選択できます。
今回はカスタムサービスで、HBase, HDFSを選択しています。チェックを入れなくても依存するサービスは自動でインストールされます。

image.png

ロール割り当てのカスタマイズページでは、クラスタ内のホストに対するロールの割り当てが表示されます。
各ホストに対するロールは自動で割り当てられており、必要があればカスタマイズします。
今回は特に変更せずに進めています。

image.png

ホスト別に表示ボタンを押すと、ホスト別にNameNode, DataNodeなどの割り当てられたロールが表示されるため見やすいです。

image.png

image.png

変更の確認ページでは、データディレクトリを含む設定パラメータのデフォルト設定と推奨設定が一覧で表示されます。
今回は変更せず、Continueで次へ進みます。

image.png

コマンドの詳細

image.png

1回やり直しており上のようにエラーが出たので、以下のように一旦ディレクトリを移動させた。

# mv /dfs /dfs.back

その後にやり直すと、以下のように成功。
続行ボタンを押して次に進みます。

image.png

サマリページが表示されるので、完了ボタンを押します。

image.png

完了ボタンを押すと、以下のように作成したクラスタのステータスが表示される画面へ遷移します。クラスタの設定はこれで完了です。

image.png

swappinessで警告が出ていたので、以下のように"10"を設定しています。サーバのロールによって適正値が異なりますが、これで警告はなくなります。

# vi /etc/sysctl.conf
vm.swappiness = 10

# sysctl -p

Cloudera Manager Agentのログ

Agentのログは以下にディレクトリに出力されます。管理画面から見ることもできます(はず)。

/var/log/cloudera-scm-agent/cloudera-scm-agent.log

ログは基本的に/var/log以下に出力されているようです。
基本は管理画面からログを見れますが、直接の方が確認しやすいかと思います。

HBaseの動作確認

インストールしたHBaseに対して、テーブル作成、put/scanを実行してみます。

#hbase shell

hbase(main):023:0> create 'test2', {NAME => 'data1'}, {NAME => 'data2'}
Created table test2
Took 1.9793 seconds                                                                           
=> Hbase::Table - test2

hbase(main):024:0> list
TABLE                                                                                         
test2                                                                                         
1 row(s)
Took 0.0328 seconds                                                                           
=> ["test2"]

hbase(main):026:0> put 'test2','key1','data2','value1'
Took 0.1505 seconds 

hbase(main):027:0> scan 'test2'
ROW                      COLUMN+CELL                                                          
 key1                    column=data2:, timestamp=1562277728928, value=value1                 
1 row(s)
Took 0.0318 seconds                                                                           

[追記]HBaseのバージョンを確認するとv2.1.0でした。

hbase(main):002:0* version
2.1.0-cdh6.2.0, rUnknown, Wed Mar 13 23:39:58 PDT 2019
Took 0.0182 seconds                                                                                                

バージョンは以下のサイトからも確認できます。

https://www.cloudera.com/documentation/enterprise/6/release-notes/topics/rg_cdh_62_packaging.html
https://archive.cloudera.com/cdh6/6.2.0/parcels/manifest.json

クラスタの停止

クラスタを停止させる場合は、クラスタを選択した後で、[アクション] - [停止]を選択します。

image.png

Cloudera Managerの停止

Cloudera Managerを停止させる場合は、管理ノードで以下のコマンドを実行します。

systemctl stop cloudera-scm-server
systemctl stop postgresql

新規ホストを追加する

諸事情で管理対象のノードが3台しかなかったため、新規ホストを追加し4台構成にします。

まず、[ホスト] - [Add Hosts]を選択します。
以下は画面ハードコピーのみ載せておきます。

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

image.png

参考

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away