[elasticsearch]elasticsearch-hadoop using mapreduce with elasticsearch

[elasticsearch]elasticsearch-hadoop using mapreduce with elasticsearch

說到對於大資料的操作,不少人會直接想到 hadoop 裡面的MapReduce。
由於,elasticsearch是個搜索引擎。
常常有些人會把他們兩個混用,但是,必須注意的就在於如果在於單純的query,千萬不要在MapReduce裡面有自己做分段query。因為這樣是種疊床架屋的操作。

一個 component 是否可以 scalability,可以從他的架構上可不可以把平行處理或是把大的task拆分成多個比較小的task並且同時處理。

Mapreduce splits and Elasticsearch shard

這樣的概念同時蘊含在 hadoop 與 elasticsearch裡面。MapReduce 在運行時,會把input 的file split 成若干等份。在 Mapreduce 中,一個 input split 就代表著一個 mapper的運行。換言之, input splits 就表示就是把一份data分別給分塊給多個mapper來處理。

elasticsearch的shard (nums of part in which a index is divided into) 拆分也蘊含著這樣的概念。每個 index 包含若干個 shards ,每個 shard 在 elasticsearch的 node上 實際儲存的是一個實際的 lucene index。

可閱讀之前文章了解 elasticsearch 稱為 分散式搜尋引擎的設計。

簡而言之,多個input splits就表示,同時有多個mapper會同時對來源的不同part做讀取的操作。

elasticsearch 官方所提供的 elasticsearch-hadoop lib 剛好就是針對 elasticsearch 與 mapreduce的特點去設計的。

protected static class ShardInputSplit extends InputSplit implements org.apache.hadoop.mapred.InputSplit {

elasticsearch-hadoop 的 InputSplit 是採取有多少 shard 來決定 mapper的數量的。

再來我們分別從 Read 與 Write 來看它。

Reading from elasticsearch 使用 mapreduce query elasticsearch

從 elasticsearch query資料時,預設 elasticsearch 每個index 的 shard數是5。所以,Hadoop 的 mapreduce 會起五個 map 到各個shard做操作。

Writing to elasticsearch 使用 mapreduce 寫資料到 elasticsearch

使用 elasticsearch-hadoop 時,會根據shard數起mapper 並把資料分發到不同map (shard) 平行的 寫入 elasticsearch。

由此觀之,elasticsearch 官方的libraries 已經提供了一條基於 elasticsearch 與 hadoop mapredcue performace 最高效設計原則。

廣告

發表迴響

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

WordPress.com Logo

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

Google+ photo

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

Twitter picture

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

Facebook照片

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

w

連結到 %s