2014年03月16日

Subversionで無視ファイルを探すには?

Subversion の「無視リスト」はなにかと便利ではあるけれど、作業ディレクトリーを一時的に削除しようと思った時に「はて?すべてあっさり消してしまってよかったのだっけ?それとも作業環境依存の設定ファイルを無視リストに設定してあるのだっけ?」と悩むことがある。
svn コマンドで
$ svn stat --no-ignore
というのがあるけれど、これだとあらかじめ無視パターンに設定したファイルも表示されてしまう。
明示的に svn:ignore プロパティーに設定したファイルだけ探し出したいのだが。

結局わからず、上記コマンドで表示された大量のファイルを点検。
めんどくさ。。。
タグ:subversion SVN
posted by K/I at 18:01 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2014年02月02日

Postfix で POP before SMTP

POP before SMTP を実現するにはどうすればいいのか、調べてみた。
意外と簡単。

手元の環境は:
OS: CentOS release 6.4 (Final)
MTA: Postfix 2.6.6
POP/IMAP: Dovecot 2.0.9

Pop-before-smtp パッケージは yum ではインストールできないようなので、Pop-before-smtp プロジェクトのサイト (http://popbsmtp.sourceforge.net/) からダウンロードしてインストールする。
Quickstart Guide が用意されているので、基本的にはそれを元に作業すればOK。

1. Pop-before-smtp のインストールと起動

まずは、必要なパッケージのインストール:
# yum install perl-TimeDate perl-Net-Netmask perl-DB_File

Pop-before-smtp のファイル一式をダウンロードして展開したら、ファイルをコピーする (なんと手作業インストール!)。
# cp pop-before-smtp.init /etc/rc.d/init.d/pop-before-smtp # cp pop-before-smtp /usr/sbin/ # cp pop-before-smtp-conf.pl /etc

設定ファイル /etc/pop-before-smtp-conf.pl を編集する。
  1. 以下の行を探し、必要に応じて設定:
    # Set the log file we will watch for pop3d/imapd records. #$file_tail{'name'} = '/var/log/maillog';
  2. $patを定義していると箇所を探し出し、システムの設定に合ったものをコメントアウト。
    今回は Dovecot + syslog なので、以下の部分をコメントアウトした:
    # For Dovecot POP3/IMAP when using syslog. $pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' . 'Login: .*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]'; $out_pat = '^[LOGTIME] \S+ (?:dovecot: )?(?:imap|pop3)-login: ' . 'Disconnected.*? (?:\[|rip=)[:f]*(\d+\.\d+\.\d+\.\d+)[],]';
設定は、とりあえずこれで完了。
$pat の設定が正しいかどうかは、以下のコマンドでテストできる。
# pop-before-smtp --debug --nowrite --reproces Feb 2 17:21:32 starting up (v1.42) Feb 2 17:21:32 Using 2 values for pre-authorized networks: `XX.XX.XX.XX/32', `127.0.0.0/8' Feb 2 03:14:02 startup log-scan complete Feb 2 03:14:02 ignoring local-net ip=XX.XX.XX.XX : Feb 2 15:34:02 ignoring local-net ip=XX.XX.XX.XX Feb 2 15:44:05 ignoring local-net ip=XX.XX.XX.XX Feb 2 15:44:41 found ip=XX.XX.XX.XX (-1) Feb 2 15:54:09 ignoring local-net ip=XX.XX.XX.XX :
こんな感じに表示されれば問題無し。

デーモンをスタートしてみる:
# chkconfig --add pop-before-smtp # chkconfig --list | grep -i pop pop-before-smtp 0:off 1:off 2:on 3:on 4:on 5:on 6:off # service pop-before-smtp start Starting pop-before-smtp: done

正常に動作すれば、データベースファイルが作られる:
# ls -l /etc/postfix/pop-before-smtp* -rw-r--r-- 1 root root 12288 Feb 2 18:00 /etc/postfix/pop-before-smtp.db

2. Postfix の設定

設定ファイル /etc/postfix/main.cf を開き、どこかに:
check_client_access = hash:/etc/postfix/pop-before-smtp
の1行を追記する。
ついでに、説明書のアドバイスに従って以下の設定も追加:
smtpd_recipient_restrictions = permit_mynetworks,reject_non_fqdn_recipient, check_client_access hash:/etc/postfix/pop-before-smtp, reject_unauth_destination
Postfix の設定再読み込み。
# service postfix reload

3. 動作の確認

まず、Pop-before-smtp に登録されている IP アドレスのリストを確認してみる。
# pop-before-smtp --list The database holds 0 IPs.
となっていれば、まだ登録されていない状態。
この状態で、メール送信を試してみると、メールーサーバのログに:
Feb 2 19:25:58 localhost postfix/smtpd[3537]: connect from xxx.yyy.zzz[XX.XX.XX.XX]
Feb 2 19:25:58 localhost postfix/smtpd[3537]: NOQUEUE: reject: RCPT from xxx.yyy.zzz[XX.XX.XX.XX]: 554 5.7.1 <aaa@bbb.ccc.ddd>: Relay access denied; from=<k-ishik@ll.mm.nn> to=<aaa@bbb.ccc.ddd> proto=ESMTP helo=<[192.168.0.10]>
Feb 2 19:25:58 localhost postfix/smtpd[3537]: disconnect from xxx.yyy.zzz[XX.XX.XX.XX]
といったエラーが出力される。
(メール転送が許可されない)

次に、POP 受信した後に試してみる。
# pop-before-smtp --list The database holds 1 IP: XX.XX.XX.XX
と表示されれば、Pop-before-smtp は正常に動作している。
メール送信も正常に行われる (はず)。
posted by K/I at 18:47 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2013年12月31日

Postfix+Cyrus SASL で SMTP 認証

SMTPサーバーの認証をやらざるをえなくなり、SASL を導入した。
Cyrus SASL はこれまでにも何度か試したけれど、いつも何やら難しそうで途中で放棄していた。
今回は、なんとかやりおおせた。。。

使用した環境は以下のとおり:
OS: CentOS release 6.4 (Final)

1. Cyrus SASL のインストールと設定

SASL ではさまざまな認証機構を選択できるが、あまり複雑なことをやるとハマりそうなので Linux のパスワードファイル /etc/shadow での認証を採用した。
/etc/shadow での認証は、saslauthd で実現できる。
saslauthd は、CentOS の RPM パッケージ cyrus-sasl に含まれている。

PLAIN 認証機構のパッケージ cyrus-sasl-plain もインストールが必要。
# yum install cyrus-sasl cyrus-sasl-plain
saslauthd を実行する前に、/etc/sysconfig/saslauthd ファイルの起動オプションを設定して /etc/shadow での認証を行うようにする。
MECH=shadow
起動してみる。
# service saslauthd start
saslauthd での認証がうまくいくかどうかは、testsaslauthd コマンドで確認できる。
# testsaslauthd -u ユーザ名 -p パスワード
0: OK "Success." と表示されれば成功。

Postfix の SMTP 認証のために saslauthd は起動させておく必要がある。
chkconfig で on に設定しておこう。
# chkconfig saslauthd on

2. Postfix の設定

Postfix の SASL 認証は、SASL ライブラリーを経由して行っている。
SASL ライブラリーの設定ファイル /etc/sasl2/smtpd.conf を以下のように設定する。
pwcheck_method: saslauthd
mech_list: PLAIN LOGIN

Postfix 本体の設定を以下のようにする。
(設定項目が存在しなければ追加)
smtpd_sasl_auth_enable = yes
smtpd_sasl_type = cyrus
smtpd_sasl_path = smtpd
smtpd_recipient_restrictions =
permit_mynetworks
permit_sasl_authenticated
reject_unauth_destination
最後の設定は、リレーを許可するためのもの。
なお、Cyrus SASL ライブラリーは設定ファイルの検索パスから「smtpd_sasl_path の設定値+.conf」というファイル名のファイルを探し出してそれを読み込むので、認証がうまくいかない場合は前述の /etc/sasl2/smtpd.conf ファイルのファイル名と smtpd_sasl_path の設定値が一致しているかどうか確認するとよい。

/etc/postfix/master.cfg ファイルで、-o smtpd_sasl_auth_enable=yes-o smtpd_client_restrictions=permit_sasl_authenticated,reject オプションを有効にする。
smtp inet n - n - - smtpd
#submission inet n - n - - smtpd
# -o smtpd_tls_security_level=encrypt
-o smtpd_sasl_auth_enable=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
# -o milter_macro_daemon_name=ORIGINATING

Postfix の設定リロードを行って完了。
# service postfix reload
posted by K/I at 18:13 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

SETI@home/BOINC をコマンドラインで実行する (Linux)・改

しばらく貢献を怠っていた SETI@home に久しぶりに参加しようと思い、以前書いた記事「SETI@home/BOINC をコマンドラインで実行する (Linux)」を読み返したものの、さすがに古すぎてほとんど役に立たず。
改めて調べてみた。

使用したOSは CentOS release 6.4 (Final)。
現在は RPM パッケージが用意されており、rc ファイルも完備されているので操作が楽になっている。

1. BOINCクライアントのインストール

rpm パッケージが用意されているので、yum 等でインストールする。
# yum install boinc-client
インストールが完了したら boinc-client を起動する。
# service boinc-client start

2. SETI@home のプロジェクト登録

まずは、SETI@home のアカウントキーを取得する必要がある。
SETI@home にアカウントを持っている場合には、次のコマンドでアカウントキーを取得できる。
# boinccmd --lookup_account http://setiathome.berkeley.edu/ \
メールアドレス パスワード
まだアカウントを作っていない場合は、次のコマンドを実行する。
# boinccmd --create_account http://setiathome.berkeley.edu/ \
メールアドレス パスワード アカウント名
アカウントキーを取得したら、BOINC デーモンに SETI@home を登録する。
# boinccmd --project_attach http://setiathome.berkeley.edu/ アカウントキー
ステータスは、
# boinccmd --get_results
で確認できる。
posted by K/I at 12:14 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2013年10月28日

Perl で連想配列の順序をキープする

Perl の連想配列のキーを keys で取得すると、通常は設定順序と異なる順序で返される。
連想配列の順序を保持したい場合は、Tie::IxHash モジュールを使用する。

Tie::IxHash モジュールには TIEHASH インターフェイスが用意されているので、tie 関数と組み合わせて使えば連想配列をあたかも設定順にデータが格納されるかのように扱うことができる。

以下、サンプルコード:
#!/usr/bin/perl
use strict;
use warnings;
use Tie::IxHash;
tie my %hashval, 'Tie::IxHash';
$hashval{ data1 } = 10;
$hashval{ data2 } = 20;
$hashval{ data3 } = 30;
$hashval{ data4 } = 40;
foreach my $k (keys %hashval) {
print "$k = $hashval{$k}\n";
}
これを実行すると、
$ perl ~/tmp/test2.pl data1 = 10 data2 = 20 data3 = 30 data4 = 40
となる。

ためしに7行目を
my %hashval;
に差し替えてみると
$ perl ~/tmp/test2.pl data4 = 40 data2 = 20 data3 = 30 data1 = 10
のようになり、Tie::IxHash の効果が確認できる。
posted by K/I at 16:43 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2013年06月10日

コマンドラインでのANDROIDアプリのコンパイルと署名

ANDROID アプリは Eclipse を使わずにコマンドラインでコンパイルと署名ができる。
できるのならやってみよう、というわけ。

試した環境は:
CentOS release 6.4
Android SDK Tools r22.0.1

以下、あらかじめ Eclipse で作成したプロジェクトがあることが前提。
プロジェクト名は HelloWorld とする。

1. 作業環境の整備

1.1 Android SDK Tools
まずは、Android Developers のサイトから SDK Tools をダウンロードしてインストールする。
Android Developers
http://developer.android.com/index.html
Develop > Tools > Download のページで、[DOWNLOAD FOR OTHER PLATFORMS] のところにある "SDK Tools Only" から、"Linux 32 & 64-bit" のファイルをダウンロード。
今回は "android-sdk_r22.0.1-linux.tgz" だった。

これを適当なところに展開する。
ここでは /opt ディレクトリの下に展開した。
toolsplatform-tools にパスを通しておいたほうが便利かもしれない。
$ export PATH=$PATH:/opt/android-sdk-linux/tools $ export PATH=$PATH:/opt/android-sdk-linux/platform-tools

設置したら、SDK を更新しておく。
# /opt/android-sdk-linux/tools/android update sdk --no-ui
1.2 Ant
使用した Android SDK Tools の r22.0.1 は、Ant 1.8.0 以上が必要なので、本家サイトからダウンロードしてくる。
Apache Ant
http://ant.apache.org/
Apache Antのサイトの "Binary Distributions" からダウンロードし、適当なディレクトリーに展開する。
ここでは /opt/apache-ant に解凍した。
そして、ANT_HOME に Ant のパスを設定し、ついでにパスも通しておく。
$ export ANT_HOME=/opt/apache-ant $ export PATH=$PATH:$ANT_HOME/bin

2. Android アプリのコンパイル

まずは、Eclipse で作成した Android アプリのパスに移動し、プロジェクトを update する。
$ android update project --target android-16 --path .
ターゲットは project.properties に書かれているものに合わせるといいかも。
local.propertiesbuild.xml の2ファイルが作られ、コンパイルできるようになる。
サブプロジェクトに関するコメントが表示されるがとりあえず無視。

コンパイルしてみる。
$ ant release
そうしたら以下のようなエラーが。。。:
BUILD FAILED /opt/android-sdk-linux/tools/ant/build.xml:650: The following error occurred while executing this line: /opt/android-sdk-linux/tools/ant/build.xml:691: Execute failed: java.io.IOEx ception: Cannot run program "/opt/android-sdk-linux/build-tools/17.0.0/aapt": error=2, そのようなファイルやディレクトリはありません ...
試しに /opt/android-sdk-linux/build-tools/17.0.0/aapt を実行してみると、/lib/ld-linux.so.2 が存在しない、というエラー。
linux.so.2 ファイルは、調べてみると glibc.i686 というパッケージに含まれるらしい。
$ yum provides ld-linux.so.2 Loaded plugins: fastestmirror, security Loading mirror speeds from cached hostfile * base: www.ftp.ne.jp * epel: ftp.iij.ad.jp * extras: www.ftp.ne.jp * updates: www.ftp.ne.jp glibc-2.12-1.107.el6.i686 : The GNU libc libraries Repo : base Matched from: Other : ld-linux.so.2
へぇ、glibc.i686glibc.x86_64 とは別なのか。。。
glibc.i686 をインストールして /opt/android-sdk-linux/build-tools/17.0.0/aapt を実行すると、今度はまた別のライブラリーが存在しないというエラーが。
ひとつひとつつぶしていくと、結局3つのパッケージの追加インストールが必要だった:
# yum install glibc.i686 # yum install zlib.i686 # yum install libstdc++.i686
コンパイルが成功すると bin ディレクトリの中に .apk ファイルが作られる。

3. 署名

3.1 鍵ペアーの生成
Android アプリに署名するための鍵ペアーは、keytool コマンドで生成できる。
keytool は JDK に含まれている。
$ keytool -genkey -v -keystore tan9.keystore -alias HelloWorld \ -dname "CN=Hello World, O=Tan9, L=Shinjuku, ST=Tokyo, C=JP" -keyalg RSA \ -keysize 2048 -validity 10000 -keypass 123456 -storepass 123456 $ keytool -list -keystore tan9.keystore
キーストアーファイルのファイル名 (上記 tan9.keystore)、パスワード (123456 2カ所)、識別名 (CN=Hello World, O=Tan9, L=Shinjuku, ST=Tokyo, C=JP) 等は適当に。
3.2 アプリへのデジタル署名
jarsigner コマンドを使ってアプリにデジタル署名する。
$ jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 \ -keystore tan9.keystore -storepass 123456 -keypass 123456 \ bin/HelloWorld-release-unsigned.apk HelloWorld 追加中: META-INF/MANIFEST.MF 追加中: META-INF/HELOWORL.SF 追加中: META-INF/HELOWORL.RSA 署名中: res/layout/main.xml 署名中: AndroidManifest.xml 署名中: resources.arsc 署名中: res/drawable-hdpi/ic_launcher.png 署名中: res/drawable-ldpi/ic_launcher.png 署名中: res/drawable-mdpi/ic_launcher.png 署名中: res/drawable-xhdpi/ic_launcher.png 署名中: classes.dex
これで bin/HelloWorld-release-unsigned.apk に署名が施される。
タグ:android Ant
posted by K/I at 00:52 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2013年05月12日

Cygwin での OpenSSH サーバーの設定

(1) 管理者権限で Cygwin Terminal を開く。
(2) ssh-host-config を実行。
このとき、-y オプションをつけておくと質問に勝手に答えて進んでくれる。
$ ssh-host-config -y
途中、cyg_server ユーザーを作成する箇所でパスワードを聞かれるので入力する。
(3) cygrunsrv コマンドでサービス開始する:
$ cygrunsrv -S sshd
タグ:OpenSSH cygwin
posted by K/I at 18:11 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする

2013年01月29日

Qを諦めてVMware fusionに。。。

Windowsマシンを潰してHadoopクラスターに供出したため、Windows 7のライセンスが1つ余った。
これを iMac に仮想マシンとしてインストールしてやろう。
そう思って Q を使ってインストールを試したものの、どうしてもホスト PC の CD-ROM ドライブを認識してくれない。
ブータブルISOイメージを作ろうとしたがこれも失敗。

半日かかって埒が明かず、とうとう諦めてVMware fusionを導入した。
さすがにこれは何の苦労も無くインストール開始でき、現在インストール中。

なんだか悔しい。
タグ:Qemu VMware
posted by K/I at 14:17 | 東京 ☀ | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2013年01月08日

iTunesでiPhoneとカレンダー同期ができなくなった

先日、今更ながら iMac の OS を Mountain Lion にアップグレードした。
おそらくその時から iPhone の同期がおかしくなっってしまったがく〜(落胆した顔)
iMac 上でカレンダーを更新しても iPhone に反映されないし、iPhone のカレンダーも iMac のカレンダーに反映されない。

いろいろ試したけれど、結局 Apple サイトに情報が書いてあってこれで解決しました:
http://support.apple.com/kb/TS2481?viewlocale=ja_JP&locale=ja_JP
posted by K/I at 15:37 | 東京 ☀ | Comment(0) | TrackBack(0) | 日記 | このブログの読者になる | 更新情報をチェックする

2013年01月03日

完全分散モードの Hadoop 導入手順 (CDH3)

Cloudera's Distrubution for Hadoop (CDH) を利用して、完全分散モードの Hadoop を導入したメモ。
今回は以下の構成とした。
マスターノード (CentOS 5.7)
ホスト名: master
Hadoop の NameNode/JobTracker
スレーブノード (Fedora 14)
ホスト名: slave
Hadoop の DataNode/TaskTracker
SecondaryNameNode は無し。
また、NameNode と JobTracker は分けたほうがよいようだが、今回はとりあえずこれで。
【参考】
  • http://codezine.jp/article/detail/2485
  • http://oss.nttdata.co.jp/hadoop/cdh.html
  • https://ccp.cloudera.com/display/FREE4DOC
  • http://wiki.apache.org/hadoop/
インストール前に、「Supported Operating Systems for CDH3」で CDH3 がサポートする OS かどうか確認しておく。
バージョンにも気をつける必要がある。
衣か、Hadoop のインストールまでは、マスターノード、スレーブノードほぼ共通。

1. Java Development Kit インストール

Java Development Kit (1.6 以上) をインストールする。
今回は、OpenJDK をインストールした。
【RedHat系】
# yum install java-1.6.0-openjdk java-1.6.0-openjdk-devel
【Debian系】
# apt-get install openjdk-6-jdk

2. CDH3 インストール

CDH3 を「CDH3 Installation」の手順に従ってインストールする。
【RedHat系】
# yum --nogpgcheck install http://archive.cloudera.com/redhat/cdh/cdh3-repository-1.0-1.noarch.rpm
# rpm --import http://archive.cloudera.com/redhat/cdh/RPM-GPG-KEY-cloudera
マスターノードの場合:
[root@master]# yum install hadoop-0.20 hadoop-0.20-native \
hadoop-0.20-namenode hadoop-0.20-jobtracker

スレーブノードの場合:
[root@slave]# yum install hadoop-0.20 hadoop-0.20-native \
hadoop-0.20-datanode hadoop-0.20-tasktracker

【Debian系】
# wget http://archive.cloudera.com/one-click-install/squeeze/cdh3-repository_1.0_all.deb
# dpkg -i cdh3-repository_1.0_all.deb
# apt-get update

マスターノードの場合:
[root@master]# apt-get install hadoop-0.20 hadoop-0.20-native \
hadoop-0.20-namenode hadoop-0.20-jobtracker

スレーブノードの場合:
[root@master]# apt-get install hadoop-0.20 hadoop-0.20-native \
hadoop-0.20-datanode hadoop-0.20-tasktracker

3. SSH 設定

マスターノードとスレードノードとは SSH でやり取りするので、パスワード無しで SSH ログインできるようにしておく (秘密鍵をパスワード無しにするか、ssh-agent などを使う)。
hdfs アカウントのホームディレクトリは /usr/lib/hadoop-0.20 に設定されているので、/usr/lib/hadoop-0.20 の下に .ssh ディレクトリを作成し、そこに鍵ペアを作る。
# mkdir /usr/lib/hadoop-0.20/.ssh
# chmod 02775 /usr/lib/hadoop-0.20/.ssh
# chgrp hadoop /usr/lib/hadoop-0.20/.ssh
# ssh-keygen -t rsa -N "" -f /usr/lib/hadoop-0.20/.ssh/id_rsa
# chmod 0660 /usr/lib/hadoop-0.20/.ssh/id_rsa
# chmod 0664 /usr/lib/hadoop-0.20/.ssh/id_rsa.pub
# touch /usr/lib/hadoop-0.20/.ssh/known_hosts
# chmod 0664 /usr/lib/hadoop-0.20/.ssh/known_hosts
# chmod 0755 /usr/lib/hadoop-0.20/.ssh
公開鍵を互いの /usr/lib/hadoop-0.20/.ssh 内に authorized_keys ファイルを作成して書き込み、互いに hdfs アカウントでパスワード無しにログインできることを確認する。
[root@master]# su - hdfs
[hdfs@master]$ ssh slave
[hdfs@slave]$ ssh master
[hdfs@master]$ exit
[hdfs@slave]$ exit
[hdfs@master]$ exit

4. Hadoop 設定

インストールした時点では empy の設定ファイルが設定されているので、これを別のディレクトリ (ここでは conf.cluster とした) にコピーして設定していく。

設定ディレクトリは、alternatives コマンドを使って切り替える。
【RedHat系】
# cp -dpR /etc/hadoop/conf.empty /etc/hadoop/conf.cluster
# alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf \
/etc/hadoop-0.20/conf.cluster 50

# alternatives --display hadoop-0.20-conf
【Debian系】
# cp -dpR /etc/hadoop/conf.empty /etc/hadoop/conf.cluster
# update-alternatives --install /etc/hadoop-0.20/conf hadoop-0.20-conf \
/etc/hadoop-0.20/conf.cluster 50

# update-alternatives --display hadoop-0.20-conf

マスターノード、スレーブノードの両方の /etc/hadoop/conf.cluster 内の設定ファイルを、たとえば以下のように書き換える:

設定ファイル: core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:54310</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/tmp</value>
</property>
</configuration>

設定ファイル: hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/var/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/var/hadoop/dfs/data</value>
</property>
</configuration>

設定ファイル: mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:54311</value>
</property>
<property>
<name>mapred.local.dir</name>
<value>/var/hadoop/mapred</value>
</property>
</configuration>

設定ファイル: masters
master

設定ファイル: slaves
slave

環境変数設定ファイル: hadoop-env.sh
# 【RedHat系】
export JAVA_HOME=/usr/lib/jvm/java
# 【Debian系】
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk

対応するディレクトリを作成する。
# mkdir -p /var/hadoop/tmp \
/var/hadoop/dfs/name \
/var/hadoop/dfs/data \
/var/hadoop/mapred

# chown hdfs:hadoop /var/hadoop/tmp \
/var/hadoop/dfs/name \
/var/hadoop/dfs/data

# chown mapred:hadoop /var/hadoop/mapred
# chmod 0777 /var/hadoop/tmp
# chmod 0700 /var/hadoop/dfs/name
# chmod 0755 /var/hadoop/dfs/data \
/var/hadoop/mapred

5. ポートの開放

Hadoop がデフォルトで使用するポート番号が「Hadoop Default Ports Quick Reference」にあるので、必要に応じてルーターやファイアウォール等の設定を変更する。

6. NameNode / DataNode の起動

マスターノードで、NameNode をフォーマットする。
[root@master]# su - hdfs
[hdfs@master]$ hadoop namenode -format
[hdfs@master]$ exit

ここで以下のようなエラーが出る場合は、環境変数 JAVA_HOME が正しく設定されていない可能性がある:
+======================================================================+
|      Error: JAVA_HOME is not set and Java could not be found         |
+----------------------------------------------------------------------+
| Please download the latest Sun JDK from the Sun Java web site        |
|       > http://java.sun.com/javase/downloads/ <                      |
|                                                                      |
| Hadoop requires Java 1.6 or later.                                   |
| NOTE: This script will find Sun Java whether you install using the   |
|       binary or the RPM based installer.                             |
+======================================================================+

マスターノードの NameNode、スレーブノードの DataNode を起動する。
マスターノード:
[root@master]# service hadoop-0.20-namenode start
スレーブノード:
[root@slave]# service hadoop-0.20-datanode start
NameNode、DataNode が稼働しているかどうかは、ブラウザーで以下の URL にアクセスすることで確認できる。
http://master:50070/
"Live Nodes" の数値が稼働している DataNode の数。

7. JobTracker / TaskTracker の起動

マスターノードの HDFS 上に /mapred/system ディレクトリを作成する。
[root@master]# su - hdfs
[hdfs@master]$ hadoop fs -mkdir /mapred/system
[hdfs@master]$ hadoop fs -chown -R mapred:supergroup /
[hdfs@master]$ hadoop fs -chmod -R 0700 /mapred
[hdfs@master]$ exit
マスターノードの JobTracker、スレーブノードの TaskTracker を起動する。
マスターノード:
[root@master]# service hadoop-0.20-jobtracker start
スレーブノード:
[root@slave]# service hadoop-0.20-tasktracker start
JobTracker、TaskTracker が稼働しているかどうかは、ブラウザーで以下の URL にアクセスすることで確認できる。
http://master:50030/
Cluster Summary の "Nodes" の数値が稼働している TaskTracker の数。

8. サンプルコードの実行

パッケージにはサンプルコードが添えられているので試しに実行してみる。
[root@master]# su - mapred
[mapred@master]$ cd /usr/lib/hadoop
[mapred@master]$ hadoop jar hadoop-examples.jar pi 1 10 【変更履歴】 2013-01-22 記述全体を手直し
タグ:Hadoop CDH
posted by K/I at 01:06 | 東京 ☀ | Comment(0) | TrackBack(0) | 技術メモ | このブログの読者になる | 更新情報をチェックする