如何利用Mahout和Hadoop处理大规模数据

如何利用Mahout和Hadoop处理大规模数据,第1张

利用Mahout和Hadoop处理大规模数据

规模问题在机器学习算法中有什么现实意义让我们考虑你可能需要部署Mahout来解决的几个问题的大小。

据粗略估计,Picasa三年前就拥有了5亿张照片。 这意味着每天有百万级的新照片需要处理。一张照片的分析本身不是一个大问题,即使重复几百万次也不算什么。但是在学习阶段可能需要同时获取数十亿张照片中的信息,而这种规模的计算是无法用单机实现的。

据报道,Google News每天都会处理大约350万篇新的新闻文章。虽然它的绝对词项数量看似不大,但试想一下,为了及时提供这些文章,它们连同其他近期的文章必须在几分钟的时间内完成聚类。

Netflix为Netflix Prize公布的评分数据子集中包含了1亿个评分。因为这仅仅是针对竞赛而公布的数据,据推测Netflix为形成推荐结果所需处理的数据总量与之相比还要大出许多倍。

机器学习技术必须部署在诸如此类的应用场景中,通常输入数据量都非常庞大,以至于无法在一台计算机上完全处理,即使这台计算机非常强大。如果没有 Mahout这类的实现手段,这将是一项无法完成的任务。这就是Mahout将可扩展性视为重中之重的道理,以及本书将焦点放在有效处理大数据集上的原因,这一点与其他书有所不同。

将复杂的机器学习技术应用于解决大规模的问题,目前仅为大型的高新技术公司所考虑。但是,今天的计算能力与以往相比,已廉价许多,且可以借助于 Apache Hadoop这种开源框架更轻松地获取。Mahout通过提供构筑在Hadoop平台上的、能够解决大规模问题的高质量的开源实现以期完成这块拼图,并可为所有技术团体所用。

Mahout中的有些部分利用了Hadoop,其中包含一个流行的MapReduce分布式计算框架。MapReduce被谷歌在公司内部得到广泛使用 ,而Hadoop是它的一个基于Java的开源实现。MapReduce是一个编程范式,初看起来奇怪,或者说简单得让人很难相信其强大性。 MapReduce范式适用于解决输入为一组"键 值对"的问题,map函数将这些键值对转换为另一组中间键值对,reduce函数按某种方式将每个中间键所对应的全部值进行合并,以产生输出。实际上,许多问题可以归结为MapReduce问题,或它们的级联。这个范式还相当易于并行化:所有处理都是独立的,因此可以分布到许多机器上。这里不再赘述 MapReduce,建议读者参考一些入门教程来了解它,如Hadoop所提供的

Hadoop实现了MapReduce范式,即便MapReduce听上去如此简单,这仍然称得上是一大进步。它负责管理输入数据、中间键值对以及输出数据的存储;这些数据可能会非常庞大,并且必须可被许多工作节点访问,而不仅仅存放在某个节点上。Hadoop还负责工作节点之间的数据分区和传输,以及各个机器的故障监测与恢复。理解其背后的工作原理,可以帮你准备好应对使用Hadoop可能会面对的复杂情况。Hadoop不仅仅是一个可在工程中添加的库。它有几个组件,每个都带有许多库,还有(几个)独立的服务进程,可在多台机器上运行。基于Hadoop的 *** 作过程并不简单,但是投资一个可扩展、分布式的实现,可以在以后获得回报:你的数据可能会很快增长到很大的规模,而这种可扩展的实现让你的应用不会落伍。

鉴于这种需要大量计算能力的复杂框架正变得越来越普遍,云计算提供商开始提供Hadoop相关的服务就不足为奇了。例如,亚马逊提供了一种管理Hadoop集群的服务 Elastic MapReduce,该服务提供了强大的计算能力,并使我们可通过一个友好的接口在Hadoop上 *** 作和监控大规模作业,而这原本是一个非常复杂的任务。

数据挖掘(DataMining)是指通过大量数据集进行分类的自动化过程,以通过数据分析来识别趋势和模式,建立关系来解决业务问题。换句话说,数据挖掘是从大量的、不完全的、有噪声的、模糊的、随机的数据中提取隐含在其中的、人们事先不知道的、但又是潜在有用的信息和知识的过程。

原则上讲,数据挖掘可以应用于任何类型的信息存储库及瞬态数据(如数据流),如数据库、数据仓库、数据集市、事务数据库、空间数据库(如地图等)、工程设计数据(如建筑设计等)、多媒体数据(文本、图像、视频、音频)、网络、数据流、时间序列数据库等。也正因如此,数据挖掘存在以下特点:

(1)数据集大且不完整

数据挖掘所需要的数据集是很大的,只有数据集越大,得到的规律才能越贴近于正确的实际的规律,结果也才越准确。除此以外,数据往往都是不完整的。

(2)不准确性

数据挖掘存在不准确性,主要是由噪声数据造成的。比如在商业中用户可能会提供假数据;在工厂环境中,正常的数据往往会收到电磁或者是辐射干扰,而出现超出正常值的情况。这些不正常的绝对不可能出现的数据,就叫做噪声,它们会导致数据挖掘存在不准确性。

(3)模糊的和随机的

数据挖掘是模糊的和随机的。这里的模糊可以和不准确性相关联。由于数据不准确导致只能在大体上对数据进行一个整体的观察,或者由于涉及到隐私信息无法获知到具体的一些内容,这个时候如果想要做相关的分析 *** 作,就只能在大体上做一些分析,无法精确进行判断。

而数据的随机性有两个解释,一个是获取的数据随机;我们无法得知用户填写的到底是什么内容。第二个是分析结果随机。数据交给机器进行判断和学习,那么一切的 *** 作都属于是灰箱 *** 作。

越来越多的企业开始使用Hadoop来对大数据进行处理分析,但Hadoop集群的整体性能却取决于CPU、内存、网络以及存储之间的性能平衡。而在这篇文章中,我们将探讨如何为Hadoop集群构建高性能网络,这是对大数据进行处理分析的关键所在。

关于Hadoop

“大数据”是松散的数据集合,海量数据的不断增长迫使企业需要通过一种新的方式去管理。大数据是结构化或非结构化的多种数据类型的大集合。而 Hadoop则是Apache发布的软件架构,用以分析PB级的非结构化数据,并将其转换成其他应用程序可管理处理的形式。Hadoop使得对大数据处理成为可能,并能够帮助企业可从客户数据之中发掘新的商机。如果能够进行实时处理或者接近实时处理,那么其将为许多行业的用户提供强大的优势。

Hadoop是基于谷歌的MapReduce和分布式文件系统原理而专门设计的,其可在通用的网络和服务器硬件上进行部署,并使之成为计算集群。

Hadoop模型

Hadoop的工作原理是将一个非常大的数据集切割成一个较小的单元,以能够被查询处理。同一个节点的计算资源用于并行查询处理。当任务处理结束后,其处理结果将被汇总并向用户报告,或者通过业务分析应用程序处理以进行进一步分析或仪表盘显示。

为了最大限度地减少处理时间,在此并行架构中,Hadoop“moves jobs to data”,而非像传统模式那样“moving data to jobs”。这就意味着,一旦数据存储在分布式系统之中,在实时搜索、查询或数据挖掘等 *** 作时,如访问本地数据,在数据处理过程中,各节点之间将只有一个本地查询结果,这样可降低运营开支。

Hadoop的最大特点在于其内置的并行处理和线性扩展能力,提供对大型数据集查询并生成结果。在结构上,Hadoop主要有两个部分:

Hadoop分布式文件系统(HDFS)将数据文件切割成数据块,并将其存储在多个节点之内,以提供容错性和高性能。除了大量的多个节点的聚合I/O,性能通常取决于数据块的大小——如128MB。而传统的Linux系统下的较为典型的数据块大小可能是4KB。

MapReduce引擎通过JobTracker节点接受来自客户端的分析工作,采用“分而治之”的方式来将一个较大的任务分解成多个较小的任务,然后分配给各个TaskTrack节点,并采用主站/从站的分布方式(具体如下图所示):

Hadoop系统有三个主要的功能节点:客户机、主机和从机。客户机将数据文件注入到系统之中,从系统中检索结果,以及通过系统的主机节点提交分析工作等。主机节点有两个基本作用:管理分布式文件系统中各节点以及从机节点的数据存储,以及管理Map/Reduce从机节点的任务跟踪分配和任务处理。数据存储和分析处理的实际性能取决于运行数据节点和任务跟踪器的从机节点性能,而这些从机节点则由各自的主机节点负责沟通和控制。从节点通常有多个数据块,并在作业期间被分配处理多个任务。

部署实施Hadoop

各个节点硬件的主要要求是市县计算、内存、网络以及存储等四个资源的平衡。目前常用的并被誉为“最佳”的解决方案是采用相对较低成本的旧有硬件,部署足够多的服务器以应对任何可能的故障,并部署一个完整机架的系统。

Hadoop模式要求服务器与SAN或者NAS进行直接连接存储(DAS)。采用DAS主要有三个原因,在标准化配置的集群中,节点的缩放数以千计,随着存储系统的成本、低延迟性以及存储容量需求不断提高,简单配置和部署个主要的考虑因素。随着极具成本效益的1TB磁盘的普及,可使大型集群的TB级数据存储在DAS之上。这解决了传统方法利用SAN进行部署极其昂贵的困境,如此多的存储将使得Hadoop和数据存储出现一个令人望而却步的起始成本。有相当大一部分用户的Hadoop部署构建都是采用大容量的DAS服务器,其中数据节点大约1-2TB,名称控制节点大约在1-5TB之间,具体如下图所示:

来源:Brad Hedlund, DELL公司

对于大多数的Hadoop部署来说,基础设施的其他影响因素可能还取决于配件,如服务器内置的千兆以太网卡或千兆以太网交换机。上一代的CPU和内存等硬件的选择,可根据符合成本模型的需求,采用匹配数据传输速率要求的千兆以太网接口来构建低成本的解决方案。采用万兆以太网来部署Hadoop也是相当不错的选择。

万兆以太网对Hadoop集群的作用

千兆以太网的性能是制约Hadoop系统整体性能的一个主要因素。使用较大的数据块大小,例如,如果一个节点发生故障(甚至更糟,整个机架宕机),那么整个集群就需要对TB级的数据进行恢复,这就有可能会超过千兆以太网所能提供的网络带宽,进而使得整个集群性能下降。在拥有成千上万个节点的大型集群中,当运行某些需要数据节点之间需要进行中间结果再分配的工作负载时,在系统正常运行过程中,某个千兆以太网设备可能会遭遇网络拥堵。

每一个Hadoop数据节点的目标都必须实现CPU、内存、存储和网络资源的平衡。如果四者之中的任意一个性能相对较差的话,那么系统的潜在处理能力都有可能遭遇瓶颈。添加更多的CPU和内存组建,将影响存储和网络的平衡,如何使Hadoop集群节点在处理数据时更有效率,减少结果,并在Hadoop集群内添加更多的HDFS存储节点。

幸运的是,影响CPU和内存发展的摩尔定律,同样也正影响着存储技术(TB级容量的磁盘)和以太网技术(从千兆向万兆甚至更高)的发展。预先升级系统组件(如多核处理器、每节点5-20TB容量的磁盘,64-128GB内存),万兆以太网卡和交换机等网络组件是重新平衡资源最合理的选择。万兆以太网将在Hadoop集群证明其价值,高水平的网络利用率将带来效益更高的带宽。下图展示了Hadoop集群与万兆以太网的连接:

许多企业级数据中心已经迁移到10GbE网络,以实现服务器整合和服务器虚拟化。随着越来越多企业开始部署Hadoop,他们发现他们完全不必要大批量部署1U的机架服务器,而是部署更少,但性能更高的服务器,以方便扩展每个数据节点所能运行的任务数量。很多企业选择部署2U或4U的服务器(如戴尔 PowerEdge C2100),每个节点大约12-16个核心以及24TB存储容量。在这种环境下的合理选择是充分利用已经部署的10GbE设备和Hadoop集群中的 10GbE网卡。

在日常的IT环境中构建一个简单的Hadoop集群。可以肯定的是,尽管有很多细节需要微调,但其基础是非常简单的。构建一个计算、存储和网络资源平衡的系统,对项目的成功至关重要。对于拥有密集节点的Hadoop集群而言,万兆以太网能够为计算和存储资源扩展提供与之相匹配的能力,且不会导致系统整体性能下降。

1、选择开始菜单中→程序→ManagementSQLServer2008→SQLServerManagementStudio命令,打开SQLServerManagementStudio窗口,并使用Windows或SQLServer身份验证建立连接。

2、在对象资源管理器窗口中展开服务器,然后选择数据库节点

3、右键单击数据库节点,从d出来的快捷菜单中选择新建数据库命令。

4、执行上述 *** 作后,会d出新建数据库对话框。在对话框、左侧有3个选项,分别是常规、选项和文件组。完成这三个选项中的设置会后,就完成了数据库的创建工作,5、在数据库名称文本框中输入要新建数据库的名称。例如,这里以“新建的数据库”。

6、在所有者文本框中输入新建数据库的所有者,如sa。根据数据库的使用情况,选择启用或者禁用使用全文索引复选框。

7、在数据库文件列表中包括两行,一行是数据库文件,而另一行是日记文件。通过单击下面的添加、删除按钮添加或删除数据库文件。

8、切换到选项页、在这里可以设置数据库的排序规则、恢复模式、兼容级别和其他属性。

9、切换到文件组页,在这里可以添加或删除文件组。

完成以上 *** 作后,单击确定按钮关闭新建数据库对话框。至此“新建的数据”数据库创建成功。新建的数据库可以再对象资源管理器窗口看到。

hadoop一般是应用于冷数据处理,对于实时数据,如果非要使用,可以变着方法使用。

方法一:在hadoop上使用hbase数据库,以为hbase是不走Map/Rece的,所以 *** 作在毫秒级。

方法二:将业务数据用程序分成实时数据和冷数据,实时数据存于关系数据库,冷数据存到hadoop。比如:将最近一个月的数据存到关系数据库,用做实时响应业务处理。将一个月以前的数据存到hadoop,用作历史数据查询以及统计分析,数据挖掘等。

Hadoop被设计用来在大型数据集上能进行有效的工作。Hadoop有一个专为大尺寸文件(如几G)设计的文件系统(HDFS)。因此,如果你的数据文件尺寸只是几M的话,建议你合并(通过zip或tar)多个文件到一个文件中,使其尺寸在几百M到几G范围内。HDFS把大文件们拆分存储到以64MB或128MB或更大的块单元中。

如果你的数据集相对较小,那它就不会是hadoop的巨型生态系统的最佳使用之地。这需要你去对你的数据比以往理解更多一些,分析需要什么类型的查询,看看你的数据是否真得“大”。另一方面,只是通过数据库的大小来测量数据可能是骗人的,因为你的计算量可能会更大。 有时你可能会做更多的数学计算或分析小数据集的排列,这些可以远远大于实际的数据。所以关键是要“了解你的数据,并且很清楚它”。你的数据仓库或是其它数据源中可能拥有数个TB的数据。然而,在建立 Hadoop 集群前,你必须考虑到数据的增长。

首先明确Hive和Hadoop两者的关系:

1、Hadoop是一种用于存储、读取以及处理海量数据的技术。你可以将他等价理解为个人PC的文件系统,只不过它能够承载远比一两块硬盘所能储存的多得多的数据;

2、Hive是一种构建在Hadoop之上的工具,它通过书写SQL语句的方式部分实现了Hadoop的功能,也就是说,所有Hive具备的能力,Hadoop都有,只不过Hive提供了一套描述工具,让你用可读性更强、更通用的方式描述你想解决的问题,然后由Hive将其转换成Hadoop的底层逻辑,最终解决问题。

所以,你问的问题也就不言自明了,当然可以直接基于Hadoop,使用Java、Python等语言直接编写MapReduce的处理过程;但是,常规的数据分析如果使用Hive,可能只需要若干Select查询语句即可完成,若编写代码完成,可能需要安装配置本地IDE、完成相关代码库的依赖、MapReduce完整逻辑的实现、任务的提交、计算结果的获取等等一系列庞杂的细节。两厢对比,我认为虽然理论上可以直接用Hadoop,但是在真实业务场景下,就是不能用的。

希望我说明白了~

以上就是关于如何利用Mahout和Hadoop处理大规模数据全部的内容,包括:如何利用Mahout和Hadoop处理大规模数据、hadoop开发和数据挖掘选哪个好_hadoop和数据库的区别、hadoop如何做到数据时等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9821769.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存