2015-09-14 34 views
0

我們正在創建一個類似於Hadoop和Hive應用程序的字典。 一般過程是針對大型固定字典(大約100G,如多語言WordNet字典)對億萬條日誌數據(例如單詞)進行批量掃描。用於處理非常大的字典文件的Hadoop/Hive分佈式緩存的替代解決方案?

我們已經有一個Java應用程序的單機版本(我們稱之爲「singleApp」)來查詢此字典。我們目前無法修改這個Java應用程序或字典文件,因此我們無法重新設計和重新編寫一個完整的新MapReduce應用程序。我們需要使用這臺單機版Java應用程序作爲構建模塊將其擴展到MapReduce版本。

目前,我們可以通過調用這個「singleApp」創建一個MapReduce應用程序,並使用分佈式緩存傳遞一個字典子集(例如1G字典)。但是,如果我們使用完整字典(100G),應用程序啓動非常緩慢。此外,我們確實希望將這些字典安裝到Hadoop集羣中,而不必每次使用-file或分佈式緩存選項進行調用。

我們試圖將字典文件直接複製到從節點的本地磁盤中,並將java應用程序指向它,但找不到字典。如果我們想要在這種方法上進行更多調試,那麼需要完成哪些任務的文檔?

關於什麼應該是我們處理這種情況的最佳實踐/過程(非常大的字典文件,並且傾向於始終安裝字典文件)的任何建議?

回答

1

您不需要爲100GB的數據使用Hadoop。您也可以使用分佈式緩存作爲處理平臺。

將分佈式緩存考慮爲內存數據網格。

嘗試TayzGrid Open Source In-Memory DataGridMapReduce用例如您的。

public class ProductAnalysisMapper implements 
          com.alachisoft.tayzgrid.runtime.mapreduce.Mapper { 

    @Override 
    public void map(Object ikey, Object ivalue, OutputMap omap) 
    { 
      //This line emits value count to the map. 
      omap.emit(ivalue, 1); 
    } 
} 

public class ProductAnalysisReducer implements 
         com.alachisoft.tayzgrid.runtime.mapreduce.Reducer { 

    public ProductAnalysisReducer(Object k) { /* ... */ } 

    @Override 
    public void reduce(Object iv) { /* ... */ } 

    @Override 
    public void finishReduce(KeyValuePair kvp) { /* ... */ } 
} 
+2

嗨,Basit,感謝您的幫助。我們的輸入數據可能是10TB +,字典數據是100G +。我關心的是分佈式緩存的性能,如果我們把這個100G + dict文件放入分佈式緩存中的話。 – bigblue

+1

您在緩存中加載100G +數據的權利?不是10TB +。 –

+1

而我已經看到緩存運行的每個集羣都有200GB內存的6個集羣:) –

相關問題