分散式系統(Hadoop)


     微程式資訊股份有限公司:研發部協理 薛共和
     分享對象:公司一級主管
雲端運算?
你說的雲端計算該不會是虛擬主機吧(Virtual
Private Server:VPS),還是把程式做成web的
形式?外行人只能看熱鬧,像廣達 鴻海 華碩...
之流,他們在談的雲端只是為了炒股票 ;雲端
運算的基礎不在硬體,而在軟體(程式語言)的
架構
嚴格說來雲端運算不是技術,它是概念, cloud
computing 跟 grid computing 並沒有明顯區
隔,兩者均是分散式運算衍伸的概念
Saas : YouTube、Facebook、Twitter、無名
       小站...(telnet 是最早的Saas)、iCloud
Paas : Google AppEngine、Microsoft
       Azure、Amazon S3、Amazon
       SimpleDB (LIVE+ v1.0有點這個味道)
       、Stackato
Iaas : 騰雲計算(TCloud:趨勢,雲端教我的事)、
       中華電信 (hicloud 自創 Caas)

對於資訊大國的台灣來說;沒有發展Paas 的條
件,因為;台灣沒有發展好用的程式語言或架構
的條件與經驗
資訊領域目前遇到的難題
巨量的資料處理,傳統的資料運算所遇到瓶頸

   思考:1) 悠遊卡要做行為分析時

   卡號 台北站
   卡號 台大門市
   ... ...
小額消費 日交易筆數 > 250,000 = 62M ;
一年 將近 2G(未包含交通使用紀錄)
2) 中華電信行動通訊用戶特性客製化行銷

   門號 接通起始時間
   門號 繞道其他網路起始時間
   門號 接通結束時間
    ... ...
   每個月保留資料記錄約為3~4T的資訊,
   且資料需要保存6~9個月的通話明細
3) 紐約股票交易中心一天會產生1T交易資訊
4) Facebook維護超過10億條的資訊,超過1P
   的資訊
 ps. giga G 10^9| tera T 10^12| peta P 10^15
Hadoop 的歷史
a) Hadoop 是由 Apache Lucene的建立者
   (Doug Cutting)所開發維護,而Lucene是一
   個文字分析的函式庫(search engine)
b) 當時一億個網址的索引,成本大約要花費硬
   體50萬 以及每個月3萬元 的執行成本
c) Nutch 計畫在 2002 年展開 ,他是一個網頁
   抓取與查詢的系統,但他們發現這個架構的
   規模跟不上真實世界的成長
d) 2003年 Google 發表了雲端運算論文 (
   GFS /Bigtable/MapReduce)
e) 2004年 Doug Cutting 開始一個開放原碼
   的實做 Distributed Filesystem (NDFS).
f) 2004, Google向世界發布 MapReduce 的
   架構
g) 2005 Doug Cutting在Nutch實做
   MapReduce
h) 2006 Doug Cutting 將 Nutch改名為
   Hadoop 並且加入的Yahoo 團隊
i) 2008 Yahoo 宣佈達成 10,000-core Hadoop
   cluster
j) 2009 Yahoo 破了世界紀錄 1T的 資料分析
   花了62秒,打敗google 之前創下的紀錄 68
   秒

從這個歷史;我們看到一個好的架構要發展10
年是很平常的事,很多程式語言甚至是發展20
年才紅起來
其他資料儲存/運算架構
RDBMS(Oracle/Mysql...)

Grid Computing(MPI)

Volunteer Computing(SETI@home)
分散運算原理(心得與奇想)
分析計算: 所有的計算都可以簡化成 + - ,包括
微積分...於是: (((1+10+4) * 3 - 20) /6 )* 8 - 1
((1+10+4) * 3 - 20) /6 -> 可以在 8台機器運
算,把結果加起來再 - 1
(1+10+4) 可在一台機器上分成三個不同的程
序 運算 , 最後 - 20 再 除以 6
實際上,分散式運算跟計算的交換律有關,只要
a(運算)b = b(運算)a 的情況 ,就能分散計算

但是;一旦我們把這個分析做完,實際的運算就
會發現根本不需要分散( 因為剩下的多半很簡
單) ,所以分散式的計算 ,重點在怎麼拆分計算,
而不是計算
MapReduce
  是一種分散運算的程式架構
要把微程式研究所內的每個同學分數加一分並
且把他的平均值計算出來

f(x) = x+1;
map: map (f[x] , [1,2,3,4,5]) -> [ 2,3,4,5,6];
       可平行運算
reduce: (2+3+4+5+6) / 5 = 4;
         核心運算不能平行
先看2個例子
a) UNIX 的指令

grep "微程式" test.log
grep "微程式" test.log | sort
grep "微程式" test.log | sort | wc

b) inverted index
HDFS
(Hadoop Distributed File
       System)
192M --> HDFS每個BLOCK 64M (0 , 1 , 2)
HDFS 每個block 會備份在三個地方,現需要
分散在 5 台機器(a b c d e)

          a   0   2
          b   1   2      0-->a
          c   1   2   => 1-->b
          d   0          2-->c
          e   0   1
商業上的實際運用
a) 中華電信的帳務處理
b) Yahoo 使用 Hadoop 處理 spam的問題
c) Google 使用 MapReduce 處理網頁的
   PageRank 計算
d) Facebook / Last.fm ... 使用 Hadoop
e) 氣象單位分析歷史氣象資訊
未來展望

a) 消費者行為分析

b) 推薦系統

c) 主動式RFID資訊分析

d) 智慧電網 資料分析
謝謝撥空參加會議
歡迎提出問題討論

Hadoop