如何利用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上 *** 作和监控大规模作业,而这原本是一个非常复杂的任务。

Hadoop中有很多方法可以加入多个数据集。MapReduce提供了Map端和Reduce端的数据连接。这些连接是非平凡的连接,并且可能会是非常昂贵的 *** 作。Pig和Hive也具有同等的能力来申请连接到多个数据集。Pig提供了复制连接,合并连接和倾斜连接(skewed join),并且Hive提供了map端的连接和完整外部连接来分析数据。

一个重要的事实是,通过使用各种工具,比如MapReduce、Pig和Hive等,数据可以基于它们的内置功能和实际需求来使用它们。至于在Hadoop分析大量数据,Anoop指出,通常,在大数据/Hadoop的世界,一些问题可能并不复杂,并且解决方案也是直截了当的,但面临的挑战是数据量。在这种情况下需要不同的解决办法来解决问题。

一些分析任务是从日志文件中统计明确的ID的数目、在特定的日期范围内改造存储的数据、以及网友排名等。所有这些任务都可以通过Hadoop中的多种工具和技术如MapReduce、Hive、Pig、Giraph和Mahout等来解决。这些工具在自定义例程的帮助下可以灵活地扩展它们的能力。

Hadoop是使用Java编写,允许分布在集群,使用简单的编程模型的计算机大型数据集处理的Apache的开源框架。 Hadoop框架应用工程提供跨计算机集群的分布式存储和计算的环境。 Hadoop是专为从单一服务器到上千台机器扩展,每个机器都可以提供本地计算和存储。

Hadoop适用于海量数据、离线数据和负责数据,应用场景如下:

场景1:数据分析

场景2:离线计算,(异构计算+分布式计算)天文计算

场景3:海量数据存储

什么是大数据:

(1)大数据是指在一定时间内无法用常规软件对其内容进行抓取,管理和处理的数据集合,简而言之就是数据量非常大,大到无法用常规工具进行处理,如关系型数据库,数据仓库等。这里“大”是一个什么量级呢?如在阿里巴巴每天处理数据达到20PB(即20971520GB)

2大数据的特点:

(1)体量巨大。按目前的发展趋势来看,大数据的体量已经到达PB级甚至EB级。

(2)大数据的数据类型多样,以非结构化数据为主,如网络杂志,音频,视屏,,地理位置信息,交易数据,社交数据等。

(3)价值密度低。有价值的数据仅占到总数据的一小部分。比如一段视屏中,仅有几秒的信息是有价值的。

(4)产生和要求处理速度快。这是大数据区与传统数据挖掘最显著的特征。

3除此之外还有其他处理系统可以处理大数据。

Hadoop (开源)

Spark(开源)

Storm(开源)

MongoDB(开源)

IBM PureDate(商用)

Oracle Exadata(商用)

SAP Hana(商用)

Teradata AsterData(商用)

EMC GreenPlum(商用)

HP Vertica(商用)

注:这里我们只介绍Hadoop。

二:Hadoop体系结构

Hadoop来源:

Hadoop源于Google在2003到2004年公布的关于GFS(Google File System),MapReduce和BigTable的三篇论文,创始人Doug Cutting。Hadoop现在是Apache基金会顶级项目,“

Hadoop”一个虚构的名字。由Doug Cutting的孩子为其**玩具大象所命名。

Hadoop的核心:

(1)HDFS和MapReduce是Hadoop的两大核心。通过HDFS来实现对分布式储存的底层支持,达到高速并行读写与大容量的储存扩展。

(2)通过MapReduce实现对分布式任务进行处理程序支持,保证高速分区处理数据。

3Hadoop子项目:

(1)HDFS:分布式文件系统,整个Hadoop体系的基石。

(2)MapReduce/YARN:并行编程模型。YARN是第二代的MapReduce框架,从Hadoop 02301版本后,MapReduce被重构,通常也称为MapReduce V2,老MapReduce也称为 MapReduce V1。

(3)Hive:建立在Hadoop上的数据仓库,提供类似SQL语音的查询方式,查询Hadoop中的数据,

(5)HBase:全称Hadoop Database,Hadoop的分布式的,面向列的数据库,来源于Google的关于BigTable的论文,主要用于随机访问,实时读写的大数据。

(6)ZooKeeper:是一个为分布式应用所设计的协调服务,主要为用户提供同步,配置管理,分组和命名等服务,减轻分布式应用程序所承担的协调任务。

还有其它特别多其它项目这里不做一一解释了。

三:安装Hadoop运行环境

用户创建:

(1)创建Hadoop用户组,输入命令

groupadd hadoop

(2)创建hduser用户,输入命令:

useradd –p hadoop hduser

(3)设置hduser的密码,输入命令:

passwd hduser

按提示输入两次密码

(4)为hduser用户添加权限,输入命令:

#修改权限

chmod 777 /etc/sudoers

#编辑sudoers

Gedit /etc/sudoers

#还原默认权限

chmod 440 /etc/sudoers

先修改sudoers 文件权限,并在文本编辑窗口中查找到行“root ALL=(ALL)”,紧跟后面更新加行“hduser ALL=(ALL) ALL”,将hduser添加到sudoers。添加完成后切记还原默认权限,否则系统将不允许使用sudo命令。

(5)设置好后重启虚拟机,输入命令:

Sudo reboot

重启后切换到hduser用户登录

安装JDK

(1)下载jdk-7u67-linux-x64rpm,并进入下载目录。

(2)运行安装命令:

Sudo rpm –ivh jdk-7u67-linux-x64rpm

完成后查看安装路径,输入命令:

Rpm –qa jdk –l

记住该路径,

(3)配置环境变量,输入命令:

Sudo gedit /etc/profile

打开profile文件在文件最下面加入如下内容

export JAVA_HOME=/usr/java/jdk7067

export CLASSPATH=$ JAVA_HOME/lib:$ CLASSPATH

export PATH=$ JAVA_HOME/bin:$PATH

保存后关闭文件,然后输入命令使环境变量生效:

Source /etc/profile

(4)验证JDK,输入命令:

Java –version

若出现正确的版本则安装成功。

配置本机SSH免密码登录:

(1)使用ssh-keygen 生成私钥与公钥文件,输入命令:

ssh-keygen –t rsa

(2)私钥留在本机,公钥发给其它主机(现在是localhost)。输入命令:

ssh-copy-id localhost

(3)使用公钥来登录输入命令:

ssh localhost

配置其它主机SSH免密登录

(1)克隆两次。在VMware左侧栏中选中虚拟机右击,在d出的快捷键菜单中选中管理---克隆命令。在克隆类型时选中“创建完整克隆”,单击“下一步”,按钮直到完成。

(2)分别启动并进入三台虚拟机,使用ifconfig查询个主机IP地址。

(3)修改每台主机的hostname及hosts文件。

步骤1:修改hostname,分别在各主机中输入命令。

Sudo gedit /etc/sysconfig/network

步骤2:修改hosts文件:

sudo gedit /etc/hosts

步骤3:修改三台虚拟机的IP

第一台对应node1虚拟机的IP:1921681130

第二台对应node2虚拟机的IP:1921681131

第三台对应node3虚拟机的IP:1921681132

(4)由于已经在node1上生成过密钥对,所有现在只要在node1上输入命令:

ssh-copy-id node2

ssh-copy-id node3

这样就可以将node1的公钥发布到node2,node3。

(5)测试SSH,在node1上输入命令:

ssh node2

#退出登录

exit

ssh node3

exit

四:Hadoop完全分布式安装

1 Hadoop有三种运行方式:

(1)单机模式:无须配置,Hadoop被视为一个非分布式模式运行的独立Java进程

(2)伪分布式:只有一个节点的集群,这个节点即是Master(主节点,主服务器)也是Slave(从节点,从服务器),可在此单节点上以不同的java进程模拟分布式中的各类节点

(3)完全分布式:对于Hadoop,不同的系统会有不同的节点划分方式。

2安装Hadoop

(1)获取Hadoop压缩包hadoop-260targz,下载后可以使用VMWare Tools通过共享文件夹,或者使用Xftp工具传到node1。进入node1 将压缩包解压到/home/hduser目录下,输入命令:#进入HOME目录即:“/home/hduser”

cd ~

tar –zxvf hadoop-260targz

(2)重命名hadoop输入命令:

mv hadoop-260 hadoop

(3)配置Hadoop环境变量,输入命令:

Sudo gedit /etc/profile

将以下脚本加到profile内:

#hadoop

export HADOOP_HOME=/home/hduser/hadoop

export PATH=$HADOOP_HOME/bin:$PATH

保存关闭,最后输入命令使配置生效

source /etc/profile

注:node2,和node3都要按照以上配置进行配置。

3配置Hadoop

(1)hadoop-envsh文件用于指定JDK路径。输入命令:

[hduser@node1 ~]$ cd ~/hadoop/etc/hadoop

[hduser@node1 hadoop]$ gedit hadoop-envsh

然后增加如下内容指定jDK路径。

export JAVA_HOME=/usr/java/jdk170_67

(2)打开指定JDK路径,输入命令:

export JAVA_HOME=/usr/java/jdk170_67

(4)core-sitexml:该文件是Hadoop全局配置,打开并在元素中增加配置属性如下:

fsdefaultFshdfs://node1:9000hadooptmpdirfile:/home/hduser/hadoop/tmp这里给出了两个常用的配置属性,fsdefaultFS表示客户端连接HDFS时,默认路径前缀,9000是HDFS工作的端口。Hadooptmpdir如不指定会保存到系统的默认临时文件目录/tmp中。(5)hdfs-sitexml:该文件是hdfs的配置。打开并在元素中增加配置属性。(6)mapred-sitexml:该文件是MapReduce的配置,可从模板文件mapred-sitexmltemplate中复制打开并在元素中增加配置。(7)yarn-sitexml:如果在mapred-sitexml配置了使用YARN框架,那么YARN框架就使用此文件中的配置,打开并在元素中增加配置属性。(8)复制这七个命令到node2,node3。输入命令如下:scp –r /home/hduser/hadoop/etc/hadoop/ hduser@node2:/home/hduser/hadoop/etc/scp –r /home/hduser/hadoop/etc/hadoop/ hduser@node3:/home/hduser/hadoop/etc/4验证:下面验证hadoop是否正确(1)在Master主机(node1)上格式化NameNode。输入命令:[hduser@node1 ~]$ cd ~/hadoop[hduser@node1 hadoop]$ bin/hdfs namenode –format(2)关闭node1,node2 ,node3,系统防火墙并重启虚拟机。输入命令:service iptables stopsudo chkconfig iptables offreboot(3)输入以下启动HDFS:[hduser@node1 ~]$ cd ~/hadoop(4)启动所有[hduser@node1 hadoop]$ sbin/start-allsh(5)查看集群状态:[hduser@node1 hadoop]$ bin/hdfs dfsadmin –report(6)在浏览器中查看hdfs运行状态,网址:(7)停止Hadoop。输入命令:[hduser@node1 hadoop]$ sbin/stop-allsh五:Hadoop相关的shell *** 作(1)在 *** 作系统中/home/hduser/file目录下创建file1txt,file2txt可使用图形界面创建。file1txt输入内容:Hello World hi HADOOPfile2txt输入内容Hello World hi CHIAN(2)启动hdfs后创建目录/input2[hduser@node1 hadoop]$ bin/hadoop fs –mkdir /input2(3)将file1txtfile2txt保存到hdfs中:[hduser@node1 hadoop]$ bin/hadoop fs –put -/file/filetxt /input2/(4)[hduser@node1 hadoop]$ bin/hadoop fs –ls /input2

你知道大数据Hadoop版本介绍,10版本和20对比有哪些缺点?

Hadoop发行版本分为开源社区版和商业版,社区版是指由Apache软件基金会维护的版本,是官方维护的版本体系。商业版Hadoop是指由第三方商业公司在社区版Hadoop基础上进行了一些修改、整合以及各个服务组件兼容性测试而发行的版本,例如比较著名的有Cloudera公司的CDH版本。

为了方便学习,本书采用开源社区版,而Hadoop自诞生以来,主要分为Hadoop1、Hadoop2、Hadoop3三个系列的多个版本。由于目前市场上最主流的是Hadoop2x版本,因此,本书只针对Hadoop2x版本进行相关介绍。

Hadoop2x版本指的是第2代Hadoop,它是从Hadoop1x发展而来的,并且相对于Hadoop1x来说,有很多改进。下面我们从Hadoop1x到Hadoop2x发展的角度,对两版本进行讲解,如图1所示。

通过图1可以看出,Hadoop10内核主要由分布式存储系统HDFS和分布式计算框架MapReduce两个系统组成,而Hadoop2x版本主要新增了资源管理框架Yarn以及其他工作机制的改变。

在Hadoop1x版本中,HDFS与MapReduce结构如图2和3所示。

从图3可以看出MapReduce由一个JobTracker和多个TaskTracker组成,其中,MapReduce的主节点JobTracker只有一个,从节点TaskTracker有很多个,JobTracker与TaskTracker在MapReduce中的角色就像是项目经理与开发人员的关系,而JobTracker负责接收用户提交的计算任务、将计算任务分配给TaskTracker执行、跟踪,JobTracker同时监控TaskTracker的任务执行状况等。当然,TaskTracker只负责执行JobTracker分配的计算任务,正是由于这种机制,Hadoop1x架构中的HDFS和MapReduce存在以下缺陷:

(1)HDFS中的NameNode、SecondaryNode单点故障,风险是比较大的。其次,NameNode内存受限不好扩展,因为Hadoop1x版本中的HDFS只有一个NameNode,并且要管理所有的DataNode。

(2)MapReduce中的JobTracker职责过多,访问压力太大,会影响系统稳定。除此之外,MapReduce难以支持除自身以外的框架,扩展性较低的不足。

Hadoop2x版本为克服Hadoop1x中的不足,对其架构进行了以下改进:

(1)Hadoop2x可以同时启动多个NameNode,其中一个处于工作(Active)状态,另一个处于随时待命(Standby)状态,这种机制被称为Hadoop HA(Hadoop高可用),这样当一个NameNode所在的服务器宕机时,可以在数据不丢失的情况下,自动切换到另一个NameNode持续提供服务。

(2)Hadoop2x将JobTracker中的资源管理和作业控制分开,分别由ResourceManager(负责所有应用程序的资源分配)和ApplicationMaster(负责管理一个应用程序)实现,即引入了资源管理框架Yarn,它是一个通用的资源管理框架,可以为各类应用程序进行资源管理和调度,不仅限于MapReduce一种框架,也可以为其他框架使用,如Tez、Spark、Storm,这种设计不仅能够增强不同计算模型和各种应用之间的交互,使集群资源得到高效利用,而且能更好地与企业中已经存在的计算结构集成在一起。

(3)Hadoop2x中的MapReduce是运行在Yarn上的离线处理框架,它的运行环境不再由JobTracker和TaskTracker等服务组成,而是变成通用资源管理Yarn和作业控制进程ApplicationMaster,从而使MapReduce在速度上和可用性上都有很大的提高。

想学习大数据的小伙伴可以学习这套教程哦!

大数据教程Hadoop

以上就是关于如何利用Mahout和Hadoop处理大规模数据全部的内容,包括:如何利用Mahout和Hadoop处理大规模数据、大数据的Hadoop是做什么的、Hadoop如何应用在大数据业务系统中等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

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

原文地址:https://54852.com/web/9432402.html

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

发表评论

登录后才能评论

评论列表(0条)

    保存