CentOS7にAnsibleをインストール

Chefは一時期興味があって調べてたけど最近はAnsibleが気になる。

とりあえずCentOS7にansibleとsshpassをインストールした時のコマンドを記録。
yumでインストールするにはEPELレポジトリを先に追加する必要があるみたい。


$sudo yum install -y epel-release.noarch
$sudo yum install -y sshpass
$sudo yum install -y ansible

Pyhton2.6か2.7があればいいらしいのでCentOS6でもインストール可能だと思います。

Hadoop-2.6.4をスタンドアローンモードで動作させてみる

かなり久しぶりの投稿です。いい加減2系を利用しようと重い腰を上げ少しずつ検証中。とりあえずメモ程度に記録します。(といってもほぼ昔の1系の記事からのパクリです。)

対象バージョンはhadoop-2.6.4 JavaはJDK1.8を利用。JAVA_HOMEは/usr/local/java8とします。

その他各種パラメータは以下の通り。

ユーザホーム /home/hadoop/local
インストール ${HOME}/local
hadoop.tmp.dir ${HOME}/local/opt/hadoop2
HADOOP_PID_DIR ${HOME}/local/var/run/hadoop2

Hadoopのインストール


cd $HOME/local
tar -zxvf hadoop-2.6.4.tar.gz
ln -s hadoop-2.6.4/ hadoop2

その後各種ディレクトリの作成。


cd $HOME/local
mkdir -p opt/hadoop2
mkdir -p var/run/hadoop2

スタンドアロンモードの時にpidファイル格納用のディレクトリは不要かも?

下記ディレクトリに移動して設定ファイルの修正を行います。


cd $HOME/local/hadoop2/etc/hadoop

core-site.xml

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/home/hadoop/local/opt/hadoop2</value>
        <description>A base for other temporary directories.</description>
    </property>
</configuration>

mapred-site.xml
mapred-site.xml.tmeplateをmapred-site.xmlという名前でコピーもしくはリネームして下記を追加。

<configuration>
    <property>
        <name>mapred.job.tracker</name>
        <value>local</value>
    </property>
</configuration>

hadoop-env.sh


export JAVA_HOME=/usr/local/java8
export HADOOP_PID_DIR=/home/hadoop/local/var/run/hadoop2

動作確認


cd /home/hadoop/local/opt/hadoop2
mkdir -p input/grep_example
cd ${HOME}/loca/hadoop2
cp ./etc/hadoop/*.xml $HOME/local/opt/hadoop2/input/grep_example/
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar grep \
/home/hadoop/local/opt/hadoop2/input/grep_example \
/home/hadoop/local/opt/hadoop2/output/grep_example 'dfs[a-z.]+'
cat /home/hadoop/local/opt/hadoop2/output/grep_example/*

正常終了すると最後のcatコマンドでgrep処理の結果が出力される。

Redisインストールメモ

Redisをインストールした際のメモ。

redisのインストール


tar -zxvf redis-2.8.17.tar.gz
cd redis-2.8.17
make
make install

※このままインストールすると/usr/local/binにRedisの実行ファイルがインストールされてしまうため、別のディレクトリにインストールしたい場合はredis-2.8.17/src配下のMakefileのPREFIX?を修正してからmake、make installを実行すること。

redisの起動


cd $REDIS_HOME/bin
redis-server path_to/redis.conf

ruby-2.1.0をCentOS6にインストール

ruby-2.1.0をCentOS6にソースからインストールした際のメモです。

まずRubyをソースからビルドするために必要そうな以下のライブラリをインストールします。(いらないのもあると思います。)


gcc-c++, zlib-devel, autoconf, automake, libtool, bison, readline-devel, curl-devel, libxslt-devel, libxml2-devel, libffi-devel, openssl-devel, httpd-devel, ncurses-devel, tk-devel, bzip2, sqlite, sqlite-devel

環境によってはすでにインストール済みのライブラリもあると思うので必要なもののみインストールすればOKです。


yum -y install libffi-devel openssl-devel httpd-devel ncurses-devel tk-devel ...

次に、libyaml-develが必要ですが、標準のYumレポジトリに存在しないためEPELレポジトリよりインストールします。(EPELレポジトリの設定は割愛します。)


yum --enablerepo=epel -y install libyaml-devel

後はrubyを以下の手順でインストールします。


#tar -zxvf ruby-2.1.0.tar.gz
#cd ruby-2.1.0
#./configure
#make
#make install
#ruby -v
#gem -v

インストール先を、たとえば「/usr/loca/ruby-2.1.0」等に変更する場合は以下のようにしてください。


./configure --prefix=/usr/local/ruby-2.1.0

なお、上記のようにインストール先を変更した場合は適切にPATHを設定してください。

インストールしたファイルなどの詳細を確認する場合は、以下のファイルを参照してください。


cd ruby-2.1.0
less .installed.list

HBaseとZookeeperの設定

完全分散モードによるHBaseとZookeeperに関する設定メモです。Hadoopについては以前のブログの内容に従ってインストールされていることが前提です。

今回利用したバージョンはhbase-0.94.11とzookeeper-3.4.5です。なお、hbase-0.94.11のデフォルトのHadoopバージョンは1.0.4で前回は1.1.2を設定する方法を紹介しましたが設定方法は同じです。

なお、今回紹介する方法はhbaseにzookeeperを管理させず、zookeeperノードを単体で起動する方法を紹介します。zookeeperは奇数台必要となります。

[ ]はそれぞれの環境で任意の設定値に読み替えてください。

■Zookeeperの設定
rootユーザでzookeeperを解凍し、ディレクトリのオーナーなどの設定を行います。


su -
cd /usr/local
tar -zxvf zookeeper-3.4.5.tar.gz
chown -R hadoop:hadoop zookeeper-3.4.5/
ln -s zookeeper-3.4.5 zookeeper

zookeeper用のデータディレクトリを作成します。


cd /opt
mkdir zookeeper
chown -R hadoop:hadoop zookeeper/

zookeeperの起動ユーザ(hadoopユーザ)にスイッチしzoo.cfgファイルの設定を行います。


su - hadoop
cd /usr/local/zookeeper/conf
cp -p zoo_sample.cfg zoo.cfg
vi zoo.cfg
/tmp/zookeeper

/opt/zookeeper #先ほど作成したディレクトリに変更
zookeeperが動作するノードリストを以下のように追加
#servers ↓zookeeperが動作するサーバ名とポート番号を設定
server.1=[ホスト名1]:[port1]:[port2]
server.2=[ホスト名2]:[port1]:[port2]
server.3=[ホスト名3]:[port1]:[port2]
...

各zookeeperのサーバででmyidファイルを/opt/zookeeper配下に作成します。


cd /opt/zookeeper
vi myid
1 ←server.1のノードでは1を設定。server.2の場合は2。

iptablesを次のように設定します。ここでは自分のネットワーク内からのアクセスのみを許可するようにします。


su -
cd /etc/sysconfg
vi iptables
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport 2181 -j ACCEPT
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport [zoo.cfgファイルのport1] -j ACCEPT
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport [zoo.cfgファイルのport2] -j ACCEPT

zookeeperの起動・停止・クライアントでのログイン

【起動】


cd /usr/local/zookeeper
./bin/zkServer.sh start

【停止】


./bin/zkServer.sh stop

【クライアントログイン】


./bin/zkCli.sh

■HBaseの設定
rootユーザでhbaseを解凍し、ディレクトリのオーナーなどの設定を行います。


su -
cd /usr/local
tar -zxvf hbase-0.94.11.tar.gz
ln -s hbase-0.94.11 hbase
chown -R hadoop:hadoop hbase-0.94.11

hbase用のディレクトリを作成します。


cd /opt
mkdir hbase
chown -R hadoop:hadoop hbase/

hadoopユーザでhbase/conf配下のhbase-site.xml、hbase-env.sh、regionservers、backup-mastersファイルをそれぞれ次のように編集します。

【hbase-site.xml

<configuration>
 <property>
   <name>hbase.rootdir</name>
   <value>hdfs://[hadoop_hdfsサーバ]:[port]/hbase</value>
   <description>
   ...
   </description>
 </property>
 <property>
   <name>hbase.cluster.distributed</name>
   <value>true</value>
   <description>
   ...
   </description>
 </property>
 <property>
   <name>hbase.tmp.dir</name>
   <value>/opt/hbase</value>
   <description>
   ...
   </description>
 </property>
 <property>
   <name>hbase.zookeeper.quorum</name>
   <value>[zookeeper_server_name1],[zookeeper_server_name1],[zookeeper_server_name1]</value>
   <description>
   ...
   </description>
 </property>
</configuration>

【hbase-env.sh】


export HBASE_PID_DIR=/var/run/hadoop
export HBASE_MANAGES_ZK=false #hbaseでzookeeperを起動しないようにする

【regionservers】
分散させるリージョンサーバ名をすべて記載します。


[regionserver_name1]
[regionserver_name2]
[regionserver_name3]
[regionserver_name4]
[regionserver_name5]
...

【backup-masters】
バックアップ用のHBaseマスタサーバ名を記載します。


[backup_masterserver_name1]

iptablesの設定
マスタサーバとリージョンサーバでそれぞれ以下のように設定します。ここでもローカルネットワークからのアクセスのみを許可するようにします。

【マスタサーバ】


su -
cd /etc/sysconfg
vi iptables
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport 60000 -j ACCEPT
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport 60010 -j ACCEPT

【リージョンサーバ】


su -
cd /etc/sysconfg
vi iptables
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport 60020 -j ACCEPT
-A INPUT -s [IPアドレス]/24 -p tcp -m state --state NEW -m tcp --dport 60030 -j ACCEPT

hbaseクラスタの起動と停止

【起動】


cd /usr/local/hbase
./bin/start-hbase.sh

【停止】


./bin/stop-hbase.sh

長くなりましたが以上です。

LVMのボリューム・グループ名の変更方法

CentOS-6をVirtualboxに特に何も考えずにインストールしたときに気付いたんですが、LVMのボリューム・グループ名にホスト名が付与されるようです。(記憶があいまいだけど、以前のバージョンとかはそうじゃなかった気がする。)

Vitualboxのクローン機能を使ってOSを複製すると、当然ながら複製先のLVMのボリューム・グループ名は複製元のホスト名付の名前のまま。

気持ち悪いので名前の変更を行った時の手順を、ほとんどやることがないから忘れると思ってメモ。

変更方法は以下の通り。ここではvg_hoge1というLVMボリューム・グループ名をvg_hoge2に変更する。

LVMのボリューム・グループ名の確認


#vgs
VG #PV #LV #SN Attr VSize VFree
vg_hoge1 1 2 0 wz--n- 199.51g 0

LVMのボリューム・グループ名の変更


#vgrename vg_hoge1 vg_hoge2
Volume group "vg_hoge1" successfully renamed to "vg_hoge2"

GRUBの設定ファイル修正


cd /boot/grub
cp -p grub.conf grub.conf.org
sed -i 's/vg_hoge1/vg_hoge2/g' grub.conf

/etc/fstabの修正


cd /etc
cp -p fstab fstab.org
sed -i 's/vg_hoge1/vg_hoge2/g' fstab

OS再起動後にdfコマンドなどで確認すると変更後の名前が適用されていると思います。

HadoopのWeb管理画面よりHDFSにアクセスする際のちょっとした設定

前回、「Hadoop-1.1.2を完全分散モードで動作させるまでの設」で環境を構築するととりあえず完全分散モードで動作するようになります。

Hadoopの便利なWeb管理画面なども利用できるようになるのですが、前回の設定のままだとWebからHDFSにアクセスした際にログファイルにスタックトレースが出力されると思います。

Hadoopにはdfs.web.ugiという設定があり、パーミッションに関する設定が有効な場合、デフォルトではこのプロパティ定義されたユーザ(webuser,webgroup)でHDFSにアクセスしているようで、要は権限エラーのような例外が発生するということです。

少し調べてみて、この例外を出さないようにするには、前回の手順で環境設定した場合、この定義をhadoopに変更すると発生しなくなります。

よって全ノードhdfs-site.xmlファイルに以下の設定を追加するとスタックトレースが出力されなくなります。

hdfs-site.xml

...
<pproperty>
    <name>dfs.web.ugi</name>
    <value>hadoop</value>
</property>
...