Hadoop进行分布式数据处理第2部分进_第1页
Hadoop进行分布式数据处理第2部分进_第2页
Hadoop进行分布式数据处理第2部分进_第3页
Hadoop进行分布式数据处理第2部分进_第4页
Hadoop进行分布式数据处理第2部分进_第5页
已阅读5页,还剩8页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、Hadoop 进行分布式数据处理,第 2 部分 进Hadoop分布式计算架构的真正实力在于其分布性。换句话说,向工作并行分布多个节点的能力使Hadoop能够应用于大型基础设施以及大量数据的处理。本文首先对一个分布式Hadoop架构进行分解,然后探讨分布式配置和使用。分布式Hadoop架构根据用Hadoop进行分布式数据处理,第1部分:入门,所有Hadoop守护进程都在同一个主机上运行。尽管不运用Hadoop的并行性,这个伪分布式配置提供一种简单的方式来以最少的设置测试Hadoop的功能。现在,让我们使用机器集群探讨一下Hadoop的并行性。根据第1部分,Hadoop配置定义了让所有Hadoop

2、守护进程在一个节点上运行。因此,让我们首先看一下如何自然分布Hadoop来执行并行操作。在一个分布式Hadoop设置中,您有一个主节点和一些从节点(见图1)。图1.Hadoop主从节点分解如图1所示,主节点包括名称节点、从属名称节点和jobtracker守护进程(即所谓的主守护进程)。此外,这是您为本演示管理集群所用的节点(使用Hadoop实用程序和浏览器)。从节点包括tasktracker和数据节点(从属守护进程)。两种设置的不同之处在于,主节点包括提供Hadoop集群管理和协调的守护进程,而从节点包括实现Hadoop文件系统(HDFS)存储功能和MapReduce功能(数据处理功能)的守护

3、进程。对于该演示,在一个LAN上创建一个主节点和两个从节点。设置如图2所示。现在,我们来探讨用于多节点分布的Hadoop的安装和配置。图2.Hadoop集群配置为简化部署,要运用虚拟化技术,该技术有几个好处。尽管在该设置中使用虚拟化技术看不出性能优势,但是它可以创建一个Hadoop安装,然后为其他节点克隆该安装。为此,您的Hadoop集群应显示如下:在一个主机上的虚拟机监控程序上下文中将主从节点作为虚拟机(VM)运行(见图3)。图3.虚拟环境中的Hadoop集群配置回页首升级Hadoop在用Hadoop进行分布式数据处理,第1部分:入门中,我们安装了在一个节点上运行的Hadoop的一个特殊分布

4、(伪配置)。在本文中,我们要更新分布式配置。如果您没有看过本系列的第1部分,那么请阅读第1部分,了解如何首先安装Hadoop伪配置。在伪配置中,您没有进行任何配置,因为单个节点已经过预先配置。现在,您需要更新配置。首先,使用update-alternatives命令检查当前配置,如清单1所示。该命令告诉您,配置在使用conf.pseudo(最高优先级)。清单1.检查当前Hadoop配置$update-alternatives-display hadoop-0.20-conf hadoop-0.20-conf-status is auto.link currently points to/etc

5、/hadoop-0.20/conf.pseudo/etc/hadoop-0.20/conf.empty-priority 10/etc/hadoop-0.20/conf.pseudo-priority 30 Currentbestversion is/etc/hadoop-0.20/conf.pseudo.$下一步,通过复制现有配置(本例中为conf.empty,如清单1所示)创建一个新配置:$sudo cp-r/etc/hadoop-0.20/conf.empty/etc/hadoop-0.20/conf.dist$最后,激活并检查新配置:清单2.激活并检查Hadoop配置$sudo upd

6、ate-alternatives-install/etc/hadoop-0.20/conf hadoop-0.20-conf/etc/hadoop-0.20/conf.dist 40$update-alternatives-display hadoop-0.20-conf hadoop-0.20-conf-status is auto.link currently points to/etc/hadoop-0.20/conf.dist/etc/hadoop-0.20/conf.empty-priority 10/etc/hadoop-0.20/conf.pseudo-priority 30/e

7、tc/hadoop-0.20/conf.dist-priority 40 Currentbestversion is/etc/hadoop-0.20/conf.dist.$现在,您有一个名为conf.dist的新配置,您要将其用于您的新分布式配置。此时该节点运行于一个虚拟环境中,将该节点克隆到另外两个要充当数据节点的节点中。回页首配置Hadoop以实现分布式操作下一步是要使所有节点互联互通。这可以/etc/hadoop-0.20/conf.dist/中的两个名为masters和slaves的文件中实现。本例中的三个节点的IP地址是静态分配的,如清单3所示(来自/etc/hosts):清单3.该

8、设置的Hadoop节点(/etc/hosts)master 33 slave1 34 slave2 35因此,在主节点上,更新/etc/hadoop-0.20/conf.dist/masters来确定主节点,如下所示:master然后在/etc/hadoop-0.20/conf.dist/slaves中确定从节点,其中包括以下两行:slave1 slave2接下来,从每个节点上,将Secure Shell(ssh)连接到所有其他节点,确保pass-phraseless ssh在运行。所有这些文件(masters,sl

9、aves)都由本系列第1部分中使用过的Hadoop启动和停止工具使用。下一步,在/etc/hadoop-0.20/conf.dist子目录中继续进行Hadoop配置。以下变更需要应用于所有节点(主节点和从节点),如同Hadoop文档中所定义的。首先,在core-site.xml文件(清单4)中确定HDFS主节点,它定义名称节点的主机和端口(注意主节点的IP地址的使用)。core-site.xml文件定义Hadoop的核心属性。清单4.在core-site.xml中定义HDFS主节点configuration property name name value hd

10、fs:/master:54310 value description The name and URI of the default FS./description property configuration下一步,确认MapReduce jobtracker。jobtracker位于其自己的节点上,但对于本配置,将其放在主节点上,如清单5所示。mapred-site.xml文件包含MapReduce属性。清单5.在mapred-site.xml中定义MapReduce jobtracker configuration property name mapred.job.tracker nam

11、e value master:54311 value description Map Reduce jobtracker description property configuration最后,定义默认复制因子(清单6)。该值定义将创建的副本数,一般小于3。在本例中,将其定义为2(数据节点的数量)。该值在包含HDFS属性的hdfs-site.xml中定义。清单6.在hdfs-site.xml中定义默认数据副本configuration property name dfs.replication name value 2value description Default block repli

12、cation description property configuration配置项如清单4所示,分布式设置所需的元素见清单5和清单6。Hadoop在这里提供大量配置选项,支持您按需定制整个环境。参考资料部分含有关于这些选项的更多信息。完成配置之后,下一步是要格式化名称节点(HDFS主节点)。对于该操作,使用hadoop-0.20实用程序指定名称节点和操作(-format):清单7.格式化名称节点usermaster:#sudo su-rootmaster:#hadoop-0.20 namenode-format 10/05/11 18:39:58 INFO namenode.NameNo

13、de:STARTUP_MSG:/*STARTUP_MSG:Starting NameNode STARTUP_MSG:host=master/ STARTUP_MSG:args=-formatSTARTUP_MSG:version=0.20.2+228 STARTUP_MSG:build=-r cfc3233ece0769b11af9add 328261295aaf4d1ad;*/10/05/11 18:39:59 INFO namenode.FSNamesystem:fsOwner=root,root 10/05/11 18:39:59 INFO namenode.FSNa

14、mesystem:supergroup=supergroup 10/05/11 18:39:59 INFO namenode.FSNamesystem:isPermissionEnabled=true 10/05/11 18:39:59 INFO common.Storage:Image size 94 saved in 0seconds.10/05/11 18:39:59 INFO common.Storage:Storage directory/tmp/hadoop-root/dfs/name has been successfully formatted.10/05/11 18:39:5

15、9 INFO namenode.NameNode:SHUTDOWN_MSG:/*SHUTDOWN_MSG:Shutting down NameNode at master/*/rootmaster:#格式化名称节点之后,就可以启动Hadoop守护进程了。可以对第1部分中的伪分布式配置执行同样的操作,但进程为分布式配置完成同样的工作。注意,这里的代码启动名称节点和从属名称节点(正如jps命令所指示):清单8.启动名称节点rootmaster:#/usr/lib/hadoop-0.20/bin/start-dfs.sh starting namenode,logging to/u

16、sr/lib/hadoop-0.20/bin/./logs/hadoop-root-namenode-mtj-desktop.out 35:starting datanode,logging to/usr/lib/hadoop-0.20/bin/./logs/hadoop-root-datanode-mtj-desktop.out 34:starting datanode,logging to/usr/lib/hadoop-0.20/bin/./logs/hadoop-root-datanode-mtj-desktop.out 192.168

17、.108.133:starting secondarynamenode,logging to/usr/lib/hadoop-0.20/logs/hadoop-root-secondarynamenode-mtj-desktop.out rootmaster:#jps 7367 NameNode 7618 Jps 7522 SecondaryNameNode rootmaster:#现在,如果使用jps节点检测其中一个从节点(数据节点),您会看到每个节点上都有一个数据节点守护进程:清单9.检测其中一个从节点上的数据节点rootslave1:#jps 10562 Jps 10451 DataNod

18、e rootslave1:#下一步是要启动MapReduce守护进程(jobtracker和tasktracker)。如清单10所示执行该操作。注意,脚本启动主节点上的jobtracker(正如配置所定义的;参见清单5)和每个从节点上的tasktrackers。主节点上的一个jps命令显示jobtracker正在运行。清单10.启动MapReduce守护进程rootmaster:#/usr/lib/hadoop-0.20/bin/start-mapred.sh starting jobtracker,logging to/usr/lib/hadoop-0.20/logs/hadoop-root

19、-jobtracker-mtj-desktop.out 34:starting tasktracker,logging to/usr/lib/hadoop-0.20/bin/./logs/hadoop-root-tasktracker-mtj-desktop.out 35:starting tasktracker,logging to/usr/lib/hadoop-0.20/bin/./logs/hadoop-root-tasktracker-mtj-desktop.out rootmaster:#jps 7367 NameNode 7842

20、 JobTracker 7938 Jps 7522 SecondaryNameNode rootmaster:#最后,使用jps检查一个从节点。这里您可以看到,一个tasktracker守护进程将数据节点守护进程联接到每个从数据节点上:清单11.检测其中一个从节点上的数据节点rootslave1:#jps 7785 DataNode 8114 Jps 7991 TaskTracker rootslave1:#启动脚本、节点和启动的守护进程之间的关系如图4所示。如您所见,start-dfs脚本启动名称节点和数据节点,而start-mapred脚本启动jobtracker和tasktrackers

21、。图4.每个节点的启动脚本和守护进程的关系回页首测试HDFS既然Hadoop已经开始在整个集群中运行了,您可以运行一些测试来确保其正常运作(见清单12)。首先,通过hadoop-0.20实用程序发出一个文件系统命令(fs),并请求一个df(disk free)操作。与在Linux®;中一样,该命令仅确定特定设备的已用空间和可用空间。因此,对于新格式化的文件系统,就没有已用空间。下一步,在HDFS的根上执行一个ls操作,创建一个子目录,列出其内容,并删除它。最后,在hadoop-0.20实用程序内,您可以使用fsck命令在HDFS上执行一个fsck(文件系统检查)。这一切-以及各种其他信

22、息(比如检测到两个数据节点)-都告诉您文件系统是正常的。清单12.检查HDFS rootmaster:#hadoop-0.20 fs-df Size Used Avail Use%/16078839808 73728 3490967552 0%rootmaster:#hadoop-0.20 fs-ls/Found 1items drwxr-xr-x-root supergroup 02010-05-12 12:16/tmp rootmaster:#hadoop-0.20 fs-mkdir test rootmaster:#hadoop-0.20 fs-ls test rootmaster:#h

23、adoop-0.20 fs-rmr test Deleted hdfs:/33:54310/user/root/test rootmaster:#hadoop-0.20 fsck/.Status:HEALTHY Total size:4 BTotal dirs:6 Total files:1 Total blocks(validated):1(avg.block size 4B)Minimally replicated blocks:1(100.0%)Over-replicated blocks:0(0.0%)Under-replicated blocks:0(0.0

24、%)Mis-replicated blocks:0(0.0%)Default replication factor:2 Average block replication:2.0 Corrupt blocks:0 Missing replicas:0(0.0%)Number of data-nodes:2 Number of racks:1 The under path/is HEALTHY rootmaster:#回页首执行一个MapReduce作业下一步是执行一个MapReduce作业,以验证整个设置运作正常(见清单13)。该进程的第一步是要引入一些数据。因此,首先创建一个目录来容纳您的输

25、入数据(称为input),创建方式是使用hadoop-0.20实用程序的mkdir命令。然后,使用hadoop-0.20的put命令将两个文件放到HDFS中。您可以使用Hadoop实用程序的ls命令检查输入目录的内容。清单13.生成输入数据rootmaster:#hadoop-0.20 fs-mkdir input rootmaster:#hadoop-0.20 fs-put/usr/src/linux-source-2.6.27/Doc*/memory-barriers.txt input rootmaster:#hadoop-0.20 fs-put/usr/src/linux-source

26、-2.6.27/Doc*/rt-mutex-design.txt input rootmaster:#hadoop-0.20 fs-ls input Found 2items-rw-r-r-2 root supergroup 78031 2010-05-12 14:16/user/root/input/memory-barriers.txt-rw-r-r-2 root supergroup 33567 2010-05-12 14:16/user/root/input/rt-mutex-design.txt rootmaster:#下一步,启动wordcount MapReduce作业。与在伪分

27、布式模型中一样,指定输入子目录(包含输入文件)和输出目录(不存在,但会由名称节点创建并用结果数据填充):清单14.在集群上运行MapReduce wordcount作业rootmaster:#hadoop-0.20 jar/usr/lib/hadoop-0.20/hadoop-0.20.2+228-examples.jar wordcount input output 10/05/12 19:04:37 INFO input.:Total input paths to process:2 10/05/12 19:04:38 INFO mapred.JobClient:Running job:j

28、ob_ 2_0001 10/05/12 19:04:39 INFO mapred.JobClient:map 0%reduce 0%10/05/12 19:04:59 INFO mapred.JobClient:map 50%reduce 0%10/05/12 19:05:08 INFO mapred.JobClient:map 100%reduce 16%10/05/12 19:05:17 INFO mapred.JobClient:map 100%reduce 100%10/05/12 19:05:19 INFO mapred.JobClient:Job complete:job_ 2_0

29、001 10/05/12 19:05:19 INFO mapred.JobClient:Counters:17 10/05/12 19:05:19 INFO mapred.JobClient:Job Counters 10/05/12 19:05:19 INFO mapred.JobClient:Launched reduce tasks=1 10/05/12 19:05:19 INFO mapred.JobClient:Launched map tasks=2 10/05/12 19:05:19 INFO mapred.JobClient:Data-local map tasks=2 10/

30、05/12 19:05:19 INFO mapred.Job Client: 10/05/12 19:05:19 INFO mapred.JobClient: 10/05/12 19:05:19 INFO mapred.JobClient:HDFS_BYTES_READ=111598 10/05/12 19:05:19 INFO mapred.JobClient: 10/05/12 19:05:19 INFO mapred.JobClient:HDFS_BYTES_WRITTEN=30949 10/05/12 19:05:19 INFO mapred.JobClient:Map-Reduce

31、Framework 10/05/12 19:05:19 INFO mapred.JobClient:Reduce input groups=2974 10/05/12 19:05:19 INFO mapred.JobClient:Combine output records=3381 10/05/12 19:05:19 INFO mapred.JobClient:Map input records=2937 10/05/12 19:05:19 INFO mapred.JobClient:Reduce shuffle bytes=47562 10/05/12 19:05:19 INFO mapr

32、ed.JobClient:Reduce output records=2974 10/05/12 19:05:19 INFO mapred.JobClient:Spilled Records=6762 10/05/12 19:05:19 INFO mapred.JobClient:Map output bytes=168718 10/05/12 19:05:19 INFO mapred.JobClient:Combine input records=17457 10/05/12 19:05:19 INFO mapred.JobClient:Map output records=17457 10

33、/05/12 19:05:19 INFO mapred.JobClient:Reduce input records=33 81 rootmaster:#最后一步是探索输出数据。由于您运行了wordcount MapReduce作业,结果是一个文件(从已处理映射文件缩减而来)。该文件包含一个元组列表,表示输入文件中找到的单词和它们在所有输入文件中出现的次数:清单15.检测MapReduce作业的输出rootmaster:#hadoop-0.20 fs-ls output Found 2items drwxr-xr-x-root supergroup 02010-05-12 19:04/user

34、/root/output/_logs-rw-r-r-2 root supergroup 30949 2010-05-12 19:05/user/root/output/part-r-00000 rootmaster:#hadoop-0.20 fs-cat output/part-r-00000|head-13!=1Atomic 2Cache 2Control 1Examples 1Has 7Inter-CPU 1LOAD 1LOCK1Locking 1Locks 1MMIO 1Pending 5rootmaster:#回页首Web管理界面尽管hadoop-0.20实用程序的功能极其丰富,但有时

35、使用一个GUI会更方便。在执行文件系统检测时,您可以通过链接到名称节点,通过连接到jobtracker。您可以通过名称节点检测HDFS,如图5所示,在这里您检测输入目录(包含输入数据-见上面清单13)。图5.通过名称节点检测HDFS通过jobtracker,您可以检测运行中或已完成的作业。在图6中,您可以看到对最后一个作业的检测(来自清单14)。该图展示了作为Java存档(JAR)请求的输出发出的各种数据,以及任务的状态和数量。注意,这里执行了两个映射任务(每个输入文件一个映射)和一个缩减任务(用于缩减两个映射输入)。图6.检查一个已完成作业的状态最后,您可以通过名称节点检查数据节点的状态。名

36、称节点主页确定活动节点和死节点(作为链接)的数量,且允许您进一步检测它们。图7所示的页面显示了活动数据节点以及每个节点的统计数据。图7.检查活动数据节点的状态通过名称节点和jobtracker Web界面,可以查看许多其他视图,但出于简洁,只显示该样例集。在名称节点和jobtracker Web页面内,您会找到大量链接,从而引导您获取有关Hadoop配置和操作的其他信息(包括运行时日志)。回页首更进一步在本期中,您了解了如何将一个伪分布式配置从Cloudera转化为一个完全分布式配置。寥寥无几的步骤以及MapReduce应用程序的一个相同接口,就使Hadoop成为一个能实现分布式处理的有用工具。另一个有趣的部分就是Hadoop的可伸缩性探讨。通过添加新数据节点(并更新其XML文件和master中的slave文件),您可以轻松伸缩Hadoop来进行更高级别的平行处理。第3部分,也就是本Hadoop系列的最后一期,将探讨如何为Hadoop开发一个MapReduce应用程序。参考资料学习本系列的第1部分,用Hadoop进行分布式数据处理,第1部分:入门(developerWorks,2010年5月)向您展示了如何为实现伪分布式配置而安装Hadoop(即在一个节点上运行所有

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论