[Mac] Sphinx インストール
以前「入門してみた」と言いっぱなしの Sphinx を Mac にインストールした。今後やりたいと思っている事で多いに活躍してもらいたい為だ。
■ 環境
- Mac OS X
- Homebrew
■ インストール
パッケージを確認する。
$ brew search sphinx cmu-pocketsphinx cmu-sphinxbase sphinx
それっぽいものがあったのでインストールする。
$ brew install sphinx
これだと違うものがインストールされてしまう。sphinxsearch の方っぽい。
というわけで Homebrew でのインストールは諦めるとして、easy_install からインストールすることにする。まずは sphinxsearch の方を削除しておく。
$ brew uninstall sphinx
python と easy_install を確認する。
$ which python /usr/bin/python $ python --version Python 2.7.1 $ which easy_install /usr/bin/easy_install
インストールされていたので Sphinx をインストールする。
$ sudo easy_install sphinx
以上。
■ 関連
[Mac] tmux を Homebrew でインストール
ターミナルを複数の画面(ペイン?)に分割する際は、今までは以前インストールした iConsole に頼ってきた。しかし screen だとか tmux とやらを勧められることもあって、今回 tmux を Mac にインストールしてみる。
■ 環境
- Mac OS X
- Homebrew
■ インストール
確認。
$ brew search tmux tmux adamv/alt/tmux-iterm2
インストール。
$ brew install tmux ==> Installing tmux dependency: libevent ==> Downloading https://github.com/downloads/libevent/libevent/libevent-2.0.18-stable.tar.gz ######################################################################## 100.0% ==> ./configure --prefix=/usr/local/Cellar/libevent/2.0.18 ==> make ==> make install /usr/local/Cellar/libevent/2.0.18: 48 files, 1.8M, built in 31 seconds ==> Installing tmux ==> Downloading http://sourceforge.net/projects/tmux/files/tmux/tmux-1.6/tmux-1.6.tar.gz ######################################################################## 100.0% ==> ./configure --prefix=/usr/local/Cellar/tmux/1.6 --sysconfdir=/usr/local/etc ==> make install ==> Caveats Bash completion script was installed to: /usr/local/etc/bash_completion.d/tmux ==> Summary /usr/local/Cellar/tmux/1.6: 5 files, 504K, built in 13 seconds
下記の依存があった様子。
- libevent-2.0.18
■ 使い方
とりあえず画面分割と、画面間の移動だけをメモしておく。
$ tmux
画面を縦に分割。
control - B → %
画面を横に分割。
control - B → "
分割した画面の移動
control - B → O
もしくは
control - B → 矢印[←↑→↓]
これで iConsole に頼らなくても良いな。screen も一度覚えようと随分前に思っていたのだが結局たいして使わずにきてしまったので、今後は tmux を少し勉強して使えるようになろうと思う。
以上。
■ 関連
[Mac] PostgreSQL.app をアンインストール
インストールしてみたは良いものの、やはり違和感満載なので削除することにした。ユーザが作成されるとログイン画面にも postgres ユーザが表示されるし。。。
Finder で Application 内にある PostgreSQL 9.1 のディレクトリをゴミ箱に送ってみたが、これではどうやら駄目な様子。
Finder にて『デバイス』→『Macintosh HD』→『ライブラリ』→『PostgreSQL』→『9.1』→『uninstall-postgresql.app』ダブルクリックする。
パスワードを入力すると、削除しても良いか確認される。
Data Directory は postgres ユーザのモノだから削除できない旨のメッセージがあったので、終了後 /Library/PostgreSQL 9.1 のディレクトリも削除した。
ユーザ設定からも postgres ユーザ自体を削除した。
これで一安心。
以上。
■ 関連
Jersey Test Framework を使ってテストケース作成
以前作成した Jersey + Tomcat に今回は JUnit を使ったテストを追加していく。
まずは以前作成した Eclipse のプロジェクトはここまで。
Jersey には Jersey Test Framework というものがあるらしい。
http://jersey.java.net/nonav/documentation/latest/test-framework.html
というわけで、今回はこれを利用して以前作成した JerseySample プロジェクトの HelloResource にテストケースを追加してみる。
まずは必要な jar ファイルを前述の URL からダウンロードする。自分は『7.5 Running tests outside Maven』からそれぞれ必要な jar をダウンロードした。ダウンロードした jar は下記の通り。
- jersey-test-framework-grizzly
- jersey-test-framework-core
- javax.servlet
- jaxb-impl
- jaxb-api
- :
とりあえず、『7.5 Running tests outside Maven』に記載されていてローカルに無い jar は全てダウンロードしておいた。ダウンロードしたファイルは、Java 的にはどこに配置しておくのが良いのだろう?今回はとりあえず動作だけを知りたいのであまり考えない。JerseySample の配下に work ディレクトリが存在するので、この中に lib ディレクトリを作成し、全て突っ込んでおいた。
■ テストケース
では実際にテストケースを作成してみる。
WEB-INF/src 配下に resource が配置されているが、今回は WEB-INF/test ディレクトリを作成しテストケースを配置することにする。テストケースは HelloResource.java を右クリック → New → JUnit Test Case を選択する。
Source Folder は先に作成しておいた JerseySample/WEB-INF/test に変更している。Finish で作成。
こちら(http://d.hatena.ne.jp/momijiame/20120101/1325432126)も参照させて貰って最終的に下記のように作成した。
package net.withsin.rest.resources;
import static org.junit.Assert.*;
import org.junit.Test;
import com.sun.jersey.api.client.Client;
import com.sun.jersey.api.client.ClientResponse;
import com.sun.jersey.api.client.WebResource;
import com.sun.jersey.test.framework.JerseyTest;
public class HelloResourceTest extends JerseyTest {
public HelloResourceTest() {
super("net.withsin.rest.resources");
}
@Test
public void test() {
Client client = Client.create();
WebResource webResource = client.resource("http://localhost:9998/hello");
ClientResponse response = webResource.get(ClientResponse.class);
String responseMsg = response.getEntity(String.class);
assertEquals("Hello Jersey", responseMsg);
}
}
■ 実行
HelloResourceTest.java を選択し、右クリック → Run As → JUnit Test
Failure で失敗している。これは前述している各種 jar ファイルが関連付けられていないから。再度 PackageExplorer から HelloResourceTest.java を選択し、右クリック → Run As → Run Configurations…
Classpath のタブから User Entries を選択し、右側の Add External JARS… ボタン。前述の JerseySample/work/lib 配下に配置してある全ての jar を選択し追加する。
Apply → Run で実行し、結果を確認してみよう。
Grizzly が内部で起動され、http://localhost:9998/hello にアクセスし、取得した結果と “Hello Jersey” の文字列を比較している。
これでテストケースも書けるだろう。
■ はまった点
WebResource webResource = client.resource("http://localhost:9998/hello");
この行を当初下記のようにしてしまっていた。
WebResource webResource = client.resource("http://localhost:9998/JerserySample/sample/hello");
JUnit を実行すると、404 で返却されているようで Failer のまま。よくよく考えてみれば『/JerseySample/sample』の箇所は Tomcat に設定をしているだけで、HelloResource.java が分かっているのは『/hello』の path のみ。というわけで、『http://localhost:9998』に付け加えるのは『/hello』だけなので良いのだ。JUnit だって『/JerseySample/sample』までは見られないし。。。ということに気がつくのにしばし時間が掛かってしまった。単純なことなのになぁ。
以上。
■ 関連
Mac でバックスラッシュ(\)の入力
PostgreSQL のクライアント psql では多用するバックスラッシュが、Mac でどうやって入力すれば良いのか分からなかったので調べてみたら
Option + ¥
だそうだ。これ以外にも Option + 何かでいろいろな文字が入力できた。Apple のリンゴマークとか。バックスラッシュだけは覚えておかねば・・・。
以上。
■ 関連
Mac に PostgreSQL をインストール
しばらく利用することがなくなっていたのだが、動作確認用に Mac に PostgreSQL をインストールすることにした。
■ 環境
- Mac OS X
Homebrew でもインストール可能なようであるが、今回は Mac の Application としてインストールしてみようと思う。
$ brew search postgres postgresql homebrew/versions/postgresql8 homebrew/versions/postgresql9
■ インストール
『Download』→『Mac OS X』→『Mac OS X 10.4+』とリンクを押していく。
表示された画面にて『Mac OS X』の画像リンクを押す。version は現時点での最新版である『9.1.3』にしておいた。
ダウンロードされたファイル名は『postgresql-9.1.3-1-osx.dmg』
ダウンロード完了後、このファイルをダブルクリックしてみる。
次いで『postgresql-9.1.3-1-osx.app』をダブルクリックして実行。いくつかダイアログが表示され、パスワードを入力し、実行された様子。
/etc/sysctl.conf が編集されたようだ。中身を確認してみたところ元々存在していなかったのかな?という感じ。設定は下記の通りなので、『PostgreSQL をインストールした時に設定された』ということをここにメモしておくので素直に reboot することにした。
$ cat /etc/sysctl.conf # postgresql.app kern.sysv.shmmax=33554432 kern.sysv.shmmin=1 kern.sysv.shmmni=256 kern.sysv.shmseg=64 kern.sysv.shmall=8192
reboot 後、再度『postgresql-9.1.3-1-osx.app』を実行する。
Next
Install Directory もデフォルトままにしておく。
Next
Data Directory もデフォルトままにしておく。
Next
Password 管理者用に設定。
Next
Port もデフォルトままにしておく。
Next
Advanced Options にて、Locale は ja_JP.UTF-8 を選択した。
Next
Install を実行する。
Next
インストールされたようだ。
Stack Builder とやらで、他にもアプリがインストールされるようなのでせっかくなのでやってみよう。
次へ進む
どうやら他の version もインストールできるようだ。他にも tool や PostGIS, Slony-I までインストールできるのか。とりあえず今回は必要ないのでキャンセルで抜けておく。
Launchpad に PostgreSQL 関連のアプリケーションがいろいろ入った。
- pgAdmin III
- Reload Configuration
- SQL Shell(psql)
- Application Stack Builder
- 各種ドキュメント(HTML)
しかも PostgreSQL の server process も起動してくれている様子。
$ ps auxwww | grep postgres withsin 823 0.0 0.0 2434892 540 s000 R+ 2:29PM 0:00.00 grep postgre postgres 592 0.0 0.0 2446104 488 ?? Ss 2:21PM 0:00.03 postgres: stats collector process postgres 591 0.0 0.0 2477876 1784 ?? Ss 2:21PM 0:00.03 postgres: autovacuum launcher process postgres 590 0.0 0.0 2477744 580 ?? Ss 2:21PM 0:00.10 postgres: wal writer process postgres 589 0.0 0.0 2477744 1204 ?? Ss 2:21PM 0:00.14 postgres: writer process postgres 587 0.0 0.0 2446104 356 ?? Ss 2:21PM 0:00.03 postgres: logger process postgres 586 0.0 0.2 2477744 7628 ?? Ss 2:21PM 0:00.15 /Library/PostgreSQL/9.1/bin/postmaster -D/Library/PostgreSQL/9.1/data
この起動スクリプトはどこにあるのだろう?というかそもそも Mac では起動スクリプトはどのように動作しているのだろう?今後の課題として残しておく。
Launchpad にあった SQL Shell(psql) とやらを使って接続してみようと起動してみたら・・・単なるターミナルが起動した。自分でコマンド実行しろってことなのね。だったらこんなのいちいち作るなよ!と思ってしまったが落ち着こう。普段使用しているターミナルから実行する。
$ psql Password: ******** psql: FATAL: password authentication failed for user "withsin"
Password には先ほど設定したものを入れてみたがログイン失敗。ユーザが withsin になっているせいだね。postgres ユーザで実行しよう。
$ psql -U postgres
Password for user postgres: ********
psql (9.0.5, server 9.1.3)
WARNING: psql version 9.0, server version 9.1.
Some psql features might not work.
Type "help" for help.
postgres=#
ログインができた。
しかし・・・Mac でバックスラッシュってどう入力するんだ???というのはまた別で。今回は control + D で抜けておいた。
一旦はインストールが確認できたので、サーバプロセスも停止し終了としたい。が、サーバプロセスの(Macでの正しい)落とし方がわからない。。。というわけでいつも通りコマンドから停止しておく。postgres ユーザで起動されているのでちょいと一手間。
$ sudo su - postgres $ /Library/PostgreSQL/9.1/bin/pg_ctl stop -D /Library/PostgreSQL/9.1/data waiting for server to shut down.... done server stopped
■ 課題
いろいろ課題が残ってしまったので最後に整理。
- Mac の起動プロセスを知りたい
- バックスラッシュの入力方法
- Mac における PostgreSQL サーバプロセスの起動・停止の正しいやり方
今後はこれらも見ておく。
以上。
■ 関連
- Mac Book Air – メモ
- PostgreSQL – 9.0.1 install (source/CentOS-5)
Mac に Homebrew で ec2-api-tools インストール
最近は MacBookAir での作業が増えたので、今までは Ubuntu で EC2 関連の作業もしていたのだが、Mac でも作業をしたい!というわけで以前から Ubuntu では使用している ec2-api-tools をインストールし使ってみることにする。
■ 環境
- Mac OS X
- Homebrew
Homebrew で ec2-api-tools が使えるかまずは確認してみよう。
$ brew search ec2 ec2-ami-tools ec2-api-tools
今回インストールしたい ec2-api-tools だけでなく ec2-ami-tools もある様子。とりあえず ec2-api-tools のみを Homebrew でインストールすることにする。
$ brew install ec2-api-tools ==> Downloading http://ec2-downloads.s3.amazonaws.com/ec2-api-tools-1.5.2.5.zip ######################################################################## 100.0% ==> Caveats Before you can use these tools you must export some variables to your $SHELL and download your X.509 certificate and private key from Amazon Web Services. Your certificate and private key are available at: http://aws-portal.amazon.com/gp/aws/developer/account/index.html?action=access-key Download two ".pem" files, one starting with `pk-`, and one starting with `cert-`. You need to put both into a folder in your home directory, `~/.ec2`. To export the needed variables, add them to your dotfiles. * On Bash, add them to `~/.bash_profile`. * On Zsh, add them to `~/.zprofile` instead. export JAVA_HOME="$(/usr/libexec/java_home)" export EC2_PRIVATE_KEY="$(/bin/ls $HOME/.ec2/pk-*.pem)" export EC2_CERT="$(/bin/ls $HOME/.ec2/cert-*.pem)" export EC2_HOME="/usr/local/Cellar/ec2-api-tools/1.5.2.5/jarps" ==> Summary /usr/local/Cellar/ec2-api-tools/1.5.2.5: 322 files, 15M, built in 30 seconds
インストール完了。
インストール先も、他の Homebrew でインストールしたものと同様に /usr/local/bin 配下にシンボリックリンクが作成された。とくに PATH を指定する必要もなさそう。/usr/bin 配下に随分とモノが置かれるようになってしまって少々見辛いが仕方がないので気にしない。
■ 動作確認
とりあえず version を確認する。
$ ec2ver /usr/local/bin/ec2ver: line 9: EC2_HOME: EC2_HOME is not set
環境変数に設定を入れていないので実行されない。この設定は Homebrew でのインストール時に表示されていたもの書けば良いだろう。また、~/.ec2 ディレクトリを作成し、各種鍵ファイルを配置しておくことにする。
$ mkidr ~/.ec2 $ mv pk-*.pem cert-*.pem ~/.ec2 $ chmod 600 ~/.ec2/*.pem
環境変数には前述の通り、下記を .bash_profile に設定しておく。
export JAVA_HOME="$(/usr/libexec/java_home)" export EC2_PRIVATE_KEY="$(/bin/ls $HOME/.ec2/pk-*.pem)" export EC2_CERT="$(/bin/ls $HOME/.ec2/cert-*.pem)" export EC2_HOME="/usr/local/Cellar/ec2-api-tools/1.5.2.5/jars" export EC2_URL=http://ec2.ap-northeast-1.amazonaws.com
EC2_URL は、東京リージョンを普段は使用する為に追加している。また、EC2_HOME の PATH が、最後 jarps になっているが、コピペの失敗なのか、はたまた当初から間違えているのかわからないが jars の間違いだろう。修正して設定している。
では再度 version を確認してみよう。
$ ec2ver 1.5.2.5 2012-03-01
version が取得できたので正常に稼働してくれるだろう。
以上。
■ 関連
#2:Hadoop 用ノードの Linux OS 設定
ファイルディスクリプタに関してと、Linux Kernel パラメータに関して記載されている。ファイルディスクリプタを増やすのは高負荷な環境になってくるとよくやる事だが、Kernel パラメータを触る事は多くなかった。詳しくないというのが一番の理由だったが。。。
手元に CentOS や RHEL が無いので、MacBookAir と Ubuntu だけなのだが、ulimit の結果を確認してみよう。
■ Mac OS X
default での ulimit の結果。
withsin@Mac: ~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited file size (blocks, -f) unlimited max locked memory (kbytes, -l) unlimited max memory size (kbytes, -m) unlimited open files (-n) 256 pipe size (512 bytes, -p) 1 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 709 virtual memory (kbytes, -v) unlimited
ファイルディスクリプタ(open files)が Ubuntu に比べてもかなり少ない。これは設定しないといけないだろう。 max user processes も少ないように思えるで Mac で Hadoop を動作させる場合には設定をあげておいた方が無難な気がする。
■ Ubuntu 12.04
default での ulimit での結果。
withsin@ubuntu:~$ ulimit -a core file size (blocks, -c) 0 data seg size (kbytes, -d) unlimited scheduling priority (-e) 0 file size (blocks, -f) unlimited pending signals (-i) 15994 max locked memory (kbytes, -l) 64 max memory size (kbytes, -m) unlimited open files (-n) 1024 pipe size (512 bytes, -p) 8 POSIX message queues (bytes, -q) 819200 real-time priority (-r) 0 stack size (kbytes, -s) 8192 cpu time (seconds, -t) unlimited max user processes (-u) 15994 virtual memory (kbytes, -v) unlimited file locks (-x) unlimited
ローカル環境での動作確認を行う程度であれば、設定(ファイルディスクリプタ/ Kernel パラメータ)は特に変えるほどのものではないだろう。実際の運用や大規模になった場合、小規模でも高負荷・高アクセスの場合には十分に Hadoop Hacks に記載されている各パラメータを確認し適用するのが良いだろう。
以上。
■ 関連
Eclipse 起動時に出力される Warning
Ubuntu で Eclipse を使用する場合、いつもターミナルから Eclipse のバイナリを実行しているのだが、コマンド実行時に下記の Warning がターミナルに出力されている。
特に気にしていたわけではないのだが、Emacs のコマンドからの実行時にも出力されていたので対応を調べてみた。
$ eclipse & (eclipse:9459): Gtk-WARNING **: module_path にはテーマ・エンジンがありません: "pixmap", (eclipse:9459): Gtk-WARNING **: module_path にはテーマ・エンジンがありません: "pixmap", (eclipse:9459): Gtk-WARNING **: module_path にはテーマ・エンジンがありません: "pixmap", (eclipse:9459): Gtk-WARNING **: module_path にはテーマ・エンジンがありません: "pixmap",
どうやら gtk2-engines-pixbuf というパッケージをインストールすれば良いらしい。
$ sudo apt-cache search gtk2-engines-pixbuf gtk2-engines-pixbuf - Pixbuf-based theme for GTK+ 2.x
パッケージの説明を見てみたが特に問題があるようには思えなかったのでインストールしてしまった。
$ sudo apt-get install gtk2-engines-pixbuf
これで Eclipse や Emacs の実行時にも不要な Warining は出力されることが無くなった。
以上。
#1:Hadoop 動作に必要なパラメータ
紹介されていたパラメータ(設定項目)の中からいくつか。
dfs.name.dir (hdfs-site.xml)
複数設定可能。NameNode がメタデータを保存するディレクトリに該当する様子。複数のディレクトリをカンマ区切りで設定可能との事で、バックアップ用途に使えるようだ。SecondaryNameNoe もほぼバックアップ用途というイメージでいるのだが、この違いは何であるのか?単純に考えると、SecondaryNameNode へは一定期間毎に NameNode からデータのコピーが書き込まれるが、dfs.name.dir で設定したディレクトリには常時書き込みが行われる・・・というものであろうか?となると、dfs.name.dir で複数のディレクトリを設定した場合、Hadoop Hacks にもある通り、1つを NFS や NAS に設定すれば SecondaryNameNode は不要なのかもしれない。
dfs.data.dir (hdfs-site.xml)
DataNode における、データ保存ディレクトリ設定。DataNode が起動している Host において、複数の HDD が接続されている場合には I/O が分散され、特に有効となると思われる。そういえば以前、複数の HDD であれば RAID0 を組むよりも、それぞれ mount して、このパラメータで指定した方が性能があがる、というような記述を見た記憶がある。実際に測定してみたいところではあるが、機器がないので今回は諦めよう。いずれ機会があれば。
mapred.local.dir (mapred-site.xml)
JobTracker/TaskTracker で使用される。Map/Reduce 処理で一時的に使用される temp 領域的なものであろうか。
以上。
■ 関連
- [Book] Hadoop Hacks
- Hadoop Tips





















