英语原文共 415 页,剩余内容已隐藏,支付完成后下载完整资料
- 以聚类生产
本章涵盖了
Hadoop集群运行一个聚类的工作
优化集群的工作性能
批集群和网络聚类
您已经看到了不同的聚类算法在Mahout组文件路透新闻数据集。在这个过程中,您了解了向量表示的数据,距离措施,以及其他提高质量的方法集群。Mahout的优势之一是它的扩展能力。路透数据集不是的挑战,所以在这一章里,我们为Mahout设定一个更大的挑战:集群世界上最大的免费数据集:维基百科免费的百科全书。Mahout可以处理这样的尺度,因为算法实现MapReduce工作可以执行数百和数千的Hadoop集群的computers.1.
不幸的是,并不是每个人都能进入这样一个集群。出于演示目的在这一章中,我们使用文档从维基百科和提取的一个子集小型集群实验展示如何通过添加更多更大的速度电脑。我们首在单机上运行集群Hadoop设置,知道作为一个伪分布设置在第六章(您之前看到的)。我们也看一下Mahout的启动程序,可以很容易地启动集群本地或在任何工作Hadoop集群通过提供配置文件。然后我们将讨论如何聚类工作也能调优性能。最后,我们将讨论如何使用现有的Mahout聚类算法和设计一个系统,可以在一个在线增量集群时尚。
11.1快速启动指南为运行Hadoop集群
首先让我们看看Hadoop的体系结构的一个方面。Hadoop集群由一个单独的服务器称为NameNode处理不同的计算机集群中,这被称为datanode。NameNode也同步Hadoop分布式文件系统(HDFS)。另一个服务器被称为JobTracker管理所有的MapReduce工作和管理计算机(节点)Mapper和减速机类在集群上执行。每一个节点上,另一个过程被称为TaskTracker管理映射器或减速机执行JobTracker请求。Hadoop无缝这一切,没有任何用户干预。在单节点集群,NameNode,JobTracker DataNode,TaskTracker都运行在相同的系统作为单独的进程彼此交谈。Hadoop的版本Mahout旨在处理目前是0.21(尽管它应该是兼容其他最新版本)。
11.1.1运行集群在本地的Hadoop集群
你会发现一个简短的教程在伪分布建立一个当地的Hadoop集群模式在这个web页面:http://hadoop.apache.org/common/docs/r0.20.2/quickstart.html。您将需要设置本地集群为本章的例子。Hadoop二进制驻留在bin / Hadoop主目录的文件夹。来视图的内容HDFS,执行这个命令:bin / hadoop dfs - ls /这将列出所有文件的根文件系统。集群首次启动时,您的主目录可能不存在在HDFS,所以您应该创建一个/ user / lt;您的UNIX用户名称gt;文件夹:bin / hadoop dfs mkdir / user / lt;您的UNIX用户名gt;主目录也可以列出如下:bin / hadoop dfs - ls
开始集群准分布式集群的路透数据准备路透SequenceFile本地包含文本数据,在第8章,并将其复制到HDFS:bin / hadoop dfs——lt;路径gt; / reuters-seqfiles reuters-seqfiles使用此SequenceFile作为输入,您将运行词典vectorizer集群,然后运行k - means聚类。任何Hadoop MapReduce工作使用Hadoop的jar命令执行。Mahout将所有示例类文件和依赖关系在一个单独的JAR文件/例子目标/ mahout - - 0.4 snapshot.job例子。的字典vectorizer运行当地的Hadoop集群使用路透SequenceFiles作为输入,简单地执行Hadoop jar命令Mahout工作文件如下:bin / hadoop jar mahout例子- 0.5工作。jar
org.apache.mahout.vectorizer。SparseVectorsFromSequenceFiles hellip;噢我reuters-seqfiles - o reuters-vectors就是这样。集群上执行当地的Hadoop集群。如果默认Hadoop配置使用,如果系统至少有两个处理器核心,两个映射器将并行执行,每个运行在一个核心。这可以被跟踪JobTracker仪表板在http://localhost:50030,如图11.1所示。
11.1.2定制Hadoop配置
如果你有两个核心,Hadoop,开箱即用的,执行集群的两倍调用本地运行,我们早在8 - 10章。如果超过两个核心是可用的在电脑上,Hadoop可以修改配置文件来设置号码mapper和减速器任务到一个更高的价值,增加的整体速度计算。mapred.map。任务和mapred.reduce。任务配置属性在Hadoop的mapred-site安装。需要配置的xml文件合适的CPU核的数量值。
每个额外的核心,并行性的增加和处理时间减少。一旦并行任务的数量达到峰值为单个节点,增加了数量任务的性能严重降低。规模的唯一方法是有多个相同的节点配置:一个完全分布式的Hadoop集群。
提示你会发现建立一个教程,一步一步的指示在Hadoop分布式Hadoop集群网站:http://hadoop.apache.org/common/docs/r0.20.2/cluster_setup.html。在Hadoop的0.20.2后来版本,配置是跨越三个配置文件夹中文件:核心位点。xml,hdfs-site。xml和mapredsite。xml。默认配置core-default.xml中设置值,hdfs-default。xml和mapred-default.xml。一个参数中给出*网站可以覆盖默认的文件。xml文件。调优地图-通常涉及编辑mapred-site.xml减少参数。
执行聚类代码在一个分布式的Hadoop集群与执行在单节点集群。bin / hadoop脚本可以在集群启动工作从NameNode,从节点,或任何计算机访问NameNode。唯一的要求是,脚本,运行时,需要访问正确的配置文件通过HADOOP_CONF_DIR集群的环境变量。
执行工作HADOOP集群使用MAHOUT发射器
Mahout还提供了一个bin / Mahout脚本(就像Hadoop发射器脚本)启动集群工作。我们使用它在前几章广泛开展集群作为一个单个进程的工作。通过设置HADOOP_HOME和HADOOP_CONF_DIR环境变量,可以使用相同的脚本启动任何Mahout的算法Hadoop集群。脚本将自动读取Hadoop集群配置文件和启动Mahout工作在集群上。典型的输出将是这样的:
export HADOOP_HOME=~/hadoop/
export HADOOP_CONF_DIR=$HADOOP_HOME/conf
bin/mahout kmeans –h
running on hadoop, using HADOOP_HOME=/Users/username/hadoop and
HADOOP_CONF_DIR=/Users/username/hadoop/conf
Mahout发射器内部脚本调用脚本使用正确的Hadoop发射器集群的配置文件,概述了如图11.2所示。Mahout的发射器本地脚本启动任何算法的最简单方法或分布式Hadoop集群。恭喜,您已经成功地运行一个Hadoop集群工作设置。如果你感兴趣,你可以花些时间尝试各种参数优化聚类质量。接下来,我们将看看如何优化设置和实现更高的吞吐量和性能集群。
11.2优化集群性能
聚类算法在Mahout旨在并行地运行。虽然算法不同,他们类似的在一个方面:所有SequenceFile的阅读在每个映射器并行向量。许多聚类算法的cpu密集型操作。这意味着,对于许多操作,矢量序列化和反序列化,距离计算,等等,保持CPU在充分使用。另一方面,一些I / O操作绑定,比如通过网络传输每个减速器的重心。来提高集群性能,您需要理解技巧来处理这些类型的性能瓶颈。你看看各种参数在Mahout创建CPU、磁盘或网络瓶颈基于输入数据的类型。供参考,k - means聚类算法如图11.3所示。其他像模糊k - means聚类算法、狄利克雷和LDA都有一个架构类似于k - means,k - means的优化将适用于所有的人。
集群性能是一个函数的输入数据。优化性能,你需要分析各种分布的输入和确定性能缺陷您可能会遇到在使用某些聚类参数。让我们首先看看如何减少CPU瓶颈,在某些情况下完全可以避免的。
11.2.1避免陷阱在中央处理器受限操作性能
CPU性能下降时频繁使用的功能开始变得缓慢。在集群中,CPU绑定的距离计算,使得计算速度更快使整个工作得更快。以下事情需要牢记当解决在集群cpu相关的性能问题。
使用一个适当的向量表示
DenseVector通常是最快的向量在Mahout中的三个。任何元素可以快速访问,它可以有效地迭代序列。但使用DenseVector稀疏向量可以导致重大的性能问题。当用于表示一个向量有很多零元素,DenseVector会浪费存储大量的元素,否则没有表示的稀疏表示。这意味着更多的数据被不必要的序列化,许多零元素迭代在操作,希望忽略零元素。
例如,假设你集群非常稀疏的数据(非零元素的个数大约1%的基数)像文本文档向量。集群使用SparseVector大约是两倍DenseVector在本地系统上,快10倍左右,在分布式系统上。在分布式的额外性能聚类是由于延迟转移造成的不必要的0字节DenseVector网络。
使用快速测量的距离
通常距离聚类算法计算,所以使用一个快速的距离度量实现是至关重要的。改进的距离测量的速度直走的底线算法的整体性能。
如果你实现自己的距离测量,遵循这些最佳实践:
避免克隆或实例化一个新的向量。向量是沉重的Java对象克隆他们会严重降低性能。
避免迭代所有元素如果距离测量只需要非零元素。使用Vector.iterateNonZero()迭代器而不是向量.iterator()。
使用Vector.assign()或Vector.aggregate()方法来有效地遍历和修改向量。你可以了解更多关于他们在附录B中。
使用SPARSEVECTOR类型基于距离度量的计算
有两个稀疏向量实现,是值得使用的实现适当的距离度量计算。RandomAccessSparseVector是针对随机查找,SequentialAccessSparseVector调快顺序存取。
例如,计算一个余弦距离测量需要许多向量点积操作,这就需要按顺序遍历两个向量,元素的元素。代码需要乘值匹配指数两向量。自然地,SequentialAccessSparseVector这种顺序存取模式是最优的距离测量,它比RandomAccessSparseVector快得多。保持所有文档向量顺序格式提供了一个巨大的推动distancemeasure的速度计算,从而提高了聚类的整体性能。
提示Mahout跑龙套包——有一个实用程序类称为向量基准。这坑跨组合不同类型的向量操作并比较密集,随机存取顺序存取向量他们的速度。如果您的自定义距离测量更多的特定类型向量的操作,您可以使用这个工具来找到向量执行操作最好在一定的稀疏的水平。中发现的工具org.apache.mahout mahout-utils模块。基准方案。
11.2.2避免在I / o密集型操作的性能缺陷
I / O性能影响最通常是通过程序读取的数据量和写。在Hadoop中工作,这些读写大多是连续的。减少写的字节数提高集群的整体性能很大。以下事情需要牢记减少I / O瓶颈。
使用一个适当的向量表示
这是相当明显的。如前所述,您不应该存储稀疏向量为为集群应用程序I / O瓶颈。
使用HDFS复制
任何文件存储在HDFS是默认复制三次不同的节点集群。这样做是为了防止数据丢失,如果在一个节点一个副本丢失,和它也会增加性能。如果数据存在于只有一个节点,所有映射器异径接头需要这些数据必须访问一个节点。这可能是一个瓶颈。复制允许HDFS存储块在不同的服务器上,让Hadoop选择节点的计算可以被初始化,从而减少网络I / O瓶颈。复制可以增加可能进一步减少这个瓶颈,但这将意味着HDFS上使用更多的存储空间。认为这只有有证据表明,under-replication是创建一个瓶颈。
减少数量的集群
集群通常表示为大,密集的向量,其中每个消耗相当大存储。如果集群的工作是试图找到大量的集群(k),通过网络发送这些向量映射器的还原剂。有一个小的k值会降低这个网络I / O。它还降低了开销的距离度量计算k - means和模糊k - means,每个集群重心增加了存储在距离度量计算的点磁盘。
必要的时候要将数据集群到大量的集群,你可以把它在Hadoop,添加更多的电脑,并让它规模。但是你可以潇洒地距离度量
剩余内容已隐藏,支付完成后下载完整资料
资料编号:[154084],资料为PDF文档或Word文档,PDF文档可免费转换为Word
以上是毕业论文外文翻译,课题毕业论文、任务书、文献综述、开题报告、程序设计、图纸设计等资料可联系客服协助查找。