很多人玩开发板用树莓派,树莓派的确很好,但是对于hadoop来说,内存有点小,只有512MB。所以我找了一圈,最后用的是国内一个开源硬件团队的产品叫CubieTruck。内存有2G,板载存储有8G,千兆网口,可以挂载2.5寸机械或SSD硬盘。
先简述一下大体步骤。
1. 刷系统,做系统
由于CubieTruck(以下简称CT)默认系统安装的是安卓4.2,所以需要变更一下。换成ubuntu 的 linaro server 13.08。
2. 安装部署Hadoop
这个没啥可简介的,由于hadoop是java语言编写的,CPU指令集的问题是由JVM解决的,所以,理论上,Hadoop可以工作在任何一个平台下,包括arm。所以直接用apache官方的tar或者deb即可,我用32位的deb安装,需要做一些调整,重新打包再安装,安装过程没有问题,计算也没发现错误。
3. 挂载红外接口驱动,编写红外控制脚本。
下面详述整个步骤
一、刷系统
名词解释:
linaro:AMD,高通等arm研发厂商共同研制的ubuntu on arm操作系统,其实就是ubuntu。
nand:板载的存储芯片,在linux里被识别的设备名称。
用全志的PhoenixSuit工具,现在最新版本好像是1.0.8。下载CT官方的linaro server镜像,所谓linaro,是当初amd,高通等公司联合开发的ubuntu on arm。
然后按照软件的每一步提示,可以很方便把板载系统替换为ubuntu server。
连接显示器,键盘,网线等一切需要的外设,这里不需要鼠标,因为linux server是完全命令行操作的,任何在server上装xwindows和gnome的都是傻缺的行为。
当然你也可以使用Desktop版把它作为mini pc使用,官方甚至还提供了fedora和arch linux供使用。
这时候工作刚刚开始,由于linux的镜像没有完全把8G的空间全部利用上,所以我们还要对nand进行重新划分和格式化。刷机的linux img会将nand划分为3个分区,nanda-nandc,在默认情况下,只用到了nanda和nandb,nandc完全没利用,所以我们要把nandc格式化并挂载上。查看方式是ls /dev/nand*,默认直接进系统,如果提示用户名密码,用linaro/linaro即可。可sudo su -为root
#cd /dev #mkfs.ext4 /dev/nandc #echo "mount /dev/nandc /opt" >> /etc/rc.local #mount /dev/nandc /opt #df -h
格式化并挂载之后,df -h查看,多了5.1G左右的空间。
假设挂载了硬盘,CT可无障碍挂载SATA 2.5寸硬盘,在linux中硬盘识别为sda设备,CT硬盘供电口有两个,黄黑的是12V供电,红黑的是5V供电。接入2.5寸盘需要把两个接口都插上。12V供电口在靠近网卡一侧,5V为远离网卡一侧。看红色主板的接法,CT里面提供SATA硬盘线,无需单买。
然后分区格式化挂载硬盘,注意:硬盘插线需要在断电情况下进行,不要带电插拔。
#fdisk /dev/sda #mkfs.ext4 /dev/sda1 #mkdir -p /data #echo "mount /dev/sda1 /data" >> /etc/rc.local #mount /dev/sda1 /data
fdisk具体操作看提示,m是帮助,正常情况下新硬盘用n创建新的primary分区。旧硬盘需要用d命令先删除旧分区。然后再n一个primary分区,剩下的一路回车。最后用w将分区信息保存,退出后执行格式化。
这时应该是把硬盘挂载到/data路径下了,第一步刷机的工作完成。如果喜欢的话,可以执行以下apt-get update和upgrade。
二、安装部署Hadoop
可直接用官方的tar包安装,也可使用deb安装,我使用官方提供的deb安装,但是需要做一些改造的操作,默认官方提供i386和amd64的deb包。这个在arm上无法安装,会提示cpu arch问题,但是实际是可以使用的,这个可以自己做一个deb包出来,过程如下,官方下载i386的deb。
然后执行改造和重打包
#dpkg -x hadoop_1.2.1-1_i386.deb hadoop_1.2.1-1_all #dpkg -e hadoop_1.2.1-1_i386.deb hadoop_1.2.1-1_all #cd hadoop_1.2.1-1_all/DEBIAN #vi control #将里面的Architecture: i386改成Architecture: all,或者是#Architecture: armhf,其他不动,保存退出 #cd ../../ #dpkg -b hadoop_1.2.1-1_all #dpkg -i hadoop_1.2.1-1_all.deb
hadoop包会创建两个用户hdfs和mapred。
分别给hdfs和mapred用户建立ssh免密码通道,剩下的就是看配置分布式hadoop的官方手册了。这里不再赘述hadoop的部署过程。跟在x86的过程一模一样。
最后配置完了就是能够用如下命令顺利启动即可。
#sudo -u hdfs start-dfs.sh #sudo -u mapred start-mapred.sh
三、红外口编程。
红外口编程需要加载红外口的内核模块,lsmod看一下,如果没有sun4i_ir,就执行一下modprobe sun4i_ir驱动。
然后编辑一个ir.py的文件,做红外的接收和相应控制。在我的电视遥控器上,按2捕获到的是键盘的1,按3捕获的是键盘2,以此类推。之前可以先测试一下,启动该脚本后是否可以在tty1上捕获到红外输入。注意,必须是tty1,也就是显示器接到CT上的那个控制台。在这个脚本里,按2是启动hdfs,按3是停止,按4是启动mapred,按5是停止mapred,按6是启动balancer,按7是停止balancer,按8是启动一个mapred的冒烟测试。
import select import os, sys, time import termios def ir_catch(): fd = sys.stdin.fileno() r = select.select([sys.stdin],[],[],0.01) rcode = '' if len(r[0]) >0: rcode = sys.stdin.read(1) return rcode fd = sys.stdin.fileno() old_settings = termios.tcgetattr(fd) new_settings = old_settings new_settings[3] = new_settings[3] & ~termios.ICANON new_settings[3] = new_settings[3] & ~termios.ECHONL print 'old setting %s'%(repr(old_settings)) termios.tcsetattr(fd,termios.TCSAFLUSH,new_settings) while True: c = ir_catch() if len(c) !=0 : #print 'input: %s'%(ord(c)) if(ord(c) == 10): print 'Power' os.popen('reboot') elif(ord(c) == 49): print '2' f = os.popen('sudo -u hdfs /usr/sbin/start-dfs.sh').readlines() for a in f: print a elif(ord(c) == 50): print '3' f = os.popen('sudo -u hdfs /usr/sbin/stop-dfs.sh').readlines() for a in f: print a elif(ord(c) == 51): print '4' f = os.popen('sudo -u mapred /usr/sbin/start-mapred.sh').readlines() for a in f: print a elif(ord(c) == 52): print '5' f = os.popen('sudo -u mapred /usr/sbin/stop-mapred.sh').readlines() for a in f: print a elif(ord(c) == 53): print '6' f = os.popen('sudo -u hdfs /usr/sbin/start-balancer.sh').readlines() for a in f: print a elif(ord(c) == 54): print '7' f = os.popen('sudo -u hdfs /usr/sbin/stop-balancer.sh').readlines() for a in f: print a elif(ord(c) == 55): print '8' f = os.popen('sudo -u mapred hadoop jar /usr/share/hadoop/hadoop-examples-1.2.1.jar pi 10 100').readlines() for a in f: print a else: print 'Unknown' else: #print 'Sleep 1' time.sleep(1)
四、赘述
开启红外和gpio的操作以后,可以做的事情很多,不仅仅是遥控hadoop集群,甚至家里的电器都可以遥控。这只是一个很简单的测试,开发板能干的事很多。