Cubieboard2 VGA 拡張

Cubieboard2 はHDMIが標準なので、拡張ボードを追加して、VGA出力を試みる。

くっつけるのはこんな感じ。

20140430_200509-1

くっつけただけではだめで、ツールを使ってコンフィグする。

  • http://www.cubieforums.com/index.php?topic=2047.msg13199#msg13199
  • http://docs.cubieboard.org/tutorials/common/edit_the_system_configuration#linux
  • https://github.com/cubieplayer/Cubian/wiki/VGA-output
  • http://wiki.androciti.com/index.php?Cubieboard2

 

要はブート時に読み込むファイルの編集。

  1. Sunxi-tools入れる
  2. ツールをmakeする
  3. uSDのブート領域マウント
  4. script.binをローカルコピー
  5. 編集
  6. script.binをuSDのブート領域へ戻す
  7. uSDのブート領域アンマウント
  8. reboot
root@cubieez:~# git clone git://github.com/linux-sunxi/sunxi-tools.git
Cloning into 'sunxi-tools'...
remote: Reusing existing pack: 896, done.
remote: Total 896 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (896/896), 287.49 KiB | 219 KiB/s, done.
Resolving deltas: 100% (478/478), done.
root@cubieez:~#
root@cubieez:~/sunxi-tools# make
gcc -g -O0 -Wall -Wextra -std=c99 -D_POSIX_C_SOURCE=200112L -Iinclude/ `pkg-config --cflags libusb-1.0` -o fel fel.c `pkg-config --libs libusb-1.0`
Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found
Package libusb-1.0 was not found in the pkg-config search path.
Perhaps you should add the directory containing `libusb-1.0.pc'
to the PKG_CONFIG_PATH environment variable
No package 'libusb-1.0' found
fel.c:22:20: fatal error: libusb.h: そのようなファイルやディレクトリはありません
compilation terminated.
make: *** [fel] エラー 1
root@cubieez:~/sunxi-tools# apt-get install libusb-1.0
root@cubieez:~/sunxi-tools# make
gcc -g -O0 -Wall -Wextra -std=c99 -D_POSIX_C_SOURCE=200112L -Iinclude/ `pkg-config --cflags libusb-1.0` -o fel fel.c `pkg-config --libs libusb-1.0`
gcc -g -O0 -Wall -Wextra -std=c99 -D_POSIX_C_SOURCE=200112L -Iinclude/ -o pio pio.c
pio.c: In function ‘do_command’:
pio.c:316:57: warning: unused parameter ‘argc’ [-Wunused-parameter]
gcc -g -O0 -Wall -Wextra -std=c99 -D_POSIX_C_SOURCE=200112L -Iinclude/ -c -o nand-part-main.o nand-part-main.c
gcc -g -O0 -Wall -Wextra -std=c99 -D_POSIX_C_SOURCE=200112L -Iinclude/ -c -o nand-part-a10.o nand-part.c -D A10
gcc -g -O0 -Wall -Wextra -std=c99 -D_POSIX_C_SOURCE=200112L -Iinclude/ -c -o nand-part-a20.o nand-part.c -D A20
gcc -o nand-part nand-part-main.o nand-part-a10.o nand-part-a20.o
root@cubieez:~/sunxi-tools#
root@cubieez:~/sunxi-tools# mkdir /mnt/mmcp1
root@cubieez:~/sunxi-tools# mount /dev/mmcblk0p1 /mnt/mmcp1 (the script.bin is in /dev/nanda if you boot from nand )
root@cubieez:~/sunxi-tools# cp /mnt/mmcp1/script.bin ./
root@cubieez:~/sunxi-tools# chmod 777 script.bin
root@cubieez:~/sunxi-tools# ./bin2fex script.bin > ./script.fex
fexc-bin: script.bin: version: 0.1.2
fexc-bin: script.bin: size: 45424 (80 sections)
root@cubieez:~/sunxi-tools#
root@cubieez:~/sunxi-tools# cp script.bin ./back_script.bin.20140430
root@cubieez:~/sunxi-tools# vi script.fex

<例>

[disp_init]
disp_init_enable = 1
disp_mode = 0
screen0_output_type = 4
screen0_output_mode = 4
screen1_output_type = 2
screen1_output_mode = 14
fb0_framebuffer_num = 2
fb0_format = 10
fb0_pixel_sequence = 0
fb0_scaler_mode_enable = 1
fb1_framebuffer_num = 2
fb1_format = 10
fb1_pixel_sequence = 0
fb1_scaler_mode_enable = 1
root@cubieez:~/sunxi-tools# ./fex2bin script.fex > ./script.bin
root@cubieez:~/sunxi-tools# cp ./script.bin /mnt/mmcp1/
root@cubieez:~/sunxi-tools# umount /mnt/mmcp1
root@cubieez:~/sunxi-tools#
root@cubieez:~/sunxi-tools# reboot

映りました。

解像度上げてみたら、あがらなくなった、「720p50 1024*768」がベストの模様。

あがらなくなったら、uSD抜いて、他のLinuxで再度編集して元に戻すか、バックアップファイルを戻す。

 

Raspberry Pi を試す ( RStudio )

 

apt-get install r-base
apt-get install gdebi-core

 

パッケージがない!
GitHubでソースダウンロード
https://github.com/rstudio/rstudio

cmakeを使いそうなのでインストール

apt-get install cmake

 

というか依存関係を解決して必要なものをいれてくれるスクリプトがあった

root@raspberrypi:~/RStudio/rstudio-master/dependencies/linux# ./install-dependencies-debian --exclude-qt-sdk

 

  • qt-sdkはDesktop版で必要そうなので、のぞいとく
  •  結構時間かかる
  • 6時間後、途中でエラー・・・・
common.copy /opt/rstudio-tools/boost/boost_1_50_0/lib/libboost_wave.a
 ...updated 10671 targets...
 --2014-02-08 20:07:41--? https://s3.amazonaws.com/rstudio-buildtools/pandoc-1.12.3.zip
 s3.amazonaws.com (s3.amazonaws.com) をDNSに問いあわせています... 207.171.187.117
 s3.amazonaws.com (s3.amazonaws.com)|207.171.187.117|:443 に接続しています... 接続しました。
 HTTP による接続要求を送信しました、応答を待っています... 200 OK
 長さ: 97002741 (93M) [application/zip]
 `pandoc-1.12.3.zip' に保存中
100%[==========================================================================================>] 97,002,741? 2.31M/s 時間 56s
2014-02-08 20:08:44 (1.66 MB/s) - `pandoc-1.12.3.zip' へ保存完了 [97002741/97002741]
cp: `pandoc-1.12.3/linux/debian/armv6l/pandoc*' を stat できません: そのようなファイルやディレクトリはありません
root@raspberrypi:~/RStudio/rstudio-master/dependencies/linux#

 

失敗したのでいったん、アンインストール

apt-get remove gdebi-core
apt-get remove r-base
# rm -Rf RStudio/

Cubieboard2 を試す その3 (Cubieez 0.1 RC2)

ドキュメントを見ればわかることだが、Cubieboardにはフラッシュメモリ(NAND)ものっておりそこにはデフォでAndroidが存在する。ここはそのまま使いたいのでOSを別途入れる時には常にmicroSDに入れてつかうようにする。 NAND Flash 用のイメージも存在するのでそれを使って上書きすることも可能。 しかし、ブートOSを切り替えて遊ぶにはmicroSD試した方が何かと都合がよさそうだし。 今回は、「Cubieez 0.1 RC2 (A20 version)」を入れてみる。

Cubieez 0.1 RC2 (A20 version)

アーカイブをダウンロード、7zから抽出してdd

[root@sarah Cubieboard2]# 7za e cubieezRC2_A20.7z

7-Zip (A) 9.20 Copyright (c) 1999-2010 Igor Pavlov 2010-11-18
p7zip Version 9.20 (locale=ja_JP.UTF-8,Utf16=on,HugeFiles=on,2 CPUs)

Processing archive: cubieezRC2_A20.7z

Extracting  cubieezRC2_A20.img

Everything is Ok

Size: XXXXX
Compressed: XXXXXX

 

[root@sarah Cubieboard2]# dd if=./cubieezRC2_A20.img of=/dev/sde
3854336+0 レコード入力
3854336+0 レコード出力
1973420032 バイト (2.0 GB) コピーされました、 669.763 秒、 2.9 MB/秒

Cubieboard に差し込んで、boot Cubieez   Terminal を起動して、rootで# cubie-configを実行(デスクトップのREADMEに最初の起動時にそうしろと書いてある)

cubie-config

ファイルシステムを拡張したり、ロケール、タイムゾーン、SSHを起動させたり、選択していじればわかる。 キーボードレイアウトは合ってないので、ここで合わす。モデルはわからないのだが、HP社のを使っているので「Hewlett-Packard Internet Keyboard」を選んでおき、レイアウトに「Japanese-Japanese(OADG 109A)」を選び後はデフォルトにしておく。 完了したら「Finish」して再起動

ベンチマーク

デスクトップのREADMEをみると/rootにベンチマークや、Mali400ソースやらがおいてあるらしい。見てみると確かに。 「tinymembench」というベンチマークが置いてあったので早速実行。

root@cubieez:~/tinymembench# ./tinymembench
tinymembench v0.3.9 (simple benchmark for memory throughput and latency)

==========================================================================
== Memory bandwidth tests ==
== ==
== Note 1: 1MB = 1000000 bytes ==
== Note 2: Results for 'copy' tests show how many bytes can be ==
== copied per second (adding together read and writen ==
== bytes would have provided twice higher numbers) ==
== Note 3: 2-pass copy means that we are using a small temporary buffer ==
== to first fetch data into it, and only then write it to the ==
== destination (source -> L1 cache, L1 cache -> destination) ==
== Note 4: If sample standard deviation exceeds 0.1%, it is shown in ==
== brackets ==
==========================================================================
 C copy backwards : 228.9 MB/s
 C copy : 765.7 MB/s
 C copy prefetched (32 bytes step) : 739.7 MB/s
 C copy prefetched (64 bytes step) : 739.2 MB/s
 C 2-pass copy : 578.5 MB/s
 C 2-pass copy prefetched (32 bytes step) : 631.6 MB/s
 C 2-pass copy prefetched (64 bytes step) : 631.4 MB/s
 C fill : 1611.0 MB/s
 --- 
 standard memcpy : 834.2 MB/s (0.4%)
 standard memset : 1610.0 MB/s
 ---
 NEON read : 1057.4 MB/s
 NEON read prefetched (32 bytes step) : 1176.1 MB/s
 NEON read prefetched (64 bytes step) : 1207.3 MB/s (0.1%)
 NEON copy : 803.1 MB/s (0.1%)
 NEON copy prefetched (32 bytes step) : 781.7 MB/s
 NEON copy prefetched (64 bytes step) : 808.8 MB/s
 NEON unrolled copy : 780.3 MB/s
 NEON unrolled copy prefetched (32 bytes step) : 732.9 MB/s
 NEON unrolled copy prefetched (64 bytes step) : 757.6 MB/s (0.1%)
 NEON copy backwards : 775.8 MB/s
 NEON copy backwards prefetched (32 bytes step) : 761.7 MB/s (0.1%)
 NEON copy backwards prefetched (64 bytes step) : 797.6 MB/s
 NEON 2-pass copy : 635.7 MB/s (0.1%)
 NEON 2-pass copy prefetched (32 bytes step) : 668.2 MB/s
 NEON 2-pass copy prefetched (64 bytes step) : 682.6 MB/s
 NEON unrolled 2-pass copy : 581.5 MB/s (0.4%)
 NEON unrolled 2-pass copy prefetched (32 bytes step) : 592.3 MB/s (2.7%)
 NEON unrolled 2-pass copy prefetched (64 bytes step) : 616.6 MB/s (0.4%)
 NEON fill : 1610.9 MB/s (0.5%)
 NEON fill backwards : 1607.1 MB/s
 ARM fill (STRD) : 1610.5 MB/s
 ARM fill (STM with 8 registers) : 1610.4 MB/s (0.8%)
 ARM fill (STM with 4 registers) : 1588.1 MB/s (0.6%)
 ARM copy prefetched (incr pld) : 762.3 MB/s (0.4%)
 ARM copy prefetched (wrap pld) : 777.8 MB/s (1.1%)
 ARM 2-pass copy prefetched (incr pld) : 647.6 MB/s (0.7%)
 ARM 2-pass copy prefetched (wrap pld) : 613.6 MB/s (0.6%)

==========================================================================
== Memory latency test ==
== ==
== Average time is measured for random memory accesses in the buffers ==
== of different sizes. The larger is the buffer, the more significant ==
== are relative contributions of TLB, L1/L2 cache misses and SDRAM ==
== accesses. For extremely large buffer sizes we are expecting to see ==
== page table walk with several requests to SDRAM for almost every ==
== memory access (though 64MiB is not nearly large enough to experience ==
== this effect to its fullest). ==
== ==
== Note 1: All the numbers are representing extra time, which needs to ==
== be added to L1 cache latency. The cycle timings for L1 cache ==
== latency can be usually found in the processor documentation. ==
== Note 2: Dual random read means that we are simultaneously performing ==
== two independent memory accesses at a time. In the case if ==
== the memory subsystem can't handle multiple outstanding ==
== requests, dual random read has the same timings as two ==
== single reads performed one after another. ==
==========================================================================
 block size : single random read / dual random read
 1024 : 0.0 ns / 0.0 ns
 2048 : 0.0 ns / 0.0 ns
 4096 : 0.0 ns / 0.0 ns
 8192 : 0.0 ns / 0.0 ns
 16384 : 0.0 ns / 0.0 ns
 32768 : 0.1 ns / 0.0 ns
 65536 : 6.3 ns / 10.8 ns
 131072 : 9.7 ns / 15.2 ns
 262144 : 13.9 ns / 20.6 ns
 524288 : 115.9 ns / 182.6 ns
 1048576 : 173.6 ns / 243.3 ns
 2097152 : 205.5 ns / 266.5 ns
 4194304 : 227.7 ns / 282.9 ns
 8388608 : 239.3 ns / 291.5 ns
 16777216 : 251.7 ns / 306.7 ns
 33554432 : 269.4 ns / 337.4 ns
 67108864 : 308.9 ns / 415.2 ns
root@cubieez:~/tinymembench#

Raspberry Pi の結果が以下にあるけど、比べるとやっぱし速そう。 https://github.com/ssvb/tinymembench/wiki/Raspberry-Pi-%28BCM2708%29 情報

Info:
users: root / cubie
unified password: cubieboard (change it on first boot, please)
Default IP: 192.168.1.124 (edit /etc/network/interfaces or use NetworkManager)

参考

http://www.cubieforums.com/index.php?topic=528.0

Cubieboard2 を試す その1

Cubieboard2とは

ARMでSoCの小さいPC

http://cubieboard.org/2013/06/19/cubieboard2-is-here/

20130812_224241-1

ガワをネジでとめる(手で可能)

Cubieboard2

目標:Fedora 19を入れてまず動かしてみる

準備

  • microSDにFedoraを入れたいので「Transcend microSDHCカード 32GB Class10 」購入、2371円
  • SDカードリーダ(今後もあった方が便利そうなので)購入、900円
  • Fedora19のイメージダウンロード(http://dl.cubieboard.org/software/a20-cubieboard/fedora/
  • イメージ名:Fedora-19-a10-armhfp-r1.img.xz

イメージコピー(OSインストール)

以下の要領でmicroSDにイメージを書き込む(対象は/dev/sde)

実施するのは適当なLinuxマシンで

 [root@sarah Fedora]# xzcat Fedora-19-a10-armhfp-r1.img.xz > /dev/sde

 

少し時間がかかる・・・

終了した後、アンマウント(自動でマウントされていたら)して、抜き、再度挿す

自動でマウントされる

[root@sarah Fedora]# df
ファイルシステム 1K-ブロック 使用 使用可 使用% マウント位置
rootfs 20398084 8159156 11202736 43% /
/dev/root 20398084 8159156 11202736 43% /
/dev 1023136 588 1022548 1% /dev
/dev/sda1 102740 14748 82776 16% /boot
none 1023136 100 1023036 1% /dev/shm
/dev/sda5 940416968 200911316 729951556 22% /home
/dev/sde3 6247828 2217488 3966864 36% /media/rootfs
/dev/sde1 484312 39980 439332 9% /media/uboot
[root@sarah Fedora]#

 

ボードにあわせてu-bootを選んでインストール

[root@sarah Fedora]# /media/uboot/select-board.sh
Usage: "/media/uboot/select-board.sh <board>"
Available boards:
a10_mid_1gb A10 tablet sold under various names (whitelabel)
a13_mid A13 tablet sold under various names (whitelabel)
a10s-olinuxino-m A10s-OLinuXino-MICRO (Olimex)
a13-olinuxino A13-OLinuXino (Olimex)
a13-olinuxinom A13-OLinuXino-MICRO (Olimex)
a20-olinuxino_micro A20-OLinuXino-MICRO (Olimex)
auxtek-t003 Auxtek T003 hdmi tv stick
auxtek-t004 Auxtek T004 hdmi tv stick
ba10_tv_box BA10 TV Box
coby_mid7042 Coby MID7042 tablet
coby_mid8042 Coby MID8042 tablet
coby_mid9742 Coby MID9742 tablet
cubieboard_512 Cubieboard development board 512 MB RAM
cubieboard Cubieboard development board 1024 MB RAM
cubieboard2 Cubieboard 2 (A20) development board
dns_m82 DNS AirTab M82 tablet
EOMA68-A10 EOMA68 A10 CPU card
gooseberry_a721 Gooseberry development board
h6 H6 netbook
hackberry Hackberry development board
hyundai_a7hd Hyundai a7hd tablet
inet97f-ii iNet-97F Rev.2 (and clones) tablet
mele_a1000 Mele a1000/a2000 512 MB RAM
mele_a1000g Mele a1000g/a2000g 1024 MB RAM
mele_a3700 Mele a3700 (a1000g without sata)
mini-x Mini-X 512 MB RAM
mini-x-1gb Mini-X 1024 MB RAM
mk802 mk802 (with female mini hdmi) 512 MB RAM
mk802-1gb mk802 (with female mini hdmi) 1024 MB RAM
mk802_a10s mk802 with A10s (s with a circle around it on the barcode label
mk802ii mk802ii (with male normal hdmi) 1024 MB RAM
pcduino pcDuino development board
pov_protab2_ips9 Point of View ProTab 2 IPS 9" tablet
pov_protab2_ips_3g Point of View ProTab 2 IPS tablet with 3g
r7-tv-dongle r7 hdmi tv stick
uhost_u1a UHost U1A hdmi tv stick
wobo-i5 Wobo i5 TV Box
xzpad700 XZPAD700 7" tablet
[root@sarah Fedora]#

 

「cubieboard2」があるのでそれを選ぶ

[root@sarah Fedora]# /media/uboot/select-board.sh cubieboard2
Are you sure you want to install the spl, u-boot and kernel for cubieboard2 from /media/uboot/boards onto /dev/sde ?
Press enter to continue, CTRL+C to cancel
Installing spl, u-boot and kernel for cubieboard2 onto /dev/sde ...
22+1 レコード入力
22+1 レコード出力
23040 バイト (23 kB) コピーされました、 0.00584422 秒、 3.9 MB/秒
237+1 レコード入力
237+1 レコード出力
242868 バイト (243 kB) コピーされました、 0.0447415 秒、 5.4 MB/秒
128+0 レコード入力
128+0 レコード出力
131072 バイト (131 kB) コピーされました、 0.0522157 秒、 2.5 MB/秒
Done
[root@sarah Fedora]#
[root@sarah Fedora]# umount /media/rootfs
[root@sarah Fedora]# umount /media/uboot
[root@sarah Fedora]#

 

終わったら、rootfsとubootをアンマウントする

[root@sarah Fedora]# umount /media/rootfs
[root@sarah Fedora]# umount /media/uboot

 

これで、microSDカードは準備完了

Fedora 19 起動

作ったmicroSDカード、USBキーボード、マウス、電源ケーブルを挿しこんで、起動

はじめ少々時間かかって・・・

以下のセットアップが走る

startup

  • Localization … Date & Time
  • Software…Network Configuration(静的アドレスを振る、MACも自動で設定されている)
  • User settings … Root password
  • User creation … Create a user

特に難しいこともないので適当に入力し次に進む。

めでたくFedora 19が起動してくるのでrootでログイン

fedora-gamen

 

おまけ

  • Network 設定は最初はなぜかDHCPになっているが、前に設定は終わっているので再起動後はそのアドレスがふられる
  • SELinuxは有効になっているので、いらないので無効に
  • dmesg , /proc/interrupts でSATAポート認識確認(lspciはPCIソケットがないので。。。)
  • /etc/hostnameでホスト名設定
  • ほとんど余計なパッケージものは入っていない
  • sshdは起動しているので、ネットワーク経由でログイン試みるが失敗・・・解析後(iptables でなく)Firewalldが有効化されていたことによるものであった、無効(以下)にしてログイン完了

 

# systemctl disable firewalld
# systemctl stop firewalld

 

参考

http://docs.fedoraproject.org/ja-JP/Fedora/19/html/Security_Guide/sec-Disabling_firewalld.html

 

Raspberry Pi を試す その3 ( Hadoop on RaspberryPi -2)

ここで作った環境でとりあえず、MapReduce

まず普通にコピー

hduser@raspberrypi /usr/local/hadoop $ hadoop fs -put conf input
hduser@raspberrypi ~ $ hadoop fs -ls /user/hduser/
Found 1 items
drwxr-xr-x - hduser supergroup 0 2013-08-04 11:44 /user/hduser/input
hduser@raspberrypi ~ $

円周率計算

しゃれじゃないけど、PiだけにPi(π)で試してみる

MapReduceは処理が走る前に準備時間が結構かかりますのでそれをわかった上で、RaspberryPiでどのくらい力があるか見てみる

hduser@raspberrypi /usr/local/hadoop $ hadoop jar hadoop-examples-1.1.2.jar pi
Usage: org.apache.hadoop.examples.PiEstimator <nMaps> <nSamples>
Map数=1
サンプル数=1 
123.96 seconds
Estimated value of Pi is 4.00000000000000000000
Map数=1
サンプル数=10
115.538 seconds
Estimated value of Pi is 3.60000000000000000000
Map数=1
サンプル数=100
114.493 seconds
Estimated value of Pi is 3.20000000000000000000
Map数=1
サンプル数=1000
113.498 seconds
Estimated value of Pi is 3.14800000000000000000
Map数=1
サンプル数=10万
113.844 seconds
Estimated value of Pi is 3.14120000000000000000
Map数=1
サンプル数=1000万
129.025 seconds
Estimated value of Pi is 3.14158440000000000000
Map数=1
サンプル数=5000万
217.511 seconds
Estimated value of Pi is 3.14159448000000000000
Map数=1
サンプル数=1億
303.028 seconds
Estimated value of Pi is 3.14159256000000000000 

結果

  • 1000万サンプルくらいまで、「前処理+計算」の時間はだいたい130秒前後、ちょっと時間かかってます

 

Raspberry Pi を試す その2 ( Hadoop on RaspberryPi -1)

Raspberry Pi 上で Hadoop を動かしてみる。Raspberry Pi は1台しかないので、PSEUDOで動かす。

準備

  • Transcend SDHCカード 32GB Class10 購入
  • JVMが動くので、Soft-float Debian “wheezy” を採用、ダウンロード:2013-05-29-wheezy-armel.img
  • イメージをSDへコピーするときに「Win32DiskImager」を使う場合、エラーになるときがあるので、diskpartツールでパーティションを全部消してから
  • Hadoop は 1.1.2 をダウンロード:hadoop-1.1.2.tar.gz

OS設定

  • 初期起動のメニュー
Expand Filesystem
Internationalisation Options
 -> Change Locale ja_JP.UTF-8
 -> Change Timezone Tokyo
 -> Change Keyboard Layout : Generic 105-key (Intel) PC
 # Control+Alt+Backspace で X Serverを Terminateできるように
Advanced Option
 -> CPUとGPUのメモリ配分を調節するとか

 

以降 # raspi-conf で呼び出せる

  • OS起動後、設定
  • 面倒なので sudo で root パスワードつける
  • inittab で runlevel 3
  • DHCPなのでStaticに変更する:/etc/network/interfaces
  • apt-get update , apt-get upgrade
  • 追加パッケージ:telnetd , vsftpd , sysv-rc-conf , tightvncserver , xrdp , dstat
  • root 許可 (telnetd , vsftpd)
  • apt-get update , apt-get upgrade
  • rpcbind は有効にしておく
  • NTP Client 設定

Oracle JDK インストール

  • Open JDKでもいいんだが(そっちのが準備は楽)、Oracle JDK のがよさそうなので Oracle JDK 7 (ARM Soft Float ABI 用)を採用

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

Oracle JDK 7

  • Oracle JDK 8 も良いらしい(現在は Early Access build)

https://wiki.openjdk.java.net/display/OpenJFX/OpenJFX+on+the+Raspberry+Pi

root@raspberrypi:~# ls
hadoop-1.1.2.tar.gz jdk-7u21-linux-arm-sfp.tar.gz run_vncserver
root@raspberrypi:~# tar zxf jdk-7u21-linux-arm-sfp.tar.gz -C /opt
root@raspberrypi:~# update-alternatives --install "/usr/bin/ja
jar jarsigner java javac javadoc javah javap
root@raspberrypi:~# update-alternatives --install "/usr/bin/java" "java" "/opt/jdk1.7.0_21/bin/java" 1
root@raspberrypi:~#
root@raspberrypi:~# java -version
java version "1.7.0_03"
OpenJDK Runtime Environment (IcedTea7 2.1.7) (7u3-2.1.7-1)
OpenJDK Zero VM (build 22.0-b10, mixed mode)
root@raspberrypi:~#

ユーザ作成

root@raspberrypi:~# addgroup hadoop
root@raspberrypi:~# adduser --ingroup hadoop hduser
root@raspberrypi:~# adduser hduser

SSH ノンパス設定(ローカルホスト)

root@raspberrypi:~# su - hduser
hduser@raspberrypi ~ $
hduser@raspberrypi ~ $ ssh-keygen -t rsa -P ""
Generating public/private rsa key pair.
Enter file in which to save the key (/home/hduser/.ssh/id_rsa):
Created directory '/home/hduser/.ssh'.
Your identification has been saved in /home/hduser/.ssh/id_rsa.
Your public key has been saved in /home/hduser/.ssh/id_rsa.pub.
The key fingerprint is:
95:5e:cb:32:fc:ef:db:1a:05:ff:4b:b8:47:0c:cb:19 hduser@raspberrypi
The key's randomart image is:
+--[ RSA 2048]----+

略

hduser@raspberrypi ~ $ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
hduser@raspberrypi ~ $ ssh localhost
The authenticity of host 'localhost (127.0.0.1)' can't be established.
ECDSA key fingerprint is 2e:f6:2f:7d:3f:88:30:17:1e:59:39:a4:bc:40:d0:be.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added 'localhost' (ECDSA) to the list of known hosts.
Linux raspberrypi 3.6.11+ #474 PREEMPT Thu Jun 13 17:14:42 BST 2013 armv6l

略

Hadoopインストール・セットアップ

  • 環境変数( hduser の .bashrc )
# For Hadoop Environment
export JAVA_HOME=/opt/jdk1.7.0_21
export HADOOP_INSTALL=/usr/local/hadoop
export PATH=$JAVA_HOME/bin:$HADOOP_INSTALL/bin:$PATH

 

  • Hadoopインストール
root@raspberrypi:~# tar zxf hadoop-1.1.2.tar.gz -C /usr/local
root@raspberrypi:~# cd /usr/local/
root@raspberrypi:/usr/local# mv hadoop-1.1.2 hadoop
root@raspberrypi:/usr/local# chown -R hduser:hadoop hadoop
root@raspberrypi:~# su - hduser
hduser@raspberrypi ~ $ hadoop version
Hadoop 1.1.2
Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.1 -r 1440782
Compiled by hortonfo on Thu Jan 31 02:03:24 UTC 2013
From source with checksum c720ddcf4b926991de7467d253a79b8b
hduser@raspberrypi ~ $

 

  • Hadoop 最小設定
# cd /usr/local/hadoop/conf

 

core-site.xml

<configuration>
  <property>
     <name>hadoop.tmp.dir</name>
     <value>/usr/local/fs/hadoop/tmp</value>
  </property>
  <property>
     <name>fs.default.name</name>
     <value>hdfs://localhost:54310</value>
  </property>
</configuration>

 

hdfs-site.xml

<configuration>
  <property>
   <name>dfs.replication</name>
   <value>1</value>
  </property>
</configuration>

 

mapred-site.xml

<configuration>
  <property>
   <name>mapred.job.tracker</name>
   <value>localhost:54311</value>
  </property>
</configuration>

 

環境補足

root@raspberrypi:/usr/local# mkdir -p /usr/local/fs/hadoop/tmp
root@raspberrypi:/usr/local# chown hduser:hadoop /usr/local/fs/hadoop/tmp
root@raspberrypi:/usr/local# chmod 750 /usr/local/fs/hadoop/tmp

 

DFSフォーマット

hduser@raspberrypi ~ $ hadoop namenode -format
13/08/04 10:41:42 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = raspberrypi/127.0.1.1
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 1.1.2
STARTUP_MSG: build = https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.1 -r 1440782; compiled by 'hortonfo' on Thu Jan 31 02:03:24 UTC 2013
************************************************************/
13/08/04 10:41:45 INFO util.GSet: VM type = 32-bit
13/08/04 10:41:45 INFO util.GSet: 2% max memory = 19.335 MB
13/08/04 10:41:45 INFO util.GSet: capacity = 2^22 = 4194304 entries
13/08/04 10:41:45 INFO util.GSet: recommended=4194304, actual=4194304
13/08/04 10:41:48 INFO namenode.FSNamesystem: fsOwner=hduser
13/08/04 10:41:49 INFO namenode.FSNamesystem: supergroup=supergroup
13/08/04 10:41:49 INFO namenode.FSNamesystem: isPermissionEnabled=true
13/08/04 10:41:49 INFO namenode.FSNamesystem: dfs.block.invalidate.limit=100
13/08/04 10:41:49 INFO namenode.FSNamesystem: isAccessTokenEnabled=false accessKeyUpdateInterval=0 min(s), accessTokenLifetime=0 min(s)
13/08/04 10:41:49 INFO namenode.NameNode: Caching file names occuring more than 10 times
13/08/04 10:41:51 INFO common.Storage: Image file of size 112 saved in 0 seconds.
13/08/04 10:41:52 INFO namenode.FSEditLog: closing edit log: position=4, editlog=/usr/local/fs/hadoop/tmp/dfs/name/current/edits
13/08/04 10:41:52 INFO namenode.FSEditLog: close success: truncate to 4, editlog=/usr/local/fs/hadoop/tmp/dfs/name/current/edits
13/08/04 10:41:53 INFO common.Storage: Storage directory /usr/local/fs/hadoop/tmp/dfs/name has been successfully formatted.
13/08/04 10:41:53 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at raspberrypi/127.0.1.1
************************************************************/

 

  • Hadoop 起動
hduser@raspberrypi /usr/local/hadoop/bin $ ./start-all.sh
starting namenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hduser-namenode-raspberrypi.out
localhost: starting datanode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hduser-datanode-raspberrypi.out
localhost: starting secondarynamenode, logging to /usr/local/hadoop/libexec/../logs/hadoop-hduser-secondarynamenode-raspberrypi.out
starting jobtracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-hduser-jobtracker-raspberrypi.out
localhost: starting tasktracker, logging to /usr/local/hadoop/libexec/../logs/hadoop-hduser-tasktracker-raspberrypi.out
hduser@raspberrypi /usr/local/hadoop/bin $
hduser@raspberrypi /usr/local/hadoop/bin $ jps
5660 JobTracker
5586 SecondaryNameNode
5866 Jps
5372 NameNode
5770 TaskTracker
hduser@raspberrypi /usr/local/hadoop/bin $

 

*注意:start-allでNameNode、JobTrackerは起動したが、DataNode、TaskTrackerがコケた「Error: JAVA_HOME is not set.」と出たので、/usr/local/hadoop/conf/hadoop-env.sh の JAVA_HOMEを追加した

export JAVA_HOME=/opt/jdk1.7.0_21

 

*注意:SecondaryNameNode いらないので以下をコメントアウト

start-dfs.sh:"$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR --hosts masters start secondarynamenode
stop-dfs.sh:"$bin"/hadoop-daemons.sh --config $HADOOP_CONF_DIR --hosts masters stop secondarynamenode

 

*注意:Oracle JDK 7 (ARM Soft Float ABI 用)を使うとき、DataNodeはクライアントモードで起動する必要がある

これを修正しないとデーモンは起動するが、DataNodeが正しく動かないためJobがコケる

bin/hadoop ファイルの以下を編集( -server を消す)

#HADOOP_OPTS="$HADOOP_OPTS -server $HADOOP_DATANODE_OPTS"
HADOOP_OPTS="$HADOOP_OPTS $HADOOP_DATANODE_OPTS"

 

Oracle JDK 8はServerを(まだ?)サポートしていないようだが、7もおそらく。なお、Serverモードだと50070にアクセスしたときに、「Configured Capacity」や「DFS Used」などが「0」になっており、きちんとDataNode部分が動いていない事を確認、直したら以下のように動いた

Cluster Summary

  • Hadoop 停止
hduser@raspberrypi /usr/local/hadoop/bin $ ./stop-all.sh
stopping jobtracker
localhost: stopping tasktracker
stopping namenode
localhost: stopping datanode
hduser@raspberrypi /usr/local/hadoop/bin $ jps
3035 Jps
hduser@raspberrypi /usr/local/hadoop/bin $