fluentdのちょっとしたチューニングの代理の報告

はじめに

色々、テストをしてみてる結果をまとめてみた。
検証は、自分がやっている訳ではないので、検証結果からのまとめ。

あと、公開出来ない部分もあったるするので、若干、整理しきれてないけど
その辺は、また、修正出来るかな。

以下の感じで繋がっている。

td-agent --> td-agent 
                        out_webhdfs ---> HDFS
                        ZeroMQ_pub  ---> Subscriber

ここまでのチューニングで、上記の2つのPluginが、ボトルネックになるという事がわかった。

ZeroMQ_pubは、Aggregatorに仕込んであり、情報が見たい時に、自由に件数などを見れる様にしているらしい。

ということで、以下、チューニング。

チューニング

zmq_pubについて

zmq_pubは単一スレッドで動いている。その場合、fluentdがflushできるのは1秒間に1チャンクのみ。
従って、デフォルトのbuffer_chunk_limit 8mで、1KBのメッセージを送った場合、8MB/1KB=8000msg/secが限界となる.
実際には、flush_interval 1sによりチャンク一杯にならずに送られるケースもあるので、限界はこれより小さくなる.

そこで、スループットを上げるためにチャンクのサイズを24Mまで増やし、以下の設定とした。

    <store>
        type zmq_pub
        pubkey ${tag}
        bindaddr tcp://*:5556
        buffer_chunk_limit 24m
        flush_interval 1s
    </store>
HDFSへの格納について

HDFS格納用fluentdでは、以下のような送信エラーが多発しており、これがスループットを落としたり、キューにデータが溜まる原因となっていた。

 [warn]: fluent/output.rb:337:rescue in try_flush: temporarily failed to flush the buffer. next_retry=xxx error_class="WebHDFS::IOError" error="{\"RemoteException\":......

http://blog.father.gedow.net/2012/07/13/fluentd-webhdfs-writing-problem/
を参考に、以下の変更を行った。

time sliceを1日→1時間に変更. flush_intervalを削除
num_threadsを10→1(デフォルト)へ

これにより、設定は以下のようになる。

<match {p2,msr}.**>
        type forest
        subtype webhdfs
        <template>

                namenode data.local:50070


                standby_namenode data.local:50070

                path /log/private2/${tag}/%Y%m%d/${tag}.%Y%m%d-%H.${hostname}.24224.log
                output_data_type ltsv
                output_include_tag true
                output_include_time true
        username user
        </template>
</match>

テストケースと結果

以下のケースを実施した。

並列度12で単一fluentdに送信
並列度16で2プロセスのfluentdに送信
並列度24で3プロセスのfluentdに送信
いずれのケースも、aggregator, HDFS格納用fluentdともにキュー溢れは発生していない

後半の3つの山が今回のテスト時のもの

メッセージ送信量(メッセージ/分)


ケース1は最大60万msg/分(10000msg/秒)出ている
ケース2, 3では各プロセス40万msg/分(6500msg/秒)で、プロセスを増やすことでスケールしている
最大で、3プロセス使うことで110万msg/分(18300msg/秒)流れている

aggregatorプロセスCPU使用率



ケース1の様子より、単一プロセスでは10000msg/秒でfluentdのCPUがほぼ100%となっている
ケース2の負荷であれば、各プロセスともCPU使用率は50〜60%程度

OSのリソース状況

AggregatorのCPU使用率は、それぞれ150%, 170%, 230%くらい
Forwarderは130%, 150%, 200%
CPU使用率80%を限界とすると、Aggregatorは50000msg/秒、Forwarderは29000msg/秒を処理することができそう

結論

この環境での話です。

  • zmq_pub, out_webhdfsのチューニングを行うことで、全体のスループットを向上した
  • 18300msg/secまでであれば、HDFS格納まで含めて流すことができる
  • fluentdは1プロセスあたり6000msg/sec程度であればCPUに余裕を以って流すことができる。

【Intel Galileo:3】sip server をいれる。 (cross compile)

Sip Serverにしてみようと、思いついてできたので、記録。

partysip-2.2.3
(wget http://download.savannah.gnu.org/releases/partysip/partysip-2.2.2.tar.gz)

libosip2-2.2.2
(wget http://ftp.gnu.org/gnu/osip/libosip2-2.2.2.tar.gz)

VM は、前回作成したものを使用。

libosipのmake

cross compile する。
インストールは、自分のディレクトリの中。

source /opt/clanton-tiny/1.4.2/environment-setup-i586-poky-linux-uclibc
./configure $CONFIGURE_FLAGS --prefix=/home/guutara/libosip2-2.2.2/local
make
make install

確認。

guutara@gtr01:~/libosip2-2.2.2$ ls local/*
local/include:
osip2  osipparser2

local/lib:
libosip2.a   libosip2.so    libosip2.so.3.0.0  libosipparser2.la  libosipparser2.so.3      pkgconfig
libosip2.la  libosip2.so.3  libosipparser2.a   libosipparser2.so  libosipparser2.so.3.0.0

local/man:
man1

partysipのmake

cross compile する。
一度、Terminalを閉じて、新しいセッションで作業する。
インストールは、/partysipを作成してそこに。

sudo mkdir partysip

sudo chmod 0777 /partysip

source /opt/clanton-tiny/1.4.2/environment-setup-i586-poky-linux-uclibc

./configure --build=i686-linux --host=i586-poky-linux-uclibc CPPFLAGS="-I/home/guutara/libosip2-2.2.2/local/include" LDFLAGS="-L/home/guutara/libosip2-2.2.2/local/lib" LIBS="-losipparser2" --prefix=/partysip

make

make install

確認。

guutara@gtr01:~/partysip-2.2.3$ ls -l /partysip/*/partysip/bin:
合計 432
-rwxr-xr-x 1 guutara guutara 406080  129 16:31 partysip
-rwxr-xr-x 1 guutara guutara   3994  129 16:31 partysip-config
-rwxr-xr-x 1 guutara guutara  27162  129 16:31 psp_users

/partysip/etc:
合計 4
drwxr-xr-x 2 guutara guutara 4096  129 16:31 partysip

/partysip/include:
合計 8
drwxr-xr-x 2 guutara guutara 4096  129 16:31 partysip
drwxr-xr-x 2 guutara guutara 4096  129 16:31 ppl

/partysip/lib:
合計 208
-rw-r--r-- 1 guutara guutara 110034  129 16:31 libppl.a
-rwxr-xr-x 1 guutara guutara    966  129 16:31 libppl.la
lrwxrwxrwx 1 guutara guutara     15  129 16:31 libppl.so -> libppl.so.2.2.3
lrwxrwxrwx 1 guutara guutara     15  129 16:31 libppl.so.2 -> libppl.so.2.2.3
-rwxr-xr-x 1 guutara guutara  90663  129 16:31 libppl.so.2.2.3
drwxr-xr-x 2 guutara guutara   4096  129 16:31 partysip

それぞれを、tarで、固める。

guutara@gtr01:~$ tar czf libosip2-2.2.2.tar.gz libosip2-2.2.2/local
guutara@gtr01:~$ tar czf partysip.tar.gz /partysip

あとは、VMから一旦、HOSTへscpして、Gallileoに、SCPする。

ssh で、SD Linux にインストールして、展開する。

SD Linuxにインストール

SD Linux には、ldconfigはない。
Link時に、パスを埋め込んでいない場合は、/usr/libの配下に置けば認識する。

libosipの設置

root@clanton:~# tar zxf libosip2-2.2.2.tar.gz
root@clanton:~# cp -r libosip2-2.2.2/local/lib/* /usr/lib/
root@clanton:~# ls -l libosip2-2.2.2/local/lib/           
-rw-r--r--    1 1000     1000        350926 Jan 29  2014 libosip2.a
-rwxr-xr-x    1 1000     1000           896 Jan 29  2014 libosip2.la
lrwxrwxrwx    1 root     root            17 Jan  1 00:14 libosip2.so -> libosip2.so.3.0.0
lrwxrwxrwx    1 root     root            17 Jan  1 00:14 libosip2.so.3 -> libosip2.so.3.0.0
-rwxr-xr-x    1 1000     1000        237274 Jan 29  2014 libosip2.so.3.0.0
-rw-r--r--    1 1000     1000        586532 Jan 29  2014 libosipparser2.a
-rwxr-xr-x    1 1000     1000           881 Jan 29  2014 libosipparser2.la
lrwxrwxrwx    1 root     root            23 Jan  1 00:14 libosipparser2.so -> libosipparser2.so.3.0.0
lrwxrwxrwx    1 root     root            23 Jan  1 00:14 libosipparser2.so.3 -> libosipparser2.so.3.0.0
-rwxr-xr-x    1 1000     1000        415038 Jan 29  2014 libosipparser2.so.3.0.0
drwxr-xr-x    2 1000     1000          1024 Jan  1 00:14 pkgconfig
root@clanton:~# ls -l /usr/lib/libosip*        
-rw-r--r--    1 root     root        350926 Jan  1 00:15 /usr/lib/libosip2.a
-rwxr-xr-x    1 root     root           896 Jan  1 00:15 /usr/lib/libosip2.la
lrwxrwxrwx    1 root     root            17 Jan  1 00:15 /usr/lib/libosip2.so -> libosip2.so.3.0.0
lrwxrwxrwx    1 root     root            17 Jan  1 00:15 /usr/lib/libosip2.so.3 -> libosip2.so.3.0.0
-rwxr-xr-x    1 root     root        237274 Jan  1 00:15 /usr/lib/libosip2.so.3.0.0
-rw-r--r--    1 root     root        586532 Jan  1 00:15 /usr/lib/libosipparser2.a
-rwxr-xr-x    1 root     root           881 Jan  1 00:15 /usr/lib/libosipparser2.la
lrwxrwxrwx    1 root     root            23 Jan  1 00:15 /usr/lib/libosipparser2.so -> libosipparser2.so.3.0.0
lrwxrwxrwx    1 root     root            23 Jan  1 00:15 /usr/lib/libosipparser2.so.3 -> libosipparser2.so.3.0.0
-rwxr-xr-x    1 root     root        415038 Jan  1 00:15 /usr/lib/libosipparser2.so.3.0.0

partysipの設置。
patysipは、plugin,confの位置を、Link時のprefixから埋め込んでいる。

root@clanton:~# cd /
root@clanton:/# ls
bin         dev         home        lost+found  mnt         proc        sketch      tmp         var
boot        etc         lib         media       opt         sbin        sys         usr

root@clanton:/# tar zxf ~/partysip.tar.gz 
root@clanton:/# ls
bin         dev         home        lost+found  mnt         partysip    sbin        sys         usr
boot        etc         lib         media       opt         proc        sketch      tmp         var

root@clanton:/# ls
bin         dev         home        lost+found  mnt         proc        sketch      tmp         var
boot        etc         lib         media       opt         sbin        sys         usr
root@clanton:/# tar zxf ~/partysip.tar.gz 
root@clanton:/# ls
bin         dev         home        lost+found  mnt         partysip    sbin        sys         usr
boot        etc         lib         media       opt         proc        sketch      tmp         var
root@clanton:/# cd partysip/
root@clanton:/partysip# ls
bin      etc      include  lib

起動

confの設定をする。

vi etc/partysip/partysip.conf 

serverip = 10.29.58.65, 127.0.0.1                                             
                                                                              
### When dynamic_ip is set to "on", then the ip is reloaded periodically.      
###                                                                      
                                                                        
# dynamic_ip = on                                                       
                                                                        
###                                                                      
### enable IPv6 support. (IPv4 should be fully functionnal anyway)       
###                                                                      
                                                                        
# serverip6 = fe80::240:f6ff:fe74:7a75, ::1                            
# enable_ipv6 = on                                                     
                                                                       
###                                                                    
### servername must be edited.                                         
###                                                                    
### Please give the list of all FQDNs of your host separated by commas.
                                                                       
servername  = 10.29.58.65, 127.0.0.1                                    
serverport_udp = 5060                                                   
                                                                       
# transport protocol: udp/tcp/sctp                                     
# UDP:  ok                                                            
# TCP:  not supported (please contribute!)                            
# SCTP: supported only in previous release (0.X.X)                     
#       You can port the old plugin which can be found at:             
#       http://osip.atosc.org/download/partysip/sctp_plugin-0.5.4.tar.gz
transport = udp                                                        

起動する。

root@clanton:/partysip# cd bin
root@clanton:/partysip/bin# ./partysip -d 6 -l /var/log/partysip.log &
[2] 1500
[1]   Done(127)               partysip -d 6 -l /var/log/partysip.log
root@clanton:/partysip/bin# DEBUG: [get_output_if] connect: Network is unreachable
Default Gateway Interface detection failed. Please define "serverip" in the config file
Server:             WellX Telecom/Partysip/2.2.3
Debug level:        6
Config name:        /partysip/etc/partysip/partysip.conf
ServerIP: (IPv4)    10.29.58.65, 127.0.0.1
ServerName:         10.29.58.65, 127.0.0.1
ServerRealm:        '"wellx.org"'
Log name:           /var/log/partysip.log

テスト

Telephone-1.0.4 を使ってテストしてみる。

こんな感じで、設定した。

つなぐと、サーバのLogでちゃんと、登録されたのがわかる。

SIP/2.0 200 OK
Via: SIP/2.0/UDP 10.29.58.64:60307;rport=60307;branch=z9hG4bKPjEW8qqlYKAuQZ2sEjPvsax80dK6.dL3Sy
From: "ms@10.29.58.64" <sip:guutara@10.29.58.65>;tag=d1HhsWxSCMU8DoWwNQvkwcTOvCjSa1y4
To: "ms@10.29.58.64" <sip:guutara@10.29.58.65>;tag=151861976
Call-ID: hE5aAYbvuk3KIFUHa0M9WFGrKcFqcfKZ
CSeq: 65357 REGISTER
Contact: "guutara@10.29.58.64" <sip:guutara@10.29.58.64:60307;ob>;expires=300
Content-Length: 0

つぎは

全然、センサーとかいじってないけど。。
いいのかこれで。。 (´・ω・`)

【Intel Galileo:2】cross compile toolchain (Board Support Package (BSP) Build Guide)

SD Linux に、なんか入れて使うなら、cross-compile しないと駄目だよって書いてあるように読めたので。。

uclib header file query | Intel Communities

以下の場所から、
Intel〓 Quark SoC X1000 Board Support Package (BSP) Build Guide 」
を手に入れて、環境を作成してみた。

Download Intel® Quark™ BSP

結構、大変だったぁ。。 ・゚・(ノД`)・゚・

作成した環境

Mac OSX にある、VirtualBox に、Debian 7.3 32bit の仮想環境を作成。
その上に、Board Support Package の cross compile toolchain をつくる。

Guest OS は

  • CPU 1
  • Memory 2G
  • Disk 50G

で、動かしている。

以下、Build Guide にそって、やった事と、注意することを書いておく。
やんなかったところは、すっとばす。。

rootで、作業すると駄目なので、root以外のユーザで作業はする事。
Buildのスクリプトで、チェックがはいる。*1

Before you begin

Debian 7.0 で、検証しているので、それ以外の環境だと、Warning がでる。

Downloading software

Download Intel® Quark™ BSP

から、
「Board_Support_Package_Sources_for_Intel_Quark_v0.9.0.7z」
を、ダウンロードした。

sudo aptitude install p7zip

展開する。

p7zip -d Board_Support_Package_Sources_for_Intel_Quark_v0.9.0.7z

以下のファイルが展開される。

Board_Support_Package_Sources_for_Intel_Quark_v0.9.0/Quark_EDKII_v0.9.0.tar.gz
Board_Support_Package_Sources_for_Intel_Quark_v0.9.0/clanton_linux_v3.8.7+v0.9.0.tar.gz
Board_Support_Package_Sources_for_Intel_Quark_v0.9.0/grub-legacy_5775f32a+v0.9.0.tar.gz
Board_Support_Package_Sources_for_Intel_Quark_v0.9.0/meta-clanton_v0.9.0.tar.gz
Board_Support_Package_Sources_for_Intel_Quark_v0.9.0/spi-flash-tools_v0.9.0.tar.gz
Board_Support_Package_Sources_for_Intel_Quark_v0.9.0/sysimage_v0.9.0.tar.gz

準備。

sudo apt-get install build-essential gcc-multilib vim-common

Creating a file system and building the kernel using Yocto

必要なパッケージのインストール。

sudo aptitude install git
sudo aptitude install diffstat
sudo aptitude install texinfo
sudo aptitude install gawk
sudo aptitude install chrpath
sudo aptitude install file


meta-clanton_v0.9.0.tar.gz の展開先を、
Board_Support_Package_Sources_for_Intel_Quark_v0.9.0 配下から
~/ へ移動して展開した。*2

cd ~
tar zxvf Board_Support_Package_Sources_for_Intel_Quark_v0.9.0/meta-clanton_v0.9.0.tar.gz

setupする。

cd meta-clanton_v0.9.0
./setup.sh 

Building the cross compile toolchain

いよいよ、 toolchain の構築。
すごい時間がかかった。。*3

この source で、作られる環境で既存の環境を壊さない様に
必ず、新しい ターミナルを起動して作業する様に推奨されている。

cd meta-clanton_v0.9.0
source poky/oe-init-build-env yocto_build 
bitbake image-full -c populate_sdk 


終了すると、セットアップの sh ができあがる。

yocto_build/tmp/deploy/sdk/clanton-tiny-uclibc-i686-i586-toolchain-1.4.2.sh

これを実行すると、環境が一式インストールされる。

デフォルトでは、/opt の配下にインストールされた。

ls -l /opt/clanton-tiny/1.4.2/
-rw-r--r-- 1 root root  2124  126 13:01 environment-setup-i586-poky-linux-uclibc
-rw-r--r-- 1 root root 14309  126 06:33 site-config-i586-poky-linux-uclibc
drwxr-xr-x 4 root root  4096  126 06:30 sysroots
-rw-r--r-- 1 root root   129  126 06:33 version-i586-poky-linux-uclibc


cross compile する時には、ターミナルで新しく以下の source を実行して
コンパイルする。

source /opt/clanton-tiny/1.4.2/environment-setup-i586-poky-linux-uclibc 

つぎは

一応、やりたい事があるので、作業してみてるけど、まだ、完了してないので
また、いつか。。

*1: それで、やり直した。 orz

*2:一度、引数が長過ぎるってエラーが出てその時の対応

*3: 21:41 から、06:35 までかかった。 ・゚・(ノД`)・゚・

【Intel Galileo:1】入れてみる:LINUX IMAGE FOR SD for Intel Galileo

では、インストールして動かしてみる。

7zip

まずは、p7zipを入れてダウンロードした物を展開出来る様にする。

MBA20120331:~ guutara$ brew info p7zip
p7zip: stable 9.20.1
http://p7zip.sourceforge.net/
Not installed
From: https://github.com/Homebrew/homebrew/commits/master/Library/Formula/p7zip.rb
==> Options
--32-bit
	Build 32-bit only

MBA20120331:~ guutara$ brew install p7zip
==> Downloading http://downloads.sourceforge.net/project/p7zip/p7zip/9.20.1/p7zip_9.20.1_src_all.tar.bz2
######################################################################## 100.0%
==> make all3 CC=clang $(ALLFLAGS) CXX=clang++ $(ALLFLAGS)
==> make DEST_HOME=/usr/local/Cellar/p7zip/9.20.1 DEST_MAN=/usr/local/Cellar/p7zip/9.20.1/share/man install
==> chmod -R +w /usr/local/Cellar/p7zip/9.20.1/share/doc/p7zip
 /usr/local/Cellar/p7zip/9.20.1: 66 files, 5.4M, built in 3.2 minutes

で、ここからダウンロード。

LINUX_IMAGE_FOR_SD_Intel_Galileo_v0.7.5.7z

MBA20120331:~ guutara$ 7z x ~/LINUX_IMAGE_FOR_SD_Intel_Galileo_v0.7.5.7z 

7-Zip [64] 9.20  Copyright (c) 1999-2010 Igor Pavlov  2010-11-18
p7zip Version 9.20 (locale=utf8,Utf16=on,HugeFiles=on,4 CPUs)

Processing archive: /Users/guutara/LINUX_IMAGE_FOR_SD_Intel_Galileo_v0.7.5.7z

Extracting  LINUX_IMAGE_FOR_SD_Intel_Galileo_v0.7.5/bzImage
Extracting  LINUX_IMAGE_FOR_SD_Intel_Galileo_v0.7.5/core-image-minimal-initramfs-clanton.cpio.gz
Extracting  LINUX_IMAGE_FOR_SD_Intel_Galileo_v0.7.5/boot/grub/grub.conf
Extracting  LINUX_IMAGE_FOR_SD_Intel_Galileo_v0.7.5/image-full-clanton.ext3
Extracting  LINUX_IMAGE_FOR_SD_Intel_Galileo_v0.7.5/boot/grub
Extracting  LINUX_IMAGE_FOR_SD_Intel_Galileo_v0.7.5/boot
Extracting  LINUX_IMAGE_FOR_SD_Intel_Galileo_v0.7.5

Everything is Ok

Folders: 3
Files: 4
Size:       318129066
Compressed: 38438374

ファイルを全て、コピーして準備完了。

電源とUSBケーブルを外した状態で、SDカードを刺し、電源を繋いで
USBケーブルも繋ぐ。

ネットワークは、MACと直結した。

Network

Networkは、DHCPで取得する様になっている。
とりあえず、直結して弄ってみるために、USB で接続した開発ツールから
ifconfig を動かす スケッチを書き込みます。

Samples of how to run Linux Commands via IDE
を入手すると、いろいろ、サンプルがあるので、それを参考につくった。

void setup() {

  system("ifconfig eth0 10.0.0.1 netmask 255.255.0.0 up");
  //you can now use puTTY or your favourite telnet client
  //to connect to this IP address

}

void loop() {
  // put your main code here, to run repeatedly: 
  system("ifconfig eth0 > /dev/ttyGS0");
  sleep(5);
}

これを、書き込む。


シリアルモニターで確認。


Networkの疎通を確認。

MBA20120331:~ guutara$ ping 10.0.0.1
PING 10.0.0.1 (10.0.0.1): 56 data bytes
64 bytes from 10.0.0.1: icmp_seq=0 ttl=64 time=4.080 ms
64 bytes from 10.0.0.1: icmp_seq=1 ttl=64 time=1.222 ms
64 bytes from 10.0.0.1: icmp_seq=2 ttl=64 time=1.147 ms
64 bytes from 10.0.0.1: icmp_seq=3 ttl=64 time=1.254 ms
64 bytes from 10.0.0.1: icmp_seq=4 ttl=64 time=1.161 ms
64 bytes from 10.0.0.1: icmp_seq=5 ttl=64 time=1.164 ms

ssh

sshで繋いでなかを確認してみる。

MBA20120331:~ guutara$ ssh root@10.0.0.1
The authenticity of host '10.0.0.1 (10.0.0.1)' can't be established.
RSA key fingerprint is 64:55:b1:7c:99:9e:cf:8c:90:71:75:a2:10:0e:11:bd.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.0.0.1' (RSA) to the list of known hosts.

root@clanton:~# ps                           
  PID USER       VSZ STAT COMMAND
    1 root       796 S    init [5]
    2 root         0 SW   [kthreadd]
    3 root         0 SW   [ksoftirqd/0]
    4 root         0 SW   [kworker/0:0]
    5 root         0 SW<  [kworker/0:0H]
    6 root         0 SW   [kworker/u:0]
    7 root         0 SW<  [kworker/u:0H]
    8 root         0 SW<  [cpuset]
    9 root         0 SW<  [khelper]
   10 root         0 SW   [kdevtmpfs]
   11 root         0 SW<  [netns]
   12 root         0 SW   [kworker/u:1]
  119 root         0 SW   [bdi-default]
  121 root         0 SW<  [kblockd]
  200 root         0 SW   [kworker/0:1]
  329 root         0 SW   [kswapd0]
  384 root         0 SW   [fsnotify_mark]
  396 root         0 SW<  [crypto]
  526 root         0 SW<  [deferwq]
  529 root         0 SW   [mmcqd/0]
  745 root         0 SW<  [kworker/0:1H]
  933 root         0 SW<  [loop0]
  934 root         0 SW   [kjournald]
  996 root         0 SW   [khubd]
 1052 root         0 SW   [irq/61-0-0020]
 1094 root         0 SW   [spi0]
 1097 root         0 SW   [spi1]
 1126 root         0 SW<  [cfg80211]
 1450 messageb  1464 S    /usr/bin/dbus-daemon --system
 1461 root      3256 S    /usr/sbin/sshd
 1476 root      1264 S    /sbin/syslogd -n -O /var/log/messages
 1479 root      1260 S    /sbin/klogd -n
 1482 root      1264 S    /sbin/getty 115200 ttyS1
 1483 root      1264 S    /sbin/getty 38400 tty1
 1484 root       768 S    /opt/cln/galileo/galileo_sketch_reset -v
 1485 root      1852 S    {clloader.sh} /bin/sh /etc/init.d/clloader.sh
 1487 root       876 S    /opt/cln/galileo/clloader --escape --binary --zmodem --disable-timeouts
 1500 root     18292 S    /sketch/sketch.elf /dev/pts/0 /dev/ttyS0
 1601 root      3316 R    {sshd} sshd: root@pts/1
 1605 root      1912 S    -sh
 2288 root      1840 S    /bin/sh -c ifconfig eth0 > /dev/ttyGS0
 2289 root      1264 S    ifconfig eth0
 2291 root      1264 R    ps

/var/log/messagesの先頭は、以下の感じ。。

Jan  1 00:01:06 clanton syslog.info syslogd started: BusyBox v1.20.2
Jan  1 00:01:06 clanton kern.notice kernel: klogd started: BusyBox v1.20.2 (2013-10-01 00:17:01 IST)
Jan  1 00:01:06 clanton kern.info kernel: [    0.000000] Initializing cgroup subsys cpuset
Jan  1 00:01:06 clanton kern.info kernel: [    0.000000] Initializing cgroup subsys cpu
Jan  1 00:01:06 clanton kern.notice kernel: [    0.000000] Linux version 3.8.7-yocto-standard (clntonsw@irsswdev001) (gcc versio
n 4.7.2 (GCC) ) #1 Tue Oct 1 00:09:01 IST 2013

つぎ

Linuxまで、一応は、動いたので、このあと何に使うか、ぼちぼち、試してみようかな。
USBの接続が、うまくいったりいかなかったりするのが、ちょっと、不安。。

【Intel Galileo:0】とりあえず、いじってみる

勢いで、買ってしまったので、ちょっと使ってみる事に。

そもそも、こういう分野は苦手でござる。。
じゃなんで、買ったんかって言うと、ほんとうに、手が滑った系。。

開発ツール (mac osx )

まずは、これを、DownLoad
Software Downloads for Boards and Kits
Intel_Galileo_Arduino_SW_1.5.3_on_MacOSX_v0.7.5.zip

電源をいれてから、USBで、MAC と接続した。
シリアルポートは、以下のところに繋がっていた。
確かめる方法が、よくわからなかったので、ほぼ、勘になってしまった。

ヘルプから、Firmware update を選んで、アップデート。



Example

helpの初心者向けガイドにある

6 | Open the blink example
Open the LED blink example sketch: File > Examples > 1.Basics > Blink.

を動かしてみる。
といっても、LED もってないので、動いたのかよくわからんのだが、
一応、ボードのLEDもチカチカしたので、動いたみたい。


次は

SD Linux をいれてみよう。。。

【Facebook Presto:2】Presto Hive Perfomance Test (Hive-CDH4 Plugin)

【Facebook Presto:1】Presto 3Node で、動かす (Hive-CDH4 Plugin) - Guutaraの日記
で作成した、環境にてテストをしてみたので、簡単に記述しておきます。

2014-01-10 に、追記・訂正があります。Prestoが遅かった原因です。

Memory

jvm.config の -Xmx を増加してみました。
結果としては、処理スピードに効果はありませんでした。

config.properties の、task.max-memory も、増減してみましたが
処理スピードに変化はありませんでした。
基本的に、task.max-memory は、Joinの結果の大きさに関係するだけのようです。

以下、jvm.comfigの変更した結果のみ記述しておきます。

[root@data2 ~]# vi /opt/presto-server-0.56/etc/jvm.config 
[root@data2 ~]# cat /opt/presto-server-0.56/etc/jvm.config 
-server
-Xmx8G
-XX:+UseConcMarkSweepGC
-XX:+ExplicitGCInvokesConcurrent
-XX:+CMSClassUnloadingEnabled
-XX:+AggressiveOpts
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-XX:PermSize=150M
-XX:MaxPermSize=150M
-XX:ReservedCodeCacheSize=150M
-Xbootclasspath/p:/opt/presto-server-0.56/lib/floatingdecimal-0.1.jar

[root@data3 ~]# vi /opt/presto-server-0.56/etc/jvm.config
[root@data3 ~]# cat /opt/presto-server-0.56/etc/jvm.config
-server
-Xmx8G
-XX:+UseConcMarkSweepGC
-XX:+ExplicitGCInvokesConcurrent
-XX:+CMSClassUnloadingEnabled
-XX:+AggressiveOpts
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-XX:PermSize=150M
-XX:MaxPermSize=150M
-XX:ReservedCodeCacheSize=150M
-Xbootclasspath/p:/opt/presto-server-0.56/lib/floatingdecimal-0.1.jar

[root@data4 ~]# vi /opt/presto-server-0.56/etc/jvm.config 
[root@data4 ~]# cat /opt/presto-server-0.56/etc/jvm.config 
-server
-Xmx8G
-XX:+UseConcMarkSweepGC
-XX:+ExplicitGCInvokesConcurrent
-XX:+CMSClassUnloadingEnabled
-XX:+AggressiveOpts
-XX:+HeapDumpOnOutOfMemoryError
-XX:OnOutOfMemoryError=kill -9 %p
-XX:PermSize=150M
-XX:MaxPermSize=150M
-XX:ReservedCodeCacheSize=150M
-Xbootclasspath/p:/opt/presto-server-0.56/lib/floatingdecimal-0.1.jar

再起動します。

[root@data2 ~]# ps aux | grep presto
root     16298  0.0  0.0 107516   964 pts/1    S+   15:35   0:00 grep presto
[root@data2 ~]# /opt/presto-server-0.56/bin/launcher start
Started as 22474
[root@data2 ~]# ps aux | grep presto
root     22474  138  0.8 11010252 140820 ?     Ssl  15:35   0:04 java -cp /opt/presto-server-0.56/lib/* -server -Xmx8G -XX:+UseConcMarkSweepGC -XX:+ExplicitGCInvokesConcurrent -XX:+CMSClassUnloadingEnabled -XX:+AggressiveOpts -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=kill -9 %p -XX:PermSize=150M -XX:MaxPermSize=150M -XX:ReservedCodeCacheSize=150M -Xbootclasspath/p:/opt/presto-server-0.56/lib/floatingdecimal-0.1.jar -Dlog.output-file=/var/presto/data/var/log/server.log -Dnode.data-dir=/var/presto/data -Dnode.id=ffffffff-ffff-ffff-ffff-ffffffffffff -Dnode.environment=production -Dlog.enable-console=false -Dlog.levels-file=/opt/presto-server-0.56/etc/log.properties -Dconfig=/opt/presto-server-0.56/etc/config.properties com.facebook.presto.server.PrestoServer
root     24251  0.0  0.0 107516   964 pts/1    S+   15:35   0:00 grep presto
[root@data2 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         15936      13470       2466          0        578       9658
-/+ buffers/cache:       3233      12703
Swap:        16383        146      16237


[root@data3 ~]# ps aux | grep presto
root      3547  0.0  0.0 107508   972 pts/0    S+   15:36   0:00 grep presto
[root@data3 ~]# /opt/presto-server-0.56/bin/launcher start
Started as 3589
[root@data3 ~]# ps aux | grep presto
root      3589  196  1.2 14870856 202196 ?     Ssl  15:36   0:09 java -cp /opt/presto-server-0.56/lib/* -server -Xmx8G -XX:+UseConcMarkSweepGC -XX:+ExplicitGCInvokesConcurrent -XX:+CMSClassUnloadingEnabled -XX:+AggressiveOpts -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=kill -9 %p -XX:PermSize=150M -XX:MaxPermSize=150M -XX:ReservedCodeCacheSize=150M -Xbootclasspath/p:/opt/presto-server-0.56/lib/floatingdecimal-0.1.jar -Dlog.output-file=/var/presto/data/var/log/server.log -Dnode.data-dir=/var/presto/data -Dnode.id=3fffffff-ffff-ffff-ffff-ffffffffffff -Dnode.environment=production -Dlog.enable-console=false -Dlog.levels-file=/opt/presto-server-0.56/etc/log.properties -Dconfig=/opt/presto-server-0.56/etc/config.properties com.facebook.presto.server.PrestoServer
root      3691  0.0  0.0 107508   972 pts/0    S+   15:37   0:00 grep presto
[root@data3 ~]# free -m
             total       used       free     shared    buffers     cached
Mem:         15936      14870       1066          0        550       8823
-/+ buffers/cache:       5496      10440
Swap:        16383         15      16368


[root@data4 ~]# /opt/presto-server-0.56/bin/launcher start
Started as 30846
[root@data4 ~]# ps aux | grep presto
root     30846  198  1.5 17656772 250956 ?     Ssl  15:37   0:15 java -cp /opt/presto-server-0.56/lib/* -server -Xmx8G -XX:+UseConcMarkSweepGC -XX:+ExplicitGCInvokesConcurrent -XX:+CMSClassUnloadingEnabled -XX:+AggressiveOpts -XX:+HeapDumpOnOutOfMemoryError -XX:OnOutOfMemoryError=kill -9 %p -XX:PermSize=150M -XX:MaxPermSize=150M -XX:ReservedCodeCacheSize=150M -Xbootclasspath/p:/opt/presto-server-0.56/lib/floatingdecimal-0.1.jar -Dlog.output-file=/var/presto/data/var/log/server.log -Dnode.data-dir=/var/presto/data -Dnode.id=4fffffff-ffff-ffff-ffff-ffffffffffff -Dnode.environment=production -Dlog.enable-console=false -Dlog.levels-file=/opt/presto-server-0.56/etc/log.properties -Dconfig=/opt/presto-server-0.56/etc/config.properties com.facebook.presto.server.PrestoServer
root     31099  0.0  0.0 107508   988 pts/0    S+   15:38   0:00 grep presto
[root@psdata4 ~]# free -m 
             total       used       free     shared    buffers     cached
Mem:         15936      14475       1461          0        358      11819
-/+ buffers/cache:       2297      13639
Swap:        16383          1      16382
[root@data4 ~]# 


実行テストの結果です。
変更前

presto:default> select name,count(1) from oracle_sysstat where name like '%physical%' group by name;
.
.
Splits: 21 total, 15 done (71.43%)
2:42 [9.96M rows, 1GB] [61.6K rows/s, 6.36MB/s]


変更後

presto:default> select name,count(1) from oracle_sysstat where name like '%physical%' group by name;
.
.
Splits: 21 total, 16 done (76.19%)
2:50 [9.97M rows, 1.01GB] [58.6K rows/s, 6.05MB/s]

HIVE より遅い問題。

実行時間が、HIVEよりも遅い問題が発生していました。
原因としては、HIVEの外部テーブルを使用し、外部テーブルがフラットなファイルになっていた為でした。

原因としては、独自のSerDeを使用していた為でした。

外部テーブルからHIVE内に取り込み、バイナリにした結果、高速化しました。
HIVEで実行した場合も、速度の向上はありましたが、Prestoは、劇的に高速化しました。


原因が、外部テーブルか、フラットなせいかは、不明です。ただ、presto のml には、rcファイルにしないと駄目だと言う記述が散見されていました。

prestoのmlには、RCFileにしないと遅いという話がありましたが、今回程度の大きさだと、あまり差はありませんでした。

バイナリのサイズは、以下の感じです。

_hive は、HIVEで、create tableしたものです。
_prestoは。prestoで、create tableしました。

882629318  /user/hive/warehouse/oracle_sysstat_hive
868295034  /user/hive/warehouse/oracle_sysstat_presto
presto 実行結果

以下の処理を流しました。

presto:default> select name,count(1) from oracle_sysstat where name like '%physical%' group by name;

変更前
約3分

Query 20140108_072301_00003_xmb5p, FINISHED, 3 nodes
Splits: 21 total, 18 done (85.71%)
2:50 [10M rows, 1.01GB] [58.9K rows/s, 6.08MB/s]

変更後
2秒

Query 20140108_090836_00052_xmb5p, FINISHED, 3 nodes
Splits: 19 total, 16 done (84.21%)
0:02 [9.81M rows, 821MB] [4.17M rows/s, 349MB/s]
HIVE 実行結果

実行したものは、同じです。

変更前
45秒

.
.
.
MapReduce Total cumulative CPU time: 3 minutes 11 seconds 180 msec
Ended Job = job_201311121157_6392
MapReduce Jobs Launched: 
Job 0: Map: 5  Reduce: 2   Cumulative CPU: 191.18 sec   HDFS Read: 1082379240 HDFS Write: 867 SUCCESS
Total MapReduce CPU Time Spent: 3 minutes 11 seconds 180 msec
.
.
Time taken: 45.015 seconds

変更後
19秒

.
.
.
MapReduce Total cumulative CPU time: 50 seconds 260 msec
Ended Job = job_201311121157_6431
MapReduce Jobs Launched: 
Job 0: Map: 4  Reduce: 1   Cumulative CPU: 50.26 sec   HDFS Read: 280179952 HDFS Write: 867 SUCCESS
Total MapReduce CPU Time Spent: 50 seconds 260 msec
.
.
Time taken: 17.889 seconds

まとめ

これは、どんどん、使ったほうが良いと思います。
実際、どういう理由で、こんだけ速いのか? heapが、いらないのかが不思議で仕方ないです。


今後も、試してみようと思います。


なんか、同じ環境で、spark + shark でやったより、速いんだよなぁ。。

【Facebook Presto:1】Presto 3Node で、動かす (Hive-CDH4 Plugin)

FaceBook のエンジニアが、公開している

Presto | Distributed SQL Query Engine for Big Data

を、試してみる事にします。

1Node は動いたので、3Nodeで構築してみることに。

環境

既に、Hadoop,HIVE のクラスタは、構築済です。
したがって、Hadoop,HIVE のNodeに共存する形になります。*1

Install

3Node しかないので、Discovery Service (discovery-server-1.16.tar.gz)
は、使用しません。前回( 2014-01-04 - Guutaraの日記)のNodeを
Discovery としても、使用します。
Presto には、Discovery Service の機能も入っていますので、Nodeが小さいうちは兼用で良いようです。


前回構築した、ディレクトリを再利用して作ります。その方が、楽なので。。

[root@data2 opt]# tar zcvf presto-server-mod-0.56.tar.gz presto-server-0.56

これを、2Nodeにコピーをして、opt配下に展開しておきます。

config

node.properties は、node.id を、一意にかえます。

[root@data3 opt]# vi presto-server-0.56/etc/node.properties 
[root@data3 opt]# cat presto-server-0.56/etc/node.properties 
node.environment=production
node.id=3fffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/presto/data
[root@data4 opt]# vi presto-server-0.56/etc/node.properties 
[root@data4 opt]# cat presto-server-0.56/etc/node.properties 
node.environment=production
node.id=4fffffff-ffff-ffff-ffff-ffffffffffff
node.data-dir=/var/presto/data

config.properties は、どのノードも同じものになりました。

[root@data3 ~]# vi /opt/presto-server-0.56/etc/config.properties 
[root@data3 ~]# cat /opt/presto-server-0.56/etc/config.properties 
coordinator=false
datasources=jmx,hive
http-server.http.port=9090
presto-metastore.db.type=h2
presto-metastore.db.filename=var/db/MetaStore
task.max-memory=256GB
discovery.uri=http://data2.hadoop.local:9090
[root@data4 opt]# vi presto-server-0.56/etc/config.properties 
[root@data4 opt]# cat presto-server-0.56/etc/config.properties
coordinator=false
datasources=jmx,hive
http-server.http.port=9090
presto-metastore.db.type=h2
presto-metastore.db.filename=var/db/MetaStore
task.max-memory=256GB
discovery.uri=http://data2.hadoop.local:9090

Test (1Node,2Node,3Node,HIVE)

1〜3Nodeで、同じQueryを流してみました。
ついでに、HIVEも。。。

Nodeを追加すると、Prestoは、ほぼ、リニアに性能は向上しました。


HIVEは、同じNodeで動いているので、Node数などは、一緒の状態。
ただし、Prestoは、512mb しかメモリは割り当てられていないので、大分、不利ですけど。
それでも、2倍の性能はでました。

こんどは、JDBCで、試してみたいけど、
あまり、完成度があがってないようなので、もう少しまとうかなと、思ってます。。

以下、結果です。

Test Results


1Node
(0:35 [659K rows, 61.4MB] [18.9K rows/s, 1.76MB/s])

[root@data2 opt]# ~/presto  --server psdata2.hadoop.local:9090 --catalog hive --schema default
presto:default> select time from oracle_sysstat limit 5;
         time         
----------------------
 2013-10-31T08:36:28Z 
 2013-10-31T08:36:28Z 
 2013-10-31T08:36:28Z 
 2013-10-31T08:36:28Z 
 2013-10-31T08:36:28Z 
(5 rows)

Query 20140106_075412_00021_v8qy2, FINISHED, 1 node
Splits: 18 total, 2 done (11.11%)
0:35 [659K rows, 61.4MB] [18.9K rows/s, 1.76MB/s]

presto:default> 


2Node
(0:18 [659K rows, 61.4MB] [37.2K rows/s, 3.46MB/s])

presto:default> select time from oracle_sysstat limit 5;
         time         
----------------------
 2013-10-31T08:52:18Z 
 2013-10-31T08:52:18Z 
 2013-10-31T08:52:18Z 
 2013-10-31T08:52:18Z 
 2013-10-31T08:52:18Z 
(5 rows)

Query 20140106_075738_00023_v8qy2, FINISHED, 2 nodes
Splits: 18 total, 3 done (16.67%)
0:18 [659K rows, 61.4MB] [37.2K rows/s, 3.46MB/s]


3Node
(0:08 [731K rows, 58.8MB] [86.5K rows/s, 6.96MB/s])

presto:default> select time from oracle_sysstat limit 5;
         time         
----------------------
 2013-10-31T13:25:20Z 
 2013-10-31T13:25:20Z 
 2013-10-31T13:25:20Z 
 2013-10-31T13:25:20Z 
 2013-10-31T13:25:20Z 
(5 rows)

Query 20140106_103939_00052_v8qy2, FINISHED, 3 nodes
Splits: 18 total, 6 done (33.33%)
0:08 [731K rows, 58.8MB] [86.5K rows/s, 6.96MB/s]


HIVE
(Time taken: 17.035 seconds)

[root@data2 opt]# hive
Logging initialized using configuration in file:/etc/hive/conf-cdh4-ha-hive/hive-log4j.properties
Hive history file=/tmp/root/hive_job_log_aa84ad1a-5ef6-4d22-85f5-adc8092f310e_2034885544.txt
hive> select time from oracle_sysstat limit 5;
Total MapReduce jobs = 1
Launching Job 1 out of 1
Number of reduce tasks is set to 0 since there's no reduce operator
Starting Job = job_201311121157_6297, Tracking URL = http://data4.hadoop.local:50030/jobdetails.jsp?jobid=job_201311121157_6297
Kill Command = /usr/lib/hadoop/bin/hadoop job  -kill job_201311121157_6297
Hadoop job information for Stage-1: number of mappers: 5; number of reducers: 0
2014-01-06 17:00:07,682 Stage-1 map = 0%,  reduce = 0%
2014-01-06 17:00:11,716 Stage-1 map = 80%,  reduce = 0%, Cumulative CPU 5.16 sec
2014-01-06 17:00:12,730 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 6.44 sec
2014-01-06 17:00:13,739 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 6.44 sec
2014-01-06 17:00:14,748 Stage-1 map = 100%,  reduce = 0%, Cumulative CPU 6.44 sec
2014-01-06 17:00:15,758 Stage-1 map = 100%,  reduce = 100%, Cumulative CPU 6.44 sec
MapReduce Total cumulative CPU time: 6 seconds 440 msec
Ended Job = job_201311121157_6297
MapReduce Jobs Launched: 
Job 0: Map: 5   Cumulative CPU: 6.44 sec   HDFS Read: 38476 HDFS Write: 525 SUCCESS
Total MapReduce CPU Time Spent: 6 seconds 440 msec
OK
2013-10-31T08:23:48Z
2013-10-31T08:23:48Z
2013-10-31T08:23:48Z
2013-10-31T08:23:48Z
2013-10-31T08:23:48Z
Time taken: 17.035 seconds

*1:実は、Spark,Sharkも、動いているんですがね。。