blog.Ring.idv.tw

Articles

Hadoop - Uncompressed SequenceFile Format 詳解

本文已同步刊於:Hadoop Taiwan User Group

剛剛在研究一個「Uncompressed SequenceFile Format」檔案,一個個對照Hadoop的原始碼來驗證~ 心得整理如下:

從「Class SequenceFile」所描述的~ 基本上「SequenceFiles」有三種不同的檔案格式~ 它們分別為「Uncompressed SequenceFile Format」、「Record-Compressed SequenceFile Format」和「Block-Compressed SequenceFile Format」,後兩種都是採用壓縮的檔案格式~ 而文本主要介紹剖析「Uncompressed SequenceFile Format」~ 了解這一個檔案格式之後~ 另外兩個自然能得心應手~ 而官方針對這個檔案格式的描述如下:

每一種檔案格式都包含了共同的「SequenceFile Header」用來記錄一些基本資訊~ 如:keyClassName、valueClassName等…

本文以下圖的範例來介紹:

筆者已用「紅→藍→綠」顏色的順序來標記~ 以方便對照~

0x53 0x45 0x51

這是SequenceFile Format的magic header「SEQ」,和一般的檔案格式一樣~ 都是用來判別這個檔案是否屬於「SequenceFile Format」。

0x06

版本編號,目前最新版為「SEQ6」。

0x19 0x6F 0x72 ..... 0x74

這部份屬於keyClassName(Key的類別名稱),而第1個Byte(0x19)用來表示此字串的長度,此範例為「org.apache.hadoop.io.Text」。

0x22 0x6F 0x72 ..... 0x65

這部份屬於valueClassName(Value的類別名稱),第1個Byte(0x22)也是用來表示此字串的長度,此範例為「org.apache.hadoop.io.BytesWritable」。

0x00

是否支援compression?「0x00」=否 (此為Boolean所以佔1個Byte)

0x00

是否支援blockCompression?「0x00」=否(此為Boolean所以佔1個Byte)

0x00 0x00 0x00 0x00

metadata資訊,此範例沒有包含任何「SequenceFile.Metadata」的資訊~ 所以輸出「0x00 0x00 0x00 0x00」(此為Int所以佔4個Bytes),而這四個Bytes也等同於metadata的長度,也就是至少一定會佔用這4個Bytes。

0x77 0xE5 0xEF ..... 0xA7

一個sync標記,用來表示一個「Header」的結束,此標記是亂數產生的~ 從原始碼中可得知此標記是由「new UID()+"@"+time」的方式再進行「MD5」編碼。

0x00 0x35 0x62 0x8B

整筆Record的size~ (此為Int佔4個Bytes),一筆Record包含「Key、Value」的內容資訊。

0x00 0x00 0x00 0x2C

Key內容的size~ (此為Int佔4個Bytes)。

0x2B 0x68 0x64 ..... 0x47

由於筆者用「org.apache.hadoop.io.Text」當Key,所以這裡的資訊是描述一個檔案的路徑名稱,第1個Byte(0x2B)用來表示此字串的長度,內容為「hdfs://nlp:9000/user/hdp/image/P1010099.JPG」。

0x00 0x35 0x62 0x5B

Value內容的size~ (此為Int佔4個Bytes)。

0xFF 0xD8 0xFF .....

筆者以JPEG檔案格式做為介紹~ 所以這裡是「0xFF、0xD8」開頭。

最後~ 雖然Hadoop官網沒有公佈詳細的格式介紹(還是我沒找到?) 希望本文能有所助益。

參考資源

SequenceFile - Hadoop Wiki

Class SequenceFile

2008-12-25 20:06:27 | Add Comment

Comet - The Next Generation Ajax 2.0

Comet - The Next Generation Ajax 2.0」.這個標題看起來似乎很聳動!!! 嗯~ 筆者是從Comet and Reverse Ajax: The Next-Generation Ajax 2.0這本書籍借來的~ (感覺這本書我應該要帶回家了~ XD) ~ 那何謂Comet?

先回顧一下2005年2月18日的那天~ 在Web的領域上出現了一個新的名詞,它叫做「Ajax」,這個名詞是由「Jesse James Garrett」所發表的一篇「Ajax: A New Approach to Web Applications」所提出來的~ 它為整個Web Application帶來了「Asynchronous」的新體驗~ 從那時候學術上就多了很多篇Ajax相關的論文了~ 因為利用「Ajax」我們可以開發「幾乎接近」Desktop Application的操作模式~ 嗯~ 一切聽起來似乎很美妙~ 不過它和本文所提供的「Comet」有何關係?

這裡我們舉一個例子來說明~ 假設我們直接用「XHR」和「setInterval」這樣的「polling」機制來打造一個「Chat Web Application」~ 不過問題來了~ 大多數Web Server所實作的技術不是採用Thread就是Process來處理Client的請求~ 但這樣的「Polling」機制將會造成後端伺服器常常會忙碌於處理無謂的請求~(因為沒有人發言聊天,它還是會持續送請求給後端伺服器,以致於浪費資源),所以我們需要一個「Push」的技術來避免類似這樣無謂的請求~ 但「HTTP」終究是一種「Connectionless」的通訊協定~ 那該如何達成這樣的應用呢?用Flash中的Socket嗎?雖然Flash Player在目前的佔有率達到了99%(Flash Player Statistics),但終究不是百分之百~ 所以在2006年3月3日的這天~ 由領軍「Dojo - JavaScript Toolkiet」Project的「Alex Russell」在他的Blog發表了一篇「Comet: Low Latency Data for the Browser」,這個時候「Comet」就正式被提出來了~ 基本上「Comet」和「Ajax」這兩個名詞都不是代表某一項技術~ 而比較像是代表「某幾項」技術的集合而創造的~ 因為這樣比較好溝通~ 所以像GMail裡面所整合的GTalk功能~ 其實就是採用Comet來達成的~ 想當然這個名詞被提出來了~ 學術上又會開始產生這些相關的論文了~ 比較相關的有「2007 - A Comparison of Push and Pull Techniques for AJAX」、「2008 - XVSMPBayeux A Protocol for Scalable Space Based Computing in the Web」... 先寫到這~ 有空再介紹一個實例及詳細的細節~或者您對Comet有任何心動的話~ 請參考相關資源 :p

最後本文如果有任何謬誤的地方~ 請不吝給予指正,謝謝。

相關資源

HTTP Streaming - Ajax Patterns

Chunked transfer encoding

Comet Architecture

Asynchronous HTTP Architecture

Comet Daily (朝聖之地!!)

Cometd.org

java.net: Developing Applications Using Reverse Ajax

Asynchronous HTTP and Comet architectures - 很讚的資源!

How to implement COMET with PHP

Continuations - Jetty - Codehaus

Server Push and Server Sockets

Ajaxian: IFrame + Script Tags = Portable Comet

Hello Bayeux

Comet: Reverse Ajax for streaming data from the server

Jetty cometd(Continuation)学习笔记

Ajax Dojo Comet Tutorial

Write scalable Comet applications with Jetty and Direct Web Remoting - 詳解

2008-12-22 21:50:56 | Comments (1)

小海Oceanic - 首張個人專輯

小海(本名:曾明賢).是一位PHP工程師~ 也是筆者的格友~

不過~ 他最大的興趣是音樂上的創作~ 所以這張專輯從「主唱、和聲、吉他、貝斯、MIDI、鍵盤、編曲、混音、後製、錄音...」完完全全一手包辦~ XDDD

白天寫程式~ 晚上創作音樂~ 完全從頭到尾自製一張唱片~ 真是有夠給它佩服的~~ Orz!! (想必一定糟遇到不少的困難~ 挺你啦!!)

他在大學時期曾參加學校舉辦的歌唱比賽,獲得雙人組的第一名,以及個人組的第二名,所以也因此愛上在舞臺表演的感覺~

如果您對他有更多「興趣」的話 ^^a 可以參閱iThome小海的專訪:用寫程式為主業,支撐音樂的夢想

希望大家能多多支持~ 當然最實際的行動就是帶一張回家啦~ ^^v

購買處:小海首張個人專輯 - 人生海海 - 可以在備註欄要求他的個人簽名喲!

P.S. 筆者個人最喜歡的是「與你重逢」這一首~ ^^

小海首張個人專輯-線上試聽

相關文章

小海的人生海海 與 製作甘苦

不能錯過得好聲音 小海首張個人專輯

2008-12-15 17:01:37 | Comments (2)

Panasonic DMC-LX3 韌體更新 v1.2

.2009/01/15 官方釋出V1.2更新版本

請至「DMC-LX3 Firmware update service」下載更新檔案「LX3_V12.exe」~ 然後直接解壓縮它,會產生一個「LX3__120.bin」的檔案(6,096,384 Bytes)。

接著直接將「LX3__120.bin」複製到你SD卡的「根目錄」下,最後一個步驟就是將LX3的拍照/瀏覽設為「瀏覽模式」,並請確定你的「電池是飽滿的」~ 然後就直接給它開機吧~ 接著就會詢問你是否要更新韌體v1.2,大約三秒鐘就更新成功了~ 不過它的更新程式不會顯示說你更新成功~ 而是會直接跑到「瀏覽模式」下,算是一個UI上設計的缺點~

DMC-LX3 Firmware v1.1

1.支援外閃DMW-FL220

2.改善「自動白平衡(AWB)」的效能

3.改善「自動對焦(AF)」的效能

DMC-LX3 Firmware v1.2

1.改善搭配使用DMW-FL220閃光燈的「白平衡閃光設定」

2.在開啟光學防手震的情況下,改善「iA和Scene模式下的快門設定」

3.針對JPEG影像檔案提供「更適切的EXIF資訊」

有LX3的朋友們~ 趕緊去更新嚕~ ^^

2008-12-15 16:09:43 | Add Comment

我想上這樣的課程!!!!!!!!!!!!

(圖片來源:MIT students build mobile applications in 13 weeks)

剛剛看到這篇報導「MIT students build mobile applications in 13 weeks」~

由學生分組進行一個「Building Mobile Applications」的課程~ 然後個別由Google、Nokia、Bank of America和Microsoft的講師來指導與協助~

想當然開發的平台一定包含了Google Android、Nokia Symbian和Microsoft Windows Mobile~ (我當然選Android~ XDD)

裡面有介紹各組學生的Project~ 有興趣的話看看別人用三個月的時候做些什麼成果吧~

整個課程就感覺像短期的工作坊似的~ 讓我一整個很熱血呢!!!

不過國內應該不容易... = ="

2008-12-13 11:12:45 | Add Comment

Next Posts~:::~Previous Posts
Copyright (C) Ching-Shen Chen. All rights reserved.

::: 搜尋 :::

::: 分類 :::

::: 最新文章 :::

::: 最新回應 :::

::: 訂閱 :::

Atom feed
Atom Comment