2013年3月25日 星期一

Scrum與Architecture是否有矛盾或衝突 (2)


Source:The Role of the Agile Architect

這篇放著好久都沒有完成...因為最近又開始規劃新系統的Architecture,而且專案的狀態似乎又有點傾向waterfull....所以開始懷念起以前實行Agile,邊設計邊開發的那段日子....

專家怎麼說?

延續很久很久以前的一篇文章"Agile(Scrum)與Architecture是否有矛盾或衝突 (1)",我就繼續上網搜尋一堆大師對對於Agile 與 Architecture 的看法,以及一些所謂的Best practice,第一個看到的文章就是 Community Roundtable: Agility versus Architecture,我整理出這篇文章的一些重點如下:

P. Shepherd 認為:
如果High Level Architecture 沒有設計好,那你將會建立一個對於整體而言沒有長期可行性,或是價值的系統。

K. Ishkhanova 認為:
很多人不喜歡看企業等級(enterprise level)的架構,他們喜歡快速的跳到技術細節去,但是他們往往會遺失了幾個重點,如果你沒有規劃好系統能力和關鍵的訊息,整個架構將會非常脆弱與傾倒。因此對我來說敏捷(Agile)常常會等同於衝動(impulsive)。人們把Agile視為非常快,非常快的一種方法,但卻沒有深入了解,它應該是真正敏捷和不只是衝動

I see a conflict between Agile and Architecture!?

所以依照這個key word:Conflict between agile and architecture一搜尋,馬上就找到一堆文章在探討這個議題。
有興趣的人可以點進去看那些文章(不過我想大家應該沒時間看),所以結論是什麼?結論就是There is no conflict between agile and architecture,只是解讀角度和觀點不同。


..........所以又回歸原點....既然沒有衝突那該如何取得平衡呢?

Spring Data - Hadoop and MapReduce



O'Reilly 的 Spring Data 這本書中文翻譯本出了!速度真快,英文版都還沒看幾張就翻譯好了~@o@ 對於資訊焦慮又懶惰如我的人來說,這本書的架構清楚有條理,內容算是深入淺出可以很快就吸收。

話說這次會想要看這本書主要是想搞清楚Spring Data 對於在寫Hadoop的程式能有啥幫助,因為以前用過Spring Data 搭配MongoDB就覺得很方便。

這本書為了讓讀者容易了解Spring Data的好處,所以在鋪陳上有下一番功夫,首先先介紹一般MapReduce程式是如何撰寫,有什麼麻煩和不方變得地方,如果用了Spring Data 以後能有什麼改變,甚至還進一步的建議讀者搭配Spring Integration 和 Spring Batch 一起服用。

首先作者先以Hadoop 的 hello word - word count來舉例,一般Hadoop必須怎麼寫與執行,必須先設定好Hadoop的環境變數,然後再執行以下指令:

# hadoop jar hadoop-examples-1.0.1.jar wordcount /user/howie/input/article.txt /user/howie/output


但是真實世界的案例,一定是希望能透過傳遞參數直接改變程式所要連接的對象(比如說不同的Hadoop Server),因此這本書透過範例,一步一步取代傳統的作法,首先先利用maven 的appassembler:assemble 功能,包成在Linux下的執行檔:

# cd hadoop/wordcount
# mvn clean package appassembler:assemble
# sh ./target/appassembler/bin/wordcount hdfs://localhost:9000/user/howie/input
hdfs://localhost:9000/user/howie/output


不過這個方法的缺點是連線的參數與設定檔已經跟程式包在一起,所以第二步再開始取代掉程式寫死設定Job的方法,改成由spring 的方式,可以透過xml設定,這也是為了之後可以把參數設定拉出來埋下伏筆:

Job job = new Job(conf, "word count");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);


改成把所有設定值都拉到spring-context.xml

fs.default.name=${hd.fs}

input-path="${wordcount.input.path}"
output-path="${wordcount.output.path}"
mapper="org.apache.hadoop.examples.WordCount.TokenizerMapper"
reducer="org.apache.hadoop.examples.WordCount.IntSumReducer"


最後只需要這樣就可以執行程式,其他東西都透過讀取設定檔來搞定

$ mvn clean package appassembler:assemble
$ sh ./target/appassembler/bin/wordcount


而且只要改成這樣,之後就可以完全納入Spring 的 @Autowired 管理範疇,不過我發現這本比較著重在MapReduce的範例,反而Hbase的設定就草草帶過,結果反而在Hbase遇到比較多問題....=_= 之後再整理一下Hbase的設定改如何設定。


感覺最近又進入死腦筋鑽牛角尖狀態...明明還有好多事要做,卻一直堅持要把spring data 跟hadoop搞清楚...Orz..

2013年3月21日 星期四

關於Data analystis 線上課程


圖片來源:pcconlinecourses



在這個年代,只有想不想學或是有沒有時間學,而沒有學不學的到這件事了...Orz..
(其實還是有學不會的可能~XD) 有興趣的可以參考看看



Standford University - Machine Learning
https://www.coursera.org/course/ml

Toronto University - Neural Networks for Machine Learning
https://www.coursera.org/course/neuralnets

Washington University - Machine Learning
https://www.coursera.org/course/machlearning

Washington University - Introduction to Data Science
https://www.coursera.org/course/datasci

Johns Hopkins University - Data Analysis
https://www.coursera.org/course/dataanalysis

Johns Hopkins University - Computing for Data Analysis (by R)
https://www.coursera.org/course/compdata


Statistics
https://www.udacity.com/course/st095

Online Education in Analytics, Data Mining and Data Science
http://www.kdnuggets.com/education/online.html