Hadoop DistributedCache分散式快取的使用
做專案的時候遇到一個問題,在Mapper和Reducer方法中處理目標資料時,先要去檢索和匹配一個已存在的標籤庫,再對所處理的欄位打標籤。因為標籤庫不是很大,沒必要用HBase。我的實現方法是把標籤庫儲存成HDFS上的檔案,用分散式快取儲存,這樣讓每個slave都能讀取到這個檔案。
main方法中的配置:
//分散式快取要儲存的檔案路徑 String cachePath[] = { "hdfs://10.105.32.57:8020/user/ad-data/tag/tag-set.csv", "hdfs://10.105.32.57:8020/user/ad-data/tag/TagedUrl.csv" }; //向分散式快取中新增檔案 job.addCacheFile(new Path(cachePath[0]).toUri()); job.addCacheFile(new Path(cachePath[1]).toUri());
參考上面程式碼即可向分散式快取中新增檔案。
在Mapper和Reducer方法中讀取分散式快取檔案:
/* * 重寫Mapper的setup方法,獲取分散式快取中的檔案 */ @Override protected void setup(Mapper<LongWritable, Text, Text, Text>.Context context) throws IOException, InterruptedException { // TODO Auto-generated method stub super.setup(context); URI[] cacheFile = context.getCacheFiles(); Path tagSetPath = new Path(cacheFile[0]); Path tagedUrlPath = new Path(cacheFile[1]); 檔案操作(如把內容讀到set或map中); } @Override public void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException { 在map()中使用讀取出的資料; }
同樣,如果在Reducer中也要讀取分散式快取檔案,示例如下:
/* * 重寫Reducer的setup方法,獲取分散式快取中的檔案 */ @Override protected void setup(Context context) throws IOException, InterruptedException { super.setup(context); mos = new MultipleOutputs<Text, Text>(context); URI[] cacheFile = context.getCacheFiles(); Path tagSetPath = new Path(cacheFile[0]); Path tagSetPath = new Path(cacheFile[1]); 檔案讀取操作; } @Override public void reduce(Text key, Iterable<Text> values, Context context) throws IOException, InterruptedException { while(values.iterator().hasNext()){ 使用讀取出的資料; } context.write(key, new Text(sb.toString())); }
相關文章
- 分散式快取NCache使用分散式快取
- Hadoop MapReduce進階 使用分散式快取進行replicated joinHadoop分散式快取
- 分散式快取分散式快取
- 分散式快取方案分散式快取
- redis→分散式快取Redis分散式快取
- 聊聊分散式快取分散式快取
- 聊聊本地快取和分散式快取快取分散式
- EhCache 分散式快取/快取叢集分散式快取
- Redis分散式快取安裝和使用Redis分散式快取
- 雲上的分散式快取分散式快取
- WEB 應用快取解析以及使用 Redis 實現分散式快取Web快取Redis分散式
- 分散式快取擊穿分散式快取
- SmartSql Redis 分散式快取SQLRedis分散式快取
- Redis——快取穿透、快取擊穿、快取雪崩、分散式鎖Redis快取穿透分散式
- 分散式快取 - 快取簡介,常用快取演算法分散式快取演算法
- Hazelcast簡單的分散式快取AST分散式快取
- 分散式快取 - 概念解釋分散式快取
- 分散式之快取擊穿分散式快取
- 關於分散式快取memcache分散式快取
- k04_分散式快取分散式快取
- 分散式快取基礎教程分散式快取
- 分散式系統快取系列一 認識快取分散式快取
- 用Java寫一個分散式快取——快取管理Java分散式快取
- 分散式系統中有哪些快取?分散式快取
- 分散式快取系統之Memcached分散式快取
- Memcached 分散式快取實現原理分散式快取
- 分散式快取架構綜述分散式快取架構
- 應對分散式快取當機的方案分散式快取
- 解析分散式系統的快取設計分散式快取
- Gitlab Runner的分散式快取實戰Gitlab分散式快取
- ASP.NET Core - 快取之分散式快取ASP.NET快取分散式
- 《分散式快取》讀書筆記二分散式快取筆記
- 深入分散式快取 — 學習總結分散式快取
- 如何用REDIS實現分散式快取Redis分散式快取
- Cacheonix:Java分散式叢集快取框架Java分散式快取框架
- Java 開源分散式快取框架EhcacheJava分散式快取框架
- 分散式快取GemFire架構介紹分散式快取架構
- 搞懂分散式技術15:快取更新的套路分散式快取