簡體   English   中英

在Hadoop中使用BlazingCache開源會降低性能

[英]Using BlazingCache open source in Hadoop degrades the performance

我嘗試使用開放源代碼BlazingCache http://blazingcache.org/為我的應用程序實現協調器緩存的想法。

因此,我僅使用WordCount示例https://hadoop.apache.org/docs/current/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html#Example:_WordCount_v2.0來測試此緩存庫。 這是我的整個代碼:

public class WordCount2 {

  public static class TokenizerMapper
       extends Mapper<Object, Text, Text, IntWritable>{

    //...
    private static Cache<String, String> cache;
    @Override
    public void setup(Context context) throws IOException,
        InterruptedException {
      //...
      initCache();
    }

    private void initCache() {
         CachingProvider provider = Caching.getCachingProvider();
         Properties properties = new Properties();
         properties.put("blazingcache.mode","clustered");        
         properties.put("blazingcache.zookeeper.connectstring","localhost:1281");
         properties.put("blazingcache.zookeeper.sessiontimeout","40000");        
         properties.put("blazingcache.zookeeper.path","/blazingcache");           
         CacheManager cacheManager = provider.getCacheManager(provider.getDefaultURI(), provider.getDefaultClassLoader(), properties);
         MutableConfiguration<String, String> cacheConfiguration = new MutableConfiguration<>();
         cache = cacheManager.createCache("example", cacheConfiguration);
    }

    @Override
    public void map(Object key, Text value, Context context
                    ) throws IOException, InterruptedException {
        //...
        cache.put(word.toString(), one.toString());
      }
    }
  }

  //...
}

問題出在網上:

cache.put(word.toString(), one.toString());

在地圖功能中。

當將此行插入代碼時,整個作業的性能突然下降。 (我正在使用Eclipse在本地模式下運行WordCount示例)。
為什么會發生這種情況,我該如何解決?

我不確定造成問題的原因是什么,您可以嘗試檢查日志並在blazingcache.xxx記錄器中查找“連接事件”和異常。

請注意,Cache.put必須最終通知托管數據副本的其他客戶端,這是網絡操作。 在這樣的MapReduce作業中,可能有許多客戶端持有對同一“單詞”的引用。 請記住要關閉CacheManager,因為每個CacheManager都會創建一個CacheClient,因此它會保留資源並接收通知。

當基礎CacheClient在斷開模式下工作時,它可能會減慢速度,因為如果沒有與高速緩存服務器的連接,它就不能保證高速緩存的一致性,因此它嘗試了很長時間的連接。

我已經轉載了您的情況,您必須編輯以下幾行:

1)您只需“創建”緩存一次

try {
   cache = cacheManager.createCache("example", cacheConfiguration);
} catch (CacheException alreadyCreated) {                
}
cache = cacheManager.getCache("example");

2)不要使用對緩存的靜態引用3)刪除可發現緩存服務器的行

properties.put("blazingcache.mode", "clustered");

通過這些更改,示例代碼可以很好地運行。

如果要以實集群模式運行,則必須啟動一個zookkeeper集群和至少一個blazingcache服務器。 沒有Zookeeper,我會收到以下錯誤循環:

16/07/08 13:26:14 INFO zookeeper.ClientCnxn:打開與服務器localhost.localdomain / 127.0.0.1:1281的套接字連接。 不會嘗試使用SASL進行身份驗證(未知錯誤)16/07/08 13:26:14 WARN zookeeper.ClientCnxn:會話0x0用於服務器null,意外錯誤,關閉套接字連接並嘗試重新連接java.net.ConnectException:Connessione rifiutata org.org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361)上的sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717)上的sun.nio.ch.SocketChannelImpl.checkConnect(本機方法) apache.zookeeper.ClientCnxn $ SendThread.run(ClientCnxn.java:1081)16/07/08 13:26:15 INFO mapreduce.Job:以超級模式運行的Job job_local7226039_0001:false 16/07/08 13:26:15 INFO mapreduce.Job:映射0%減少0%16/07/08 13:26:16信息zookeeper.ClientCnxn:打開與服務器localhost.localdomain / 127.0.0.1:1281的套接字連接。 不會嘗試使用SASL進行身份驗證(未知錯誤)16/07/08 13:26:16 WARN zookeeper.ClientCnxn:服務器null的會話0x0,意外錯誤,關閉套接字連接並嘗試重新連接

您應該在blazingcache支持郵件列表中尋求幫助

如果您在本地模式(單個JVM)下進行測試,則最好刪除這些行,然后重試:

properties.put("blazingcache.mode","clustered");        
properties.put("blazingcache.zookeeper.connectstring","localhost:1281");
properties.put("blazingcache.zookeeper.sessiontimeout","40000");        
properties.put("blazingcache.zookeeper.path","/blazingcache");

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM