搭建紅外遙控arm-hadoop叢集過程

來源:互聯網
上載者:User

很多人玩開發板用樹莓派,樹莓派的確很好,但是對於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硬碟線,無需單買。

650) this.width=650;" src="http://www.bkjia.com/uploads/allimg/140107/0P3451626-0.jpg" title="IMG_7300_副本.jpg" width="600" height="400" border="0" hspace="0" vspace="0" style="width:600px;height:400px;" alt="wKioL1LHfvuRFljSAAEJnBvtYIY238.jpg" />


然後分區格式化掛載硬碟,注意:硬碟插線需要在斷電情況下進行,不要帶電插拔。

#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的煙霧測試 (Smoke Test)。


import selectimport os, sys, timeimport termiosdef 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 rcodefd = sys.stdin.fileno()old_settings = termios.tcgetattr(fd)new_settings = old_settingsnew_settings[3] = new_settings[3] & ~termios.ICANONnew_settings[3] = new_settings[3] & ~termios.ECHONLprint '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叢集,甚至家裡的電器都可以遙控。這隻是一個很簡單的測試,開發板能乾的事很多。

本文出自 “實踐檢驗真理” 部落格,謝絕轉載!

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.