[转帖]用 Hadoop 进行分布式数据处理(进阶)_Hadoop,ERP及大数据讨论区_Weblogic技术|Tuxedo技术|中间件技术|Oracle论坛|JAVA论坛|Linux/Unix技术|hadoop论坛_联动北方技术论坛  
网站首页 | 关于我们 | 服务中心 | 经验交流 | 公司荣誉 | 成功案例 | 合作伙伴 | 联系我们 |
联动北方-国内领先的云技术服务提供商
»  游客             当前位置:  论坛首页 »  自由讨论区 »  Hadoop,ERP及大数据讨论区 »
总帖数
1
每页帖数
101/1页1
返回列表
0
发起投票  发起投票 发新帖子
查看: 3050 | 回复: 0   主题: [转帖]用 Hadoop 进行分布式数据处理(进阶)        下一篇 
wei.wang
注册用户
等级:少校
经验:1001
发帖:87
精华:0
注册:2013-8-29
状态:离线
发送短消息息给wei.wang 加好友    发送短消息息给wei.wang 发消息
发表于: IP:您无权察看 2013-9-5 15:31:14 | [全部帖] [楼主帖] 楼主

本文是嵌入式固件架构师M. Tim Jones所撰写的, 本系列的用 Hadoop 进行分布式数据处理,第 1 部分:入门 展示了如何在一个单节点集群中使用 Hadoop。本文在此基础之上继续介绍一个更加高级的设置,即使用多个节点进行并行处理。展示了多节点集群所需的各种节点类型,并探讨了一个并行环境中的 MapReduce 功能。本文还深入探究了 Hadoop 的管理方面 — 同时基于命令行和 Web。

Hadoop 分布式计算架构的真正实力在于其分布性。换句话说,向工作并行分布多个节点的能力使 Hadoop 能够应用于大型基础设施以及大量数据的处理。本文首先对一个分布式 Hadoop 架构进行分解,然后探讨分布式配置和使用。

分布式 Hadoop 架构

根据 用 Hadoop 进行分布式数据处理,第 1 部分:入门,所有 Hadoop 守护进程都在同一个主机上运行。尽管不运用 Hadoop 的并行性,这个伪分布式配置提供一种简单的方式来以最少的设置测试 Hadoop 的功能。现在,让我们使用机器集群探讨一下 Hadoop 的并行性。

根据第 1 部分,Hadoop 配置定义了让所有 Hadoop 守护进程在一个节点上运行。因此,让我们首先看一下如何自然分布 Hadoop 来执行并行操作。在一个分布式 Hadoop 设置中,您有一个主节点和一些从节点(见图 1)。

北京联动北方科技有限公司

图 1. Hadoop 主从节点分解

如图 1 所示,主节点包括名称节点、从属名称节点和 jobtracker 守护进程(即所谓的主守护进程)。此外,这是您为本演示管理集群所用的节点(使用 Hadoop 实用程序和浏览器)。从节点包括 tasktracker 和数据节点(从属守护进程)。两种设置的不同之处在于,主节点包括提供 Hadoop 集群管理和协调的守护进程,而从节点包括实现 Hadoop 文件系统(HDFS)存储功能和 MapReduce 功能(数据处理功能)的守护进程。

对于该演示,在一个 LAN 上创建一个主节点和两个从节点。设置如图 2 所示。现在,我们来探讨用于多节点分布的 Hadoop 的安装和配置。

北京联动北方科技有限公司

图 2. Hadoop 集群配置

为简化部署,要运用虚拟化技术,该技术有几个好处。尽管在该设置中使用虚拟化技术看不出性能优势,但是它可以创建一个 Hadoop 安装,然后为其他节点克隆该安装。为此,您的 Hadoop 集群应显示如下:在一个主机上的虚拟机监控程序上下文中将主从节点作为虚拟机(VM)运行(见图 3)。

北京联动北方科技有限公司

图 3. 虚拟环境中的 Hadoop 集群配置

升级 Hadoop

在 用 Hadoop 进行分布式数据处理,第 1 部分:入门 中,我们安装了在一个节点上运行的 Hadoop 的一个特殊分布(伪配置)。在本文中,我们要更新分布式配置。如果您没有看过本系列的第 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/hadoop-0.20/conf.pseudo
/etc/hadoop-0.20/conf.empty - priority 10
/etc/hadoop-0.20/conf.pseudo - priority 30
Current `best' version 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 update-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
/etc/hadoop-0.20/conf.dist - priority 40
Current `best' version is /etc/hadoop-0.20/conf.dist.
$


现在,您有一个名为 conf.dist 的新配置,您要将其用于您的新分布式配置。此时该节点运行于一个虚拟环境中,将该节点克隆到另外两个要充当数据节点的节点中。

配置 Hadoop 以实现分布式操作

下一步是要使所有节点互联互通。这可��� /etc/hadoop-0.20/conf.dist/ 中的两个名为 masters 和 slaves 的文件中实现。本例中的三个节点的 IP 地址是静态分配的,如清单 3 所示(来自 /etc/hosts):

清单 3. 该设置的 Hadoop 节点(/etc/hosts)

master 192.168.108.133
slave1 192.168.108.134
slave2 192.168.108.135


因此,在主节点上,更新 /etc/hadoop-0.20/conf.dist/masters 来确定主节点,如下所示:

master


然后在 /etc/hadoop-0.20/conf.dist/slaves 中确定从节点, 其中包括以下两行:

slave1
slave2


接下来,从每个节点上,将 Secure Shell (ssh) 连接到所有其他节点,确保 pass-phraseless ssh 在运行。所有这些文件(masters,slaves)都由本系列第 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>fs.default.name<name>
<value>hdfs://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<name>
<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>2<value>
<description>Default block replication<description>
<property>
<configuration>


配置项如 清单 4 所示,分布式设置所需的元素见 清单 5 和 清单 6。Hadoop 在这里提供大量配置选项,支持您按需定制整个环境。参考资料 部分含有关于这些选项的更多信息。

完成配置之后,下一步是要格式化名称节点(HDFS 主节点)。对于该操作,使用 hadoop-0.20 实用程序指定名称节点和操作(-format):

清单 7. 格式化名称节点

user@master:~# sudo su -
root@master:~# hadoop-0.20 namenode -format
10/05/11 18:39:58 INFO namenode.NameNode: STARTUP_MSG:
10/05/11 18:39:59 INFO namenode.FSNamesystem: fsOwner=root,root
10/05/11 18:39:59 INFO namenode.FSNamesystem: supergroup=supergroup
10/05/11 18:39:59 INFO namenode.FSNamesystem: isPermissionEnabled=true
10/05/11 18:39:59 INFO common.Storage: Image file of size 94 saved in 0 seconds.
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:59 INFO namenode.NameNode: SHUTDOWN_MSG:
rt-mutex-design.txt input
root@master:~# hadoop-0.20 fs -ls input
Found 2 items
-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
root@master:~#


下一步,启动 wordcount MapReduce 作业。与在伪分布式模型中一样,指定输入子目录(包含输入文件)和输出目录(不存在,但会由名称节点创建并用结果数据填充):

清单 14. 在集群上运行 MapReduce wordcount 作业

root@master:~# 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.FileInputFormat: Total input paths to process : 2
10/05/12 19:04:38 INFO mapred.JobClient: Running job: job_201005121900_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_201005121900_0001
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/05/12 19:05:19 INFO mapred.JobClient: FileSystemCounters
10/05/12 19:05:19 INFO mapred.JobClient: FILE_BYTES_READ=47556
10/05/12 19:05:19 INFO mapred.JobClient: HDFS_BYTES_READ=111598
10/05/12 19:05:19 INFO mapred.JobClient: FILE_BYTES_WRITTEN=95182
10/05/12 19:05:19 INFO mapred.JobClient: HDFS_BYTES_WRITTEN=30949
10/05/12 19:05:19 INFO mapred.JobClient: Map-Reduce 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 mapred.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/05/12 19:05:19 INFO mapred.JobClient: Reduce input records=3381
root@master:~#


最后一步是探索输出数据。由于您运行了 wordcount MapReduce 作业,结果是一个文件(从已处理映射文件缩减而来)。该文件包含一个元组列表,表示输入文件中找到的单词和它们在所有输入文件中出现的次数:

清单 15. 检测 MapReduce 作业的输出

root@master:~# hadoop-0.20
fs -ls output
Found 2 items
drwxr-xr-x - root supergroup 0 2010-05-12 19:04 /user/root/output/_logs
-rw-r--r-- 2 root supergroup 30949 2010-05-12 19:05 /user/root/output/part-r-00000
root@master:~# hadoop-0.20 fs -cat output/part-r-00000 | head -13
!= 1
"Atomic 2
"Cache 2
"Control 1
"Examples 1
"Has 7
"Inter-CPU 1
"LOAD 1
"LOCK" 1
"Locking 1
"Locks 1
"MMIO 1
"Pending 5
root@master:~#


Web 管理界面

尽管 hadoop-0.20 实用程序的功能极其丰富,但有时使用一个 GUI 会更方便。在执行文件系统检测时,您可以通过 http://master:50070 链接到名称节点,通过 http://master:50030 连接到 jobtracker 。您可以通过名称节点检测 HDFS,如图 5 所示,在这里您检测输入目录(包含输入数据 — 见上面 清单 13)。

北京联动北方科技有限公司

图 5. 通过名称节点检测 HDFS

通过 jobtracker,您可以检测运行中或已完成的作业。在图 6 中,您可以看到对最后一个作业的检测(来自 清单 14)。该图展示了作为 Java 存档(JAR)请求的输出发出的各种数据,以及任务的状态和数量。注意,这里执行了两个映射任务(每个输入文件一个映射)和一个缩减任务(用于缩减两个映射输入)。

北京联动北方科技有限公司

图 6. 检查一个已完成作业的状态

最后,您可以通过名称节点检查数据节点的状态。名称节点主页确定活动节点和死节点(作为链接)的数量,且允许您进一步检测它们。图 7 所示的页面显示了活动数据节点以及每个节点的统计数据。

北京联动北方科技有限公司

图 7. 检查活动数据节点的状态

通过名称节点和 jobtracker Web 界面,可以查看许多其他视图,但出于简洁,只显示该样例集。在名称节点和 jobtracker Web 页面内,您会找到大量链接,从而引导您获取有关 Hadoop 配置和操作的其他信息(包括运行时日志)。

更进一步

在本期中,您了解了如何将一个伪分布式配置从 Cloudera 转化为一个完全分布式配置。寥寥无几的步骤以及 MapReduce 应用程序的一个相同接口,就使 Hadoop 成为一个能实现分布式处理的有用工具。另一个有趣的部分就是 Hadoop 的可伸缩性探讨。通过添加新数据节点(并更新其 XML 文件和 master 中的 slave 文件),您可以轻松伸缩 Hadoop 来进行更高级别的平行处理。第 3 部分,也就是本 Hadoop 系列的最后一期,将探讨如何为 Hadoop 开发一个 MapReduce 应用程序。




赞(0)    操作        顶端 
总帖数
1
每页帖数
101/1页1
返回列表
发新帖子
请输入验证码: 点击刷新验证码
您需要登录后才可以回帖 登录 | 注册
技术讨论