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"}
Firefox で WebGL が動作しない時は
about:config にアクセスして webgl.force-enabled を true にする。
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 をインストール
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.
これでググったら解決に至る情報に行き当たった。
VMware ESXi 4.0に設定したパスワードをリセットする方法
ここに書いてある ESXi 3 用の方法が使えます。
http://www.vm-help.com/esx/esx3i/Reset_root_password.php
一応手順
- 何らかの Live CD を使って起動する。僕は CentOS LiveCD を使いました
- ディスクのパーティションが /mnt/disc 以下に自動でマウントされていたら state.tgz を探す
- されていなかったらディスクらしきものを /dev から探してマウント
- リードオンリーでマウントされているので再度マウント
- state.tgz を /tmp 以下にコピーして展開すると local.tgz が出るのでまた展開
- すると etc ディレクトリが出てくるのでその中の shadow ファイルを vi で開く
- root の行の 暗号化されている部分を削って保存
- etc ディレクトリを local.tgz に圧縮、また local.tgz を state.tgz に圧縮
- マウント元の state.tgz に上書きコピーする
- reboot
- 幸福実現
コマンドで書くと
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