Hadoop on MySQL Database operation

Hadoop 的運作概念大概是這樣
 
Tool -> FileSplit -> Mapper -> Output Collector -> Reducer -> File
 
其中的 FileSplit 是傳給Mapper 的資料, 請參考官方網站有說明
當FileSplit 利用了 File  格式作為 Mapper 的參數傳遞, 顯然瓶頸會是在 File I/O 的部分,
於是能否利用 DB 直接就作為Mapper 傳輸 , 這種想法油然而生!!…
實際試了一下, 果然可以….
並且速度大約是 原本的 20 倍 左右,
觀念上其實並沒有太複雜, 只是利用原本的
jobConf.setInputFormat(SequenceFileInputFormat.class);
改為
jobConf.setInputFormat(DBInputFormat.class);
而已, 當然…既然使用了 DBInputFormat 作為 傳輸參數,
那預設就是以 取出資料的 ROW 作為 mapper 的呼叫單位,
相關的參數也別忘了得要引入, 例如 : DB_URL , DB_Driver, ….等等
        DBConfiguration.configureDB(jobConf,
                                "com.mysql.jdbc.Driver",
                                "jdbc:mysql://127.0.0.1:3306/test?user=midc&password=midc&useUnicode=true&characterEncoding=utf8",
                                "username", "password");
        DBInputFormat.setInput(jobConf, MySQLWritable.class, "SELECT * FROM tablename", "SELECT count(*) FROM tablename");
廣告

About fenjj

Perfect !!??...
本篇發表於 Uncategorized。將永久鏈結加入書籤。

發表迴響

在下方填入你的資料或按右方圖示以社群網站登入:

WordPress.com Logo

您的留言將使用 WordPress.com 帳號。 登出 / 變更 )

Twitter picture

您的留言將使用 Twitter 帳號。 登出 / 變更 )

Facebook照片

您的留言將使用 Facebook 帳號。 登出 / 變更 )

Google+ photo

您的留言將使用 Google+ 帳號。 登出 / 變更 )

連結到 %s