sra*_*mar 5 c java hadoop mapreduce cluster-analysis
我是Hadoop的新手.我想使用分层聚类来聚集约1.5亿个项目,每个项目具有约30个属性.维度/属性总数约为5000.
我已经设计了一个多级解决方案,它通过对整个数据进行分区并在每个分区上执行聚类并在那之后合并每个聚类,直到检索到所需数量的聚类.
- Clustering is performed in each map task. So, each map task would be cpu-intensive.
- I am stuck at deciding about which of the following options to use:
- Map-Reduce in native Java.
- Map-Reduce using Hadoop Streaming on C.(This is because of each task being cpu-intensive).
Which option should I go with?. Is there any other way I could achieve my destination?
Run Code Online (Sandbox Code Playgroud)
在许多情况下,除非仔细优化 C 代码,否则 Java(如果编写得当)将产生与 C 相似的性能。在令人惊讶的许多情况下,编写良好的 Java 代码确实优于 C 代码,因为 C 代码在编译时进行了优化,而 Java 热点编译器在运行时进行了优化(它有关于每个代码路径使用频率的可用统计数据)。如果您收集了类似的统计信息,并且它们不会根据您的数据而改变,您有时可以向 C 编译器提供提示,例如通过使用__builtin_expect()某些 C 编译器中的可用信息。但这真的很难做到。
但是请记住,Java 的某些部分的价格相当高:
Collection<Integer>,ArrayList<Double>等进行计算,因为拳击的成本。这些在热循环中真的很贵。BufferedReader. Hadoop 使用Text而不是String- 缓冲区回收降低 I/O 成本是有原因的。对于 hadoop,请记住Hadoop 流不是免费的。如果您还没有意识到:hadoop-streaming 本身是用 Java 实现的。所有数据都将通过Java。Hadoop 流是一个 Java 应用程序,它启动您的脚本应用程序,向其中写入数据(即序列化数据!),并读回输出(反序列化数据!)。除了实际程序成本之外,您几乎可以获得所有 Java 成本:hadoop 流是一个用 Java 编写的映射器,它将数据传递给外部程序,读回答案,并将其返回给 Hadoop。对一些简单的东西进行基准测试,例如用 C 编写的字数与用 Java 编写的优化字数以查看差异。
对于你的实际任务,做 HAC:首先确保你有一个工作相似性。没有什么比构建大规模聚类算法更糟糕的事情了,只是发现它不起作用,因为您无法以有意义的方式衡量相似性。先在小样本上解决问题,然后再扩大规模。
| 归档时间: |
|
| 查看次数: |
1324 次 |
| 最近记录: |