【问题标题】:Using BlazingCache open source in Hadoop degrades the performance在 Hadoop 中使用 BlazingCache 开源会降低性能
【发布时间】:2016-06-09 12:03:27
【问题描述】:

我尝试使用一个名为 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 示例)。
为什么会发生这种情况,我该如何解决?

【问题讨论】:

    标签: java performance hadoop


    【解决方案1】:

    如果您在本地模式(单 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");
    

    【讨论】:

      【解决方案2】:

      我不确定您的问题的原因是什么,您可以尝试检查您的日志并在 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,意外错误, 关闭套接字连接并尝试重新连接 java.net.ConnectException:Connessione rifiutata 在 sun.nio.ch.SocketChannelImpl.checkConnect(Native Method) 在 sun.nio.ch.SocketChannelImpl.finishConnect(SocketChannelImpl.java:717) 在 org.apache.zookeeper.ClientCnxnSocketNIO.doTransport(ClientCnxnSocketNIO.java:361) 在 org.apache.zookeeper.ClientCnxn$SendThread.run(ClientCnxn.java:1081) 16/07/08 13:26:15 信息 mapreduce.Job:作业 job_local7226039_0001 在超级模式下运行:假 16/07/08 13:26:15 INFO mapreduce.Job: 地图 0% 减少 0% 16/07/08 13:26:16 INFO zookeeper.ClientCnxn: 开放 与服务器 localhost.localdomain/127.0.0.1:1281 的套接字连接。将要 不尝试使用 SASL 进行身份验证(未知错误)16/07/08 13:26:16 WARN zookeeper.ClientCnxn: Session 0x0 for server null, 意外错误,关闭套接字连接并尝试重新连接

      您应该在 blazingcache 支持邮件列表中寻求帮助

      【讨论】:

      • 感谢您的回答!
      猜你喜欢
      • 1970-01-01
      • 2016-02-25
      • 1970-01-01
      • 2014-02-08
      • 2020-12-21
      • 1970-01-01
      • 2021-02-10
      • 2015-07-01
      • 2018-12-12
      相关资源
      最近更新 更多