Ruby の minitest の実行結果を見やすくする

turn インストール

sudo gem install turn

turn を require

require 'turn'

require 'turn' 追加前

Run options: --seed 13498

# Running tests:

.....404 => Net::HTTPNotFound
.

Finished tests in 5.601569s, 1.0711 tests/s, 2.4993 assertions/s.

6 tests, 14 assertions, 0 failures, 0 errors, 0 skips

require 'turn' 追加後

Loaded Suite

Started at 2012-04-07 17:50:53 +0900 w/ seed 54412.

TestAccessYFDB
     PASS test_select_stock (0:00:00.002)
     PASS test_select_stock_unit (0:00:00.002)

TestJSF
     PASS test_get_loanable_stocks (0:00:04.534)

TestSBI
     PASS test_check_exist (0:00:05.068)
     PASS test_get_trading_unit (0:00:05.477)

TestYahooFinance
404 => Net::HTTPNotFound
     PASS test_get_detail (0:00:06.210)

Finished in 6.210332 seconds.

6 tests, 6 passed, 0 failures, 0 errors, 0 skips, 14 assertions

fluent と hoop を使って HDFS にリアルタイムにログを流す

概要

複数台のWebサーバのログを fluent と hoop を使ってリアルタイムにHDFSに追記していくテスト。
より頻度の高い行動解析を行うことができるようになる?
参考にしたブログ: tagomorisのメモ置き場

テスト構成

# 初めてテキストで図書いた。
# 線を交差させる所で面倒くさくなって適当に...
web01 server      fluent master
+---------+       +---------+
| Fluentd |--+--->| Fluentd |--+
+---------+  |+-->+---------+  |   Proxy
             ||                +-->+--------+   +--------+
             ||                    |  hoop  |-->|  HDFS  |
web02 server ||   fluent slave +-->+--------+   +--------+
+---------+  +|-->+---------+  |
| Fluentd |---+-->| Fluentd |--+
+---------+       +---------+

環境

CentOS 5.7 64bit
Hadoop 0.20.2-CDH3u3

hoop

今回はNameNode(hadoop-nn01)にインストール

maven インストール(hoop ビルドに必要)

wget http://ftp.riken.jp/net/apache//maven/binaries/apache-maven-3.0.4-bin.tar.gz -P /home/src/archives
tar zxvfC /home/src/archives/apache-maven-3.0.4-bin.tar.gz /usr/local
cd /usr/local/
ln -s apache-maven-3.0.4 maven
vi /etc/profile
 #=============
 MAVEN_HOME=/usr/local/maven
 PATH=$PATH:$MAVEN_HOME/bin
 #=============

source /etc/profile

hoop インストール

wget --no-check-certificate https://github.com/cloudera/hoop/zipball/master -O cloudera-hoop-43f595d.zip -P /home/src/archives
cd /home/src
unzip archives/cloudera-hoop-43f595d.zip
cd cloudera-hoop-43f595d
# ビルドのテスト通らなかったのでテストスキップさせてます
mvn clean package site assembly:single -Dmaven.test.skip=true
cp -r ./hoop-distro/target/hoop-0.1.0-SNAPSHOT/hoop-0.1.0-SNAPSHOT /usr/local/
cd /usr/local
ln -s hoop-0.1.0-SNAPSHOT/ hoop
chown -R hadoop. hoop
cd hoop
# hadoopのcore-site.xmlに以下設定を追記(許可設定?)
vi /usr/local/hadoop/conf/core-site.xml
 #=============
  <property>
    <name>hadoop.proxyuser.hadoop.hosts</name>
    <value>*</value>
  </property>

  <property>
    <name>hadoop.proxyuser.hadoop.groups</name>
    <value>*</value>
  </property>
 #=============

vi conf/hoop-site.xml
 #=============
 <configuration>
   <property>
     <name>hoop.hadoop.conf:fs.default.name</name>
     <value>hdfs://hadoop-nn01:9000</value>
   </property>
 </configuration>
 #=============

vi conf/hoop-env.sh
 #=============
 export HOOP_LOG=/var/log/hoop
 #=============

mkdir /var/log/hoop
chown hadoop. /var/log/hoop
chown -R hadoop. /usr/local/hoop/

hoop 起動

[hadoop@hadoop-nn01]$ /usr/local/hoop/bin/hoop.sh start

hoop 動作確認

echo "test" > test.txt
curl -X POST 'http://hadoop-nn01:14000/user/hadoop/test.txt?op=create&user.name=hadoop' --data-binary @test.txt --header "content-type: application/octet-stream"
curl -X GET 'http://hadoop-nn01:14000/user/hadoop/test.txt?user.name=hadoop&offset=-1&len=1000'
test

fluent

各サーバ(今回はwebサーバ、fluentdサーバ)にインストールする

Ruby インストール

# libyaml目当て
wget http://pyyaml.org/download/libyaml/yaml-0.1.4.tar.gz -P /home/src/archives
tar zxvfC /home/src/archives/yaml-0.1.4.tar.gz /home/src
cd /home/src/yaml-0.1.4
./configure
make
make install

# ruby
wget ftp://ftp.ruby-lang.org/pub/ruby/1.9/ruby-1.9.3-p125.tar.bz2 -P /home/src/archives
tar jxvfC /home/src/archives/ruby-1.9.3-p125.tar.bz2 /home/src
cd /home/src/ruby-1.9.3-p125
./configure
make
make install

fluent インストール

# まず gem をアップデート(習慣)
gem update --system

# fluent
gem install fluent

# fluent -> hoop のためのプラグイン
gem install fluent-pluing-hoop

# セットアップ(設定ファイルテンプレなど生成)
fluentd --setup /etc/fluent

設定ファイル書き

・web01

[root@web01]# vi /etc/fluent/web_server.conf

<source>
  type tail
  format apache
  tag apache.access.01
  path /var/log/apache2/access_log
  pos_file /var/tmp/access_log.pos
</source>
<match apache.access.01>
  type forward
  retry_limit 2

  <server>
    # fluentd master
    host 192.168.56.102
    port 24224
  </server>

  <secondary>
    <server>
      # fluentd slave
      host 192.168.56.103
      port 24224
    </server>
  </secondary>
</match>
・web02

[root@web02]# vi /etc/fluent/web_server.conf

<source>
  type tail
  format apache
  tag apache.access.02
  path /var/log/apache2/access_log
  pos_file /var/tmp/access_log.pos
</source>
<match apache.access.02>
  type forward
  retry_limit 2

  <server>
    # fluentd master
    host fluent01
    port 24225
  </server>

  <secondary>
    <server>
      # fluentd slave
      host fluent02
      port 24225
    </server>
  </secondary>
</match>
・fluentd server(master, slave 同じ設定)

# 1プロセス1webサーバに対応させてみる
[root@fluent01]# vi /etc/fluent/fluentd_server_web01.conf
[root@fluent02]# vi /etc/fluent/fluentd_server_web01.conf

<source>
  type forward
  port 24224
</source>
<match apache.access.01>
  type hoop
  hoop_server hadoop-nn01:14000
  # 毎時でログを区切る
  path /user/hadoop/%Y%m%d%H_apache.log
  username hadoop
  #time_slice_wait 30s
  flush_interval 5s
</match>

[root@fluent01]# vi /etc/fluent/fluentd_server_web02.conf
[root@fluent02]# vi /etc/fluent/fluentd_server_web02.conf

<source>
  type forward
  port 24225
</source>
<match apache.access.02>
  type hoop
  hoop_server hadoop-nn01:14000
  # 毎時でログを区切る
  path /user/hadoop/%Y%m%d%H_apache.log
  username hadoop
  #time_slice_wait 30s
  flush_interval 5s
</match>

fluentd 起動

# web01
[root@web01]# fluentd -c /etc/fluent/web_server.conf &

# web02
[root@web01]# fluentd -c /etc/fluent/web_server.conf &

# fluent01
[root@fluent01]# fluentd -c /etc/fluent/fluentd_server_web01.conf &
[root@fluent01]# fluentd -c /etc/fluent/fluentd_server_web02.conf &

# fluent02
[root@fluent02]# fluentd -c /etc/fluent/fluentd_server_web01.conf &
[root@fluent02]# fluentd -c /etc/fluent/fluentd_server_web02.conf &

動作確認

# webサーバでホストされているページにアクセス
curl -i http://example.localhost/

# ログファイル生成確認
hadoop fs -ls /user/hadoop/*_apache.log
-rw-r--r--   3 hadoop supergroup        815 2012-03-21 20:36 /user/hadoop/2012032120_apache.log

# 生成されたログファイル閲覧(出力結果長かったので一部抜粋)
hadoop fs -cat /user/hadoop/2012032120_apache.log
2012-03-21T11:35:41Z    apache.access.01        {"host":"192.168.56.1","user":"-","method":"GET","path":"/","code":"200","size":"413","referer":"-","agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.117 Safari/535.19"}
2012-03-21T11:35:41Z    apache.access.02        {"host":"192.168.56.1","user":"-","method":"GET","path":"/","code":"200","size":"413","referer":"-","agent":"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.117 Safari/535.19"}

Elephant Bird インストールメモ

pigの出力結果を圧縮した状態で出力するテストのために導入

環境

CentOS 5.7 64bit
JDK 6u30 64bit
Apache Ant 1.8.2
Hadoop 0.20.2-cdh3u3
Pig 0.8.1-cdh3u3
Hadoop-LZO 0.4.15

thrift(version 0.5.0 指定) インストール

yum install php-devel python-devel
wget http://archive.apache.org/dist/incubator/thrift/0.5.0-incubating/thrift-0.5.0.tar.gz -P /home/src/archives
tar zxvfC archives/thrift-0.5.0.tar.gz /home/src
cd /home/src/thrift-0.5.0
./configure
make
make install

Protocol Buffer(version 2.3.0 指定) インストール

wget http://protobuf.googlecode.com/files/protobuf-2.3.0.tar.gz -P /home/src/archives
tar zxvfC archives/protobuf-2.3.0.tar.gz /home/src
cd /home/src/protobuf-2.3.0
./configure
make
make install

Elephant Bird ビルド

wget --no-check-certificate https://github.com/kevinweil/elephant-bird/tarball/v2.1.3 -P /home/src/archives -O elephant-bird-v2.1.3.tar.gz
tar zxvfC archives/elephant-bird-v2.1.3.tar.gz /home/src
cd /home/src/kevinweil-elephant-bird-8594985
ant release-jar

できた jar ファイルを適当なところにコピー

cp /home/src/kevinweil-elephant-bird-8594985/dist/elephant-bird-2.1.3.jar /usr/local/hadoop/lib/

テスト

$ echo -e "test\nasdf\nghjk" > test.txt
$ hadoop fs -put test.txt .
$ pig
grunt> ls test.txt
hdfs://hadoop-nn01:9000/user/hadoop/test.txt<r 1>       15
grunt> register /usr/local/hadoop/lib/hadoop-lzo-0.4.15.jar
grunt> register /usr/local/hadoop/lib/elephant-bird-2.1.3.jar
grunt> A = load 'test.txt' using TextLoader();
grunt> B = FILTER A BY $0 MATCHES 'test';
grunt> store B into 'test.txt.lzo' using com.twitter.elephantbird.pig.store.LzoPigStorage();
grunt> ls test.txt.lzo
hdfs://hadoop-nn01:9000/user/hadoop/test.txt.lzo/_logs  <dir>
hdfs://hadoop-nn01:9000/user/hadoop/test.txt.lzo/part-m-00000.lzo<r 1>  55
grunt> quit
$ hadoop fs -get test.txt.lzo/part-m-00000.lzo .
$ echo `lzop -dc part-m-00000.lzo`
test

CUI環境の Linux に Dropbox をインストール

環境

Debian Squeeze x86_64

Dropboxインストール

Dropboxダウンロード & 展開
$ cd ~ && wget -O - http://www.dropbox.com/download?plat=lnx.x86_64 | tar xzf -
Dropbox起動
$ ~/.dropbox-dist/dropboxd

初回起動時には以下のメッセージが表示される

This client is not linked to any account...
Please visit https://www.dropbox.com/cli_link?host_id=********************************&cl=en_US to link this machine.

表示されているURLへアクセスし、Dropboxのパスワードを入力

パスワード入力後、以下のメッセージが表示される

Client successfully linked, Welcome ***** *****!

Ctrl-C で一旦終了させる

CLIスクリプト導入

CLIスクリプトダウンロード
$ wget https://www.dropbox.com/download?dl=packages/dropbox.py -O dropbox.py
PATHの通ってる所にスクリプトを配置
$ chmod 700 dropbox.py
$ sudo mv dropbox.py /usr/local/bin/dropbox
CLIスクリプトから起動
$ dropbox start
statusで同期されているか確認
$ dropbox status
Downloading 6,207 files (LAN) (369.4 KB/sec, 50 min left)

同期除外したいディレクトリがある場合

同期除外したいディレクトリを追加する
$ dropbox exclude add ~/Dropbox/Memo/
Excluded:
Dropbox/memo
同期除外リストに追加されたか確認
$ dropbox exclude list
Excluded:
Dropbox/memo

Microsoft Live ID 周りでハマった話

Microsoft OneNote をお試しで使用していて、作成したノートブックを SkyDrive 上に共有しようと思って手順を踏んでいるうちに
利用規約に同意元々が表示されたので、同意をクリックしたら以下のメッセージが…

サービスに一時的な問題が発生しています。もう一度やり直してください。このメッセージが続けて表示される場合には、しばらく待ってからやり直してください。

とりあえずググってみたが日本語圏では解決に至る情報が無かったので、英語版ページで同じエラーを表示させる。

There's a temporary problem with the service. Please try again. If you continue to get this message, try again later.

これでググったら解決に至る情報に行き当たった。

解決方法

Windows Live ID アカウント情報項目の名前でもいいので適当に情報を変更する。


長時間ログインしていなかった事に原因がありそうな感じ。それにしても不親切だけど。

VMware ESXi 4.0に設定したパスワードをリセットする方法

ここに書いてある ESXi 3 用の方法が使えます。
http://www.vm-help.com/esx/esx3i/Reset_root_password.php

一応手順

  1. 何らかの Live CD を使って起動する。僕は CentOS LiveCD を使いました
  2. ディスクのパーティションが /mnt/disc 以下に自動でマウントされていたら state.tgz を探す
    • されていなかったらディスクらしきものを /dev から探してマウント
  3. リードオンリーでマウントされているので再度マウント
  4. state.tgz を /tmp 以下にコピーして展開すると local.tgz が出るのでまた展開
  5. すると etc ディレクトリが出てくるのでその中の shadow ファイルを vi で開く
  6. root の行の 暗号化されている部分を削って保存
  7. etc ディレクトリを local.tgz に圧縮、また local.tgz を state.tgz に圧縮
  8. マウント元の state.tgz に上書きコピーする
  9. reboot
  10. 幸福実現

コマンドで書くと

ls /mnt/disc/sda*
umount /mnt/disc/sda5
mount /dev/sda5 /mnt/disc/sda5
cd /tmp
cp /mnt/disc/sda5/state.tgz .
tar zxf state.tgz
tar zxf local.tgz

vi etc/shadow
#============
root:$1$pDGdG0GW$gi6sUoOa1JMC7zMFQcin2.:14708:0:99999:7:::
     ↓
root::14708:0:99999:7:::
#============

tar cxf local.tgz etc
tar cxf state.tgz local.tgz
cp state.tgz /mnt/disc/sda5/
reboot