elasticsearch-hadoop可以看作是一個connector,使得數(shù)據(jù)可以在hadoop和elasticsearch之間雙向流動圈匆。從架構(gòu)上看,elasticsearch-hadoop集成了兩個分布式系統(tǒng):hadoop和elasticsearch餐弱。Hadoop及其相關(guān)庫具有分布式計算分析能力,elasticsearch具有搜索和聚合能力。elasticsearch-hadoop的目標(biāo)就是透明地連接這兩種組件膏蚓,并使這兩個組件彼此獲益瓢谢。
Map/Reduce and shards
可擴展性(scalability)的關(guān)鍵組件是并行性和能夠?qū)⑷蝿?wù)分成多個小的任務(wù)在不同的節(jié)點上執(zhí)行。Hadoop通過splits,elasticsearch通過shard來支持任務(wù)的分割驮瞧,以達(dá)到并行性的目的氓扛。通俗地講,分割更多的任務(wù)意味著可同時讀取數(shù)據(jù)源不同的部分论笔,更多的shard意味著有更多的桶用于讀取索引的數(shù)據(jù)采郎。因此,elasticsearch-hadoop使用splits和shards作為hadoop和elasticsearch集群上執(zhí)行任務(wù)的主要驅(qū)動。
從elasticsearch中讀取數(shù)據(jù)
從elasticsearch中讀取數(shù)據(jù)時狂魔,shards扮演著重要角色蒜埋。由于elasticsearch作為數(shù)據(jù)源,elasticsearch-hadoop會每個查詢的shard創(chuàng)建一個split,也就是說給定一個針對Index I的查詢毅臊,elasticsearch-hadoop會自動探測elasticsearch中的shard數(shù)理茎,對于每個shard,與hadoop的一個input split對應(yīng)黑界,與spark的一個partition對應(yīng)管嬉。
(實驗驗證)
讀取性能地優(yōu)化可通過增加elasticsearch的shard數(shù)量,因此增加了hadoop/spark的任務(wù)數(shù)朗鸠,提高并行度蚯撩。
向elasticsearch中寫數(shù)據(jù)
向elasticsearch中寫數(shù)據(jù),是由hadoop中的split任務(wù)數(shù)或spark中的partitions數(shù)所決定的烛占。elasticsearch-hadoop會探測寫操作涉及的主(primary)shard數(shù)量胎挎,以將這些寫操作分布在這些shard中,越多split任務(wù)數(shù)或spark partition數(shù)量忆家,越高的并行度犹菇。
疑問:spark partitions數(shù)量,如何和主shard數(shù)對應(yīng)的芽卿?
例如:partitions = 2, primary shard = 3, index = 1; partitions = 2, primary shard = 7, index = 2, index1 = 3, index2 = 4;
Data co-location
無論何時揭芍,只要有可能elasticsearch-hadoop都會在hadoop/spark集群和elasticsearh集群之間共享彼此集群的信息,以優(yōu)化數(shù)據(jù)的co-location卸例。這意味著每次從elasticsearch中讀取數(shù)據(jù)時称杨,就會將elasticsearch的Ips傳送給hadoop/spark以優(yōu)化任務(wù)的執(zhí)行。如果希望數(shù)據(jù)co-location或者數(shù)據(jù)有可能co-location以達(dá)到節(jié)省網(wǎng)絡(luò)傳輸?shù)哪康目曜M可能的將elasticsearch集群和hadoop/spark集群安排在
同一個rack上(需要更進(jìn)一步了解rack的概念及作用)
參考:https://www.elastic.co/guide/en/elasticsearch/hadoop/2.3/arch.html