2013年10月25日 星期五

升級Mavericks 後遇到的問題 (1) Virtualbox 發生錯誤


前天提起勇氣把OSX 升級到Mavericks ,果然免費的最貴....陸陸續續開始有災情出現。

今天要解決的問題是使用Virtualbox (4.2.18)出現的問題(包含使用Vagrant),主要是在啟動VM得時候會出現類似的錯誤如下:

Command: ["hostonlyif", "create"]

Failed to create the host-only network interface.
VBoxNetAdpCtl: Error while adding new interface: failed to open /dev/vboxnetctl: No such file or directory

上網查了一下,看到這兩篇文章 Vagrant on MavericksFirst Thoughts Developing on Mavericks都是使用臨時性解法,就是利用指令重新啟動VirtualBox,不過重開機以後仍然會有問題...

$ sudo /Library/StartupItems/VirtualBox/VirtualBox restart


最後再Virtaulbox 的討論區 Network Error... was working yesterday 這篇文章確認這是升級新版的後所產生的問題:,

OS X 10.9 Mavericks has deprecated the StartupItems mechanism for starting services on boot.Until this is fixed it looks like VirtualBox's host-only networking is broken as per ticket: #8940.This also means if you use Vagrant it will complain that it can't start boxes.The temporary workaround is to create a Launch Daemon yourself. This Launch Daemon will call the old StartupItems script. 

目前建議的work around方式如下:

1.  建立 'virtualbox.plist' 這個檔案在這個目錄 '/Library/LaunchDaemons'  (Note: 必須使用 sudo 才能建立).
2. 檔案內容如下:
     
    <plist version="1.0">
        <dict>
            <key>Label</key>
            <string>virtualbox</string>
            <key>ProgramArguments</key>
            <array>
                <string>sh</string>
                <string>/Library/StartupItems/VirtualBox/VirtualBox</string>
                <string>restart</string>
            </array>
            <key>KeepAlive</key>
            <false>
            <key>RunAtLoad</key>
            <true>
        </true></false></dict>
    </plist>  

3. 執行以下兩個指令,讓機器重開後會自動執行

$ sudo chown root /Library/LaunchDaemons/virtualbox.plist
$ sudo launchctl load -w /Library/LaunchDaemons/virtualbox.plist

4. 最後重開機測試看看


Ps. 根據#8940的最新訊息,這個問題在Virtualbox 4.3版仍會有問題
Pss. 就算這個問題解決,另外會有關機後,virtualbox 的icon仍然會在dock 上面砍不掉

Update [2013.10.28]
已經升級到VirtualBox 4.3 開啟win7 的vm 會出現這個問題:Kernel fail on Mavericks OS





2013年10月23日 星期三

[書摘] 軟件開發成功路線圖 - 敏捷模式



前一陣子陪老婆在逛掏寶網 無意見看到這本書,介紹Agile的書很多,但是以Pattern 的方式來介紹倒是第一次看到,而且又很便宜馬上就買了下來。

所謂的Pattern 有幾個重要的元素:
(可以參考Teddy 大大的 - Design Patterns入門實作班0.5天投影片)
  • Name
  • Context
  • Problem
  • Force
  • Solution
  • Consequence
也就是說任何的方法和Pattern 的產生都是為了解決特定的問題,而Scrum其實就是把這些Pattern 組合起來的一個Process,這本書的特色知一就是以圖片的方式告訴我們,這些方法對於解決某些問題比較有效,但是對於另一個問題可能就不怎麼相關。

 這本書把要解決的問題分成兩大類:

商務價值類(帶來的好處):


  • 縮短上市時間
  • 增強產品實用性(市場價值)
  • 提高品質質量
  • 提高靈活性
  • 增加透明度 
  •  降低成本
  • 延長產品生命週期

 解決異味:

  • 商務異味:
    • 交付品質無法另客戶滿意
    • 交付新功能需太長時間
    • 有些功能客戶沒有使用
    • 軟件對於客戶不適用
    • 軟件開發過於昂貴
    • 我們與他們的對立 (RD vs QA vs Marketing vs Sales vsCustomer)
  • 流程異位:
    • 客戶?客戶無法經常性的參與
    • 另管理層訝異 - 缺乏透明度
    • 瓶頸資源 - 項目成員同時屬於過多團隊
    • 項目反覆拖延
    • Bug 追蹤系統有數以百計的bug仍未解決
    • 在Release 前需要一個固化(Code freeze )週期
    • 沒能經常集成(Integration) - 通常是Integration太痛苦

下面列出一些書本的範例:



舉例來說,如果要提高產品的實用性,把客戶拉近來作為團隊成員可能就比寫一堆文檔和用戶故事有效的多。



而要提高產品的品質,使用TDD開發模式就比較重要,會比只有使用Iteration 頻繁發佈和Stand up Meeting有用, 畢竟沒有良好的測試,越頻繁的發佈只會造成更多的慘案~:P


針對客戶想要一切的問題(不管是客戶還是老闆總是想要一切啊!!),最重要的就是把客戶拉近團隊來,並且透過backlog讓客戶了解實際的工作量。


有興趣的人可以去買這本書來讀一讀! (可惜都沒有正體中文版~:P)

2013年10月22日 星期二

Hadoop Performance Tunning Tools - startfish


大家都知道 Hadoop Cluster tuning 不是一件簡單的事情,而且為了確保每一次調教的參數真的是有幫助的,一般來說都會建議要跑過Benchmark,尤其是針對你預期會改善的部份做測試,市面上有非常多的Benchmark 專案可以讓我們來測試,例如:

  • Pi
  • TeraSort
  • TestDFSIO & Co
  • Gridmix3  (Emulating Production Workload for Apache Hadoop)
  • NNBench (It is meant as a stress-test and benchmark for namenode)
  • MRBench (A Benchmark for MapReduce Framework)
  • Hadoop Benchmark Suite (HiBench)

不過參數那麼多,就算知道調每個參數對於系統會有怎樣的影響,但是排列組合下來也是很驚人的,到底要怎麼調才是正確的呢?總不能一直瞎調吧~(不過很多時候的確是...Orz..),


最近在Survey 資料的時候無意間看到這個專案,覺得還蠻有趣的,就是Duke 大學的一個專案叫做startfish,進入專案首頁馬上就吸引我的就是他把調教組合與效能視覺化,如下圖所示:


 Source: Starfish

他主要的作法就是是收集我們Hadoop Cluster 的參數和Log ,並且加以分析,並且給出建議修改的參數值,有興趣的可以看一下他的教學影片:



Reference:

[1] Benchmarking and Stress Testing an Hadoop Cluster With TeraSort, TestDFSIO & Co.

2013年10月21日 星期一

[開箱文] Opure 頂級阿肥機入手

話說離買上一台STP空氣清淨機(A.K.A 小王)以經過了一年多了,感覺效果還蠻不錯,這次趁著游小貝出世,想說是該再加購一台更夠力的機器了(遠目~)


身為反486受害者團結大聯盟的一員,一定受過這幾篇文章的荼毒:DC版阿肥機來了 CP值最高的家用空氣清淨機Opure 雙UV光觸媒A空氣清淨機 阿肥機.......每次看完的感想就是,地球很危險的室內空氣真是髒,趕快買一台空氣清淨機吧!!




一開始我鎖定的是 LightAir IonFlow 50頂級阿肥機這兩款來抉擇,一台的優勢是不用耗材,另一台是高C/P值,讓人很難決定,不過在上網收集了更多資料後,我還是排除了LightAir lonFlow,原因如下:

1. 貴很多,雖說不用耗材,但是天知道可不可以撐到break even
 (看起來很容易壞)
2. 必須放在周圍一公尺淨空的環境
 (但是我想放在房間啊!放在客廳又怕被iRobot 撞倒)
3. 只能透過靜電的原理吸付附近的灰塵懸浮微粒...
(但是我另外想要處理的就是空氣中的貓毛!)

這一長一短的貓毛已經是iRobot殺手了...如果不來台吸力強一點的空氣清淨機,不知道會讓我和游小貝吸近多少貓毛!!

所以最後我還是選了頂級阿肥機。

兩大箱東西寄來真是壯觀! 一箱是空氣清淨機,另一箱是耗材。


從箱子拿出來後,想說嗯?阿肥機哪裡肥?看起來中規中矩啊~?



直到打開阿肥機才真的了解到底他為什麼稱為阿肥機,也就是他的肚子的容量異常的大!因為裡面必須要容納四種濾網,包含:
  • 極淨HEPA濾網
  • 強效活性碳濾網
  • 蜂巢式除甲醛C.Z.P.濾網
  • 光觸媒濾網



開機後發亮的面板感覺就蠻有質感的(跟小肥機比起來~:P)



不過更是讓人感到驚豔的就是聲音比想像中還小聲,扣除全速運轉聲音還是蠻大的外,我覺的放在房間也不會影響到睡眠,而且很快就能感覺到空氣變得清新了,看到游小貝安穩著睡著,這一切都值得啊~~



為了家人的健康,和維持家裡的空氣品質,不要懷疑趕快敗下去就對了!!




2013年10月17日 星期四

Hadoop Tutorial: Analyzing Sensor Data



今天看到hortonworks的Bloger 有一篇教學很有趣,怎麼利用HDP Sandbox 來分析Sensor 資料,我對這個影片感到有興趣的原因關於是這個情境,先不論是不是真的要面對非常多的資料量,對於可能不會寫程式或開發系統的資料分析人員來說,這已經算是一套很方便的Solution。

首先,以傳統的作法必須先寫一個Sensor Log 的收集系統,然後把資料處理(Parser& Clean)過後存到與先設計好的RDB ,這時候資料分析人員才可以開始做分析。

但 是如果有了Flume ,我們只需安裝Agent 和做簡單的設定,就可以輕鬆的把資料收集到HDFS裡面存放,然後我們也不用預先設計Schema,等到真的需要分析的時候,再透過Pig 或 Hive 動態去處理資料,產生我們所需要的資料表 (這種概念類似於RDB 的 View),一直到這裡資料分析人員幾乎都不用寫道什麼程式!

(當然我也相信許多昂貴的傳統BI工具也可以做到,但是價錢....嗯你知道的~:P)


整個影片的情境如下:

  1. 透過Flume收集Sensor 回傳的Log,並且存到HDFS,資料內容包含:
    1. Hvac
      1. 日期
      2. 時間
      3. 預期溫度
      4. 實際溫度
      5. 冷暖氣系統ID
      6. 冷暖氣系統年紀
      7. Building ID 
    2. Building
      1. Building ID
      2. Building Mgr
      3. Building Age
      4. Hvac Product Model
      5. Country
  2. 透過Sqoop匯入原本存在RDB 的 HVAC Schema 和 Data,產生HCatalog View 方便之後 Hive and Pig的操作  (其實這邊就算不透過Sqoop 匯入,也是可以手動建立)
  3. 分析情境:
    1. 想要減少電費開支
    2. 想要控制室內溫度的恆定性
    3. 找出哪一個品牌的Hvac 可靠性較高
  4. 透過ODBC Driver 把分析好的資料匯入Excel 做視覺化呈現






有興趣的朋友也可以去下載來玩玩看~




2013年10月15日 星期二

[實驗]透過IAM 給予EMR Instance 特定權限

EMR 與 S3


EMR 最大的特色之一就是跟S3的整合,EMR可以直接把S3當做HDFS來使用,而且S3到EMR Instance 之間的傳輸費用是Free,當然要好好利用一下啦。
在EMR中使用S3方法很簡單,只要使用以下指令:
hadoop fs -cat s3n://<your bucket name>/test
or
hadoop fs -cat s3://<your bucket name>/test 
這時候問題來了....那S3要設定怎樣的權限? 如何讓EMR存取?這時候就要使用IAM

Why IAM?


使用IAM的好處就如同EMR 的開發文件裡面所說的 - Configure IAM Roles for Amazon EMR
An AWS Identity and Access Management (IAM) role is a way to delegate access so IAM users or services in AWS can act on your AWS resources. You create an IAM role and assign permissions to it, such as the ability to read and write data in one of your Amazon S3 buckets. When an IAM user or a service in AWS assumes that IAM role, they gain the specified permissions to access your AWS resources.
Amazon EMR uses IAM roles so that applications running on the EC2 instances of your cluster can access your AWS resources without the need to distribute your AWS account or IAM user credentials to those EC2 instances
簡單來說就是使用IAM 的設定以後,理論上我就不需要把我的accessKey 和 secureKey 設定到每一台instance裡面,就可以直接存取AWS Resource 的資源。
不過這邊要注意的是,啟動IAM 的權限只能透過API 或是CLI ,並不能透過AWS Management Console 來啟動。
Launching a cluster with IAM roles is currently not supported in the Amazon EMR console. If you need to use IAM roles in your cluster, launch the cluster using the CLI or the API.

測試結果


明明沒有設定IAM EMR也可以存取S3啊? 設定了以後到底差別在哪裡? 原來....
如果從EMR console create cluster (沒有設定IAM),EMR會自動把會把accesskey 和 securekey 存放在core-site.xml 裡面:
    fs.s3n.awsSecretAccessKey 
    fs.s3n.awsAccessKeyId
但是如果使用IAM,並且給予S3的權限,所以在你的core-site.xml 裡面就不會有SecureKey和AccessKey的出現。


謎之音:
其實我只是要測試用stackedit 寫寫看blog~ 結果似乎不如預期...囧rz...好多效果都沒出來...是因為我把bloger搞的太花俏用太多plugin了嘛?Orz...


2013年10月7日 星期一

初探 Google Cloud Platform - 1. Create instance

初探 Google Cloud Platform

Google Cloud Platform (GCP) 也出來一段時間了,直到最近才開始可以讓人試用(虧我申請了那麼久),其實使用方法跟跟Amazon差不多,想要開始使用,就先把你的信用卡資訊交出來吧!!

下面我會一步一步的展示,該如何開通帳號
(開通使用很簡單,但是登入使用就複雜摟~:P)

1. 登入Google Cloud Platform

Google Cloud Platform 的首頁選擇Try it now ,接下來就會進入Cloud Project 的畫面,這一點就值得讓人稱讚,因為Google 採用Project Orientation 的角度來管理你所使用Service 和帳務,這樣我就可以很清楚的把我每個專案用了那些機器,用了哪些API Service ,以及花的多少錢有效區隔開來。 (Amazon 目前帳務這塊就還是讓蠻多人頭疼的~:P )

新增 Cloud Project

這邊要注意的就是Project Id,你可用Google 給你的,或是自己取,只要符合以下規定:
The project ID is used to uniquely identify your project. Once selected, this identifier cannot be changed.

點選專案進入之後,第一個看到的就是APIs (也就是你打算使用/開通Google 提供的哪些服務)





設定 Billing 資訊


再來就是開通Google Cloud Platform 最重要的地方啦,就是開通帳務,首先會先要你填帳務資訊,然後再讓你填信用卡資訊。





當填完資訊,他會寄一封EMail請你確認帳務資訊,等到完全都確認無誤後,你就可以正式開始使用Service。

新增 Instance


新增Instance 的畫面採兩欄式排版,左邊是選項,右邊是我們所選擇設定的資訊,算是非常樸實也直觀。


看到這頁自然就會想要問幾個問題:
1. 目前有哪些區域可以使用 或應該問哪些區域有Data Center?

 根據Zone 這邊看起來主要就是歐洲兩個,美國中部三個AZ,令人注意的是他還會在後面列出來這個Data Center 下一次進入維護時間是何時(所以我們必須自行判斷我們服務會用多久?免得進入維護到時候要搬家麻煩?)


2. 有哪些等級的Instance 可以使用


打開清單,各種類型,與對應的vCPU和 Memory 都列的清清楚楚的

至於價錢可以參考:price,另外這邊要注意的就是收費的最低標準是以10min來劃分,Google的解釋如下:

  • All machine types are charged a minimum of 10 minutes. For example, if you run your instance for 2 minutes, you will be billed for 10 minutes of usage.
  • After 10 minutes, instances are charged in 1 minute increments, rounded up to the nearest minute.For example, an instance that lives for 11.25 minutes will be charged for 12 minutes of usage.

3. 目前有哪些Instance

這部份目前能選的就真的很少了,扣掉Deprecated掉的,就只上下CentOS6 和 Debian 6 /7 可以選


再往下看,來到了Addional Disk ,居然顯示 No Disks in zone europe-west1-b,然後我選了其他zone也都顯示沒有Disk....@@? 這讓我疑惑了...


看了一下關於Disk 的說明頁面,怪怪.....根據他的描述,Disk 也是有兩種:

A. Scratch Disks

類似Amazon 舊的 Instance Storage,關機以後就會消失了 (目前Boot Disk 就是屬於這種)

B. Persistent Disks

就是類似Amazon 的EBS

(最後發現,必須要開好Instance 後才能再另外掛載Disk)



4. 選擇網路






Network 目前沒有其他選項可以選,而External IP 用起來跟Elastic IP差不多,就是跟Google 註冊一組IP並且取名字。

最後面是權限,也就是設定Google 的其他Service 有怎樣的權限可以存取這個Instance。

當一切都設定好後,按下Create 就會看到下圖開始Create instance....



然後就可以在你的VM列表看到這台Instance了~



恭喜你開好一台VM了!! 等等....那接下來要怎麼登入? 是不是像Amazon 可以產生一把Key,就可以用SSH登入? No~~~No~~~沒那麼簡單....Orz..


下一篇文章再來介紹如何透過Google提供用來管理Google Cloud Platform 的工具 gcutil 來管理與登入VM。




2013年10月6日 星期日

關於AWS Elaster MapReducer (EMR)



話說去年的這個時候參加了AWS 在台灣辦的一場workshop 寫了一篇文章 - [筆記] Technical Workshop: AWS DynamoDB and Elastic MapReduce ,但是也僅此於此,並沒有真的去使用AWS EMR。畢竟如果是為了做實驗,練習或寫程式,在自己電腦開一個VM就夠了,如果沒有真的要做啥大量運算跑到AWS上玩Hadoop感覺就會費浪不少錢,。

對於我的認知來說,AWS EMR 是job-oriented的Service ,適合的情境是把已經有明確要分析的資料存放(或將要存放)在S3,然後透過EMR去S3 撈取資料來分析,此時EMR的強項就是可以快速的幫你開啟一組設定好的Hadoop Cluster (如果想要加速?開啟的Instance數量由你決定),所以我們只需要專注於程式的撰寫,而不用擔心管理的問題。

但是如果是一組要長期間運行(Long Run Hadoop Cluster),要考慮的點可能就不只這些了,可能必須先了解搭配的作業系統是什麼?是哪一家的Hadoop (商業支持度)?是否有好的管理介面?....等問題。

這也難怪Neflix 自己打造了一套建立在EMR上面的Hadoop Cluster 管理介面Genie

source: viethip

HDInsight on Azure 的異軍突起



剛好今年Hadoop Taiwan 2013 微軟的Talk 用雲端實現巨量資料的商業智慧–HDInsight on Azure 引起了我的注意,主要是:

1. HDInsight 他使用的Hortonwork 的Distribution (雖然是Windows 版,用起來可能會不太順手~:P)
2. 在來他的設計就是For Long run Cluster  不像AWS是Job oriented

不過很可惜的是居然沒有把ambari 也包含在裡面,對於一個long run cluster 管理介面還是很重要的,目前他的管理介面看起來還是有點陽春

(有興趣的朋友可以看,資策會的蘇老師寫了一系列詳盡的介紹HDInsight Tutorial)

既然微軟的Azure 也朝這方向前進了,讓我不禁好奇算是領導品牌的AWS EMR 目前有沒有什麼進展?以及想要更加了解他的架構與規劃。


關於Hadoop 的版本


AWS EMR 主要有兩種Distribution 可以選用,一種是Community 版的Apache Hadoop,另一個則是MapR的版本(需要額外收費)。根據我的推測,MapR 應該就是用來彌補商業營運( Long run cluster )的版本。

不過再更深入研究MapR版本前,讓我們先看看到底EMR 所使用的Community 版本的內容吧,實驗方法如下:

先利用EMR介面隨便選一個Example Job(例如word count)開啟了一組Cluster,對於EMR的設定來說只有三種角色的Instance,內容配置如下:

1. Master (包含Name Node 和 Job Tracker)
2. Slave with Data (包含Data Node 和 Task Tracker)
3. Slave  without Data (只有Task Tracker )

而這三種角色分別擁有不同的Security Group ,Default 的設定只允許Master 可以透過SSh登入,其他Slave 的角色是不允許的 (不過可以自行透過Security Group 設定來開啟)。

透過SSH 登入 Master 後 (登入帳號:Hadoop),讓我非常驚訝,因為作業系統不是我們所熟悉的CentOS而是Debian:

debian squeeze
Linux ip-172-31-16-224 3.2.30-49.59.amzn1.i686 #1 SMP Wed Oct 3 19:55:00 UTC 2012 i686 GNU/Linux


而Hadoop 版本則是1.0.3 with YARN (這又是另我驚奇的一點),不過最讓我驚奇的則是EMR居然已經改用JDK 1.7了!?  (請參考:何時Hadoop 才能正式轉換至 JDK7 ?)

> java -version
java version "1.7.0_25"
Java(TM) SE Runtime Environment (build 1.7.0_25-b15)
Java HotSpot(TM) Client VM (build 23.25-b01, mixed mode)


真是處處驚奇啊....然後不管是設定檔放置的位置,與設定的方法與傳統熟悉的都不太一樣,所以很明顯的這就不是要讓你自己方便管理的設計,他們也不預期讓你近來亂搞~:P

所以我才大膽的假設MapR 版本才是真的設計來當做Long run Cluster的版本,畢竟官網上是這樣介紹MapR的:


  • Enhanced ease-of-use and reliability for Apache HBase applications
    • Instant Recovery
    • Zero HBase Administration
    • Continuous Low Latency
    • Full Data Protection with Snapshots
    • Business Continuity with Mirroring
  • Industry-standard interfaces
    • NFS
    • ODBC
  • Management
    • Deployment
    • MapR Control System (MCS)
    • CLI and REST API:

看樣子也得另外花時間好好玩玩看一下MapR 是不是如同他宣稱的這麼厲害~:P

另外想要更深入了解EMR的人也可以參考官方提供的Best Practices for Amazon EMR

Update:

The latest Amazon EMR AMI version contains the following pre-installed software:
  • Hadoop 1.0.3 
  • Java 1.7 
  • Perl 5.10.1 
  • Python 2.6.6 
  • R 2.11 
  • hbase-0.92.0 (開Hbase 必須要開VPC)  
  • hive-0.11.0   
  • pig-0.11.1.1  



2013年10月2日 星期三

Apache Spark 0.8.0 正式發佈了!!



千呼萬喚始出來,Apache Spark 0.8.0 終於正式Release 了,這是是捐給ASF後的第一版Release ,也是有著重大更新的一版Release,讓我們來看看Release note 裡面有提到哪些新Feature。

1. Monitoring UI and Metrics (上圖便是新的介面)

2. Machine Learning Library (有取代Mahout 的味道唷~)

3.Python Improvements (就不用再用大陸的山寨版了~XD)

4. Hadoop YARN support

5. Revamped Job Scheduler

6. Easier Deployment and Linking

7. Expanded EC2 Capabilities

8. Improved Documentation

9. Other- Hadoop save functions now support an optional compression codec.

第九點倒是對我來說蠻重要的,如果增加了compression codec support,那就代表可能也可以support Encryption摟~:D