因此,对于第一次迭代,我将样例质心文件放在分布式缓存中,使用
if (iteration == 0) {
Path hdfsPath = new Path(input + "/centroid.txt");
DistributedCache.addCacheFile(hdfsPath.toUri(), conf);
} else {
Path hdfsPath = new Path(again_input + "/part-00000");
DistributedCache.addCacheFile(hdfsPath.toUri(), conf);
在下一次迭代中,我将获取again_input目录,该目录与第一次迭代的输出相同,其中存储了新计算的质心
然而,映射器再次获取它在第一次迭代中获取的质心文件。
下面是在mapper类中提取质心文件的代码:
Path[] cacheFiles = DistributedCache.getLocalCacheFiles(job);
BufferedReader cacheReader = new BufferedReader(new FileReader(cacheFiles[0].toString()));
疑问1:分布式缓存是否会在作业完成后清除所有文件,还是保留这些文件?例如,centroid.txt在迭代1后被清除。
疑点2:我访问的文件是否正确?
在本例中,您是否在迭代中重用配置类对象conf
?
我认为这就是问题所在。您能检查一下哪些所有文件被添加到第二个迭代作业的分布式缓存中吗?
可以通过遍历PATH[]数组来实现
Path[] cacheFiles;
Web 应用程序可能需要为成百上千甚至更多的用户同时提供服务。如果你没有采取必要的措施,在这种负载下,你的网站可能会崩溃或变得没有响应。 假设在主页显示最后 10 条新闻,并且平均每分钟有上千名用户访问此页面。你可能为每个用户通过查询数据库来显示页面视图信息: SELECT TOP 10 Title, NewsDate, Subject, Body FROM News ORDER BY NewsD
问题内容: 我正在寻找Java分布式缓存解决方案。我们希望功能喜欢: 我们已经分析了Terracotta这样的框架,它似乎是缓存框架中我们想要的一切……但是,似乎需要一个中央缓存节点,这成为我们的单点故障。 除了推出我们自己的解决方案之外,还有其他想法吗? 问题答案: 我建议使用JBossCache或EhCache(使用分布式缓存侦听器)。我都用过,我都喜欢,它们都适合您的要求。
我正在使用ehcache(2.10.1)和terracotta(开源4.3.1)实现分布式缓存。我在单台机器上尝试了两个JVM实例和一个terracotta服务器,代码按预期工作,没有错误。 现在,我尝试运行相同的terracotta服务器,但在虚拟机上使用客户端。在虚拟机上运行客户端时,会收到以下消息和错误: 使用的 tc-config.xml 文件: 使用的 ehcache.xml 文件: 在
[命名空间: Serenity.Caching, 程序集: Serenity.Caching.Couchbase] Redis 是另一种内存数据库,由于其优秀的性能和可靠性, StackOverflow 也在使用它,他们所有的 WEB 服务只用了一个 Redis 数据库。 你可以从 Serenity.Caching.Redis 的 NuGet 程序包获取该服务类型的 Serenity 实现。 它可
[命名空间: Serenity.Caching, 程序集: Serenity.Caching.Couchbase] Couchbase 是一个分布式数据库,有像 Memcached 的访问接口。 可以从 NuGet 程序包 Serenity.Caching.Couchbase 获取 Serenity 对此服务类型的实现。 一旦你使用服务定位器注册它: Dependency.Resolve<IDep
[命名空间: Serenity.Abstractions, 程序集: Serenity.Core] 如果你现在不需要分布式缓存,但希望现在编写的代码在将来可以与分布式缓存一起工作,你可以使用 DistributedCacheEmulator 类。 DistributedCacheEmulator 也对单元测试和部署环境非常有用(因此,开发人员不需要访问分布式缓存系统而不会影响彼此的工作)。 Dis