• Hadoop的结构组成
  • 安装Hadoop及其3种工作模式:单机、伪分布和全分布
  • 用于监控Hadoop安装的Web工具
 
1、Hadoop的构造模块
 
(1)NameNode(名字节点)
     Hadoop在分布式计算和分布式存储中都采用了主/从结构。NameNode位于HDFS的主端,它指导从端的DataNode执行底层的I/O任务。NameNode是HDFS的书记员,它跟踪文件如何被分割成文件块,而这些块又被哪些节点存储,以及分布式文件系统的整体运行状态是否正常。
     运行NameNode消耗大量的内存和I/O资源。因此,为了减轻机器的负载,驻留NameNode的服务器通常不会存储用户数据或执行MapReduce程序的计算任务,就意味着NameNode服务器不会同时是DataNode或者TaskTracker。
     不过NameNode的重要性也带来了一个负面影响——hadoop集群的单点失效。对于任何其他的守护进程,如果它们所驻留的节点发生软件或硬件失效,hadoop集群很可能还会继续平稳运行,不然还可以快速重启这个节点。但这样的方法并不适用于NameNode!
 
(2)DataNode(数据节点)
     每个集群上的从节点都会驻留一个DataNode守护进程,来执行分布式文件系统的繁重工作——将HDFS数据块读取或写入到本地文件系统的实际文件中。当希望对HDFS文件进行读写时,文件被分割为多个块,由NameNode告知客户端每个数据块驻留在哪个DataNode。客户端直接与DataNode守护进程通信,来处理与数据块相对应的本地文件。而后,DataNode会与其他DataNode进行通信,复制这些数据块以实现冗余。
     默认情况下每个数据块有3个副本,这确保了如果任何一个DataNode奔溃或者无法通过网络访问时,仍然可以读取这些文件。
     DataNode不断向NameNode报告。初始化时,每个DataNode将当前存储的数据块告知NameNode。在这个初始映射完成后,DataNode仍会不断地更新NameNode,为之提供本地修改的相关信息,同时接收指令创建、移动或删除本地磁盘上的数据块。
 
(3)Secondary NameNode(次名节点)
   Secondary NameNode是一个用于监测HDFS集群状态的辅助守护进程。像NameNode一样,每个集群有一个SNN,通常也独占一台服务器,该服务器不会运行其他的DataNode或TaskTracker守护进程。SNN与NameNode的不同在于它不接收或记录HDFS的任务实时变化。相反,它与NameNode通信,根据集群所配置的时间间隔获取HDFS元数据的快照。
     如前所述,NameNode是Hadoo集群的单一故障点,而SNN的快照可以有助于减少停机的时间并降低数据丢失的风险。然而,NameNode的失效处理需要人工的干预,即手动地重新配置集群,将SNN用作主要的NameNode。
 
(4)JobTracker(作业跟踪节点)
     JobTracker守护进程是应用程序和Hadoop之间的纽带。一旦提交代码到集群上,JobTracker就会确定执行计划,包括决定处理哪些文件,为不同的任务分配节点以及监控所有任务的运行。如果任务失败,JobTracker将自动重启任务,但所分配的节点可能会不同,同时受到预定义的重试次数限制。
     每个Hadoop集群只有一个JobTracker守护进程,它通常运行在服务器集群的主节点上。
 
(5)TaskTracker(任务跟踪节点)
     与存储的守护进程一样,计算的守护进程也遵循主/从架构:JobTracker作为主节点,监测MapReduce作业的整个执行过程;同时,TaskTracker管理各个任务在每个从节点上的执行情况。
     每个TaskTracker负责执行由JobTracker分配的单项任务。虽然每个从节点上仅有一个TaskTracker,但每个TaskTracker可以生成多个JVM(Java虚拟机)来并行处理许多map或reduce任务。
     TaskTracker的一个职责是持续不断地与JobTracker通信。如果JobTracker在指定的时间内没有收到来自TaskTracker的“心跳”,它会假定TaskTracker已经奔溃了,进而重新提交相应的任务到集群中的其他节点中。
 
典型的Hadoop集群的拓扑结构的特点是在主节点上运行NameNode和JobTracker的守护进程,并使用独立的节点运行SNN以防主节点失效。在小型集群中,SNN也可以驻留在某个从节点上,而在大型集群中,连NameNode和JobTracker都会分别驻留在两台机器上。每个从节点均驻留一个DataNode和TaskTracker,从而在存储数据的同一节点上执行任务。
 
2、为Hadoop集群安装SSH
 
生成密钥对:
ssh-keygen -t rsa
 
将公钥分布并登录验证:
[主节点]
scp ~/.ssh/id_rsa.pub hadoop-user@target:~/master-key
 
[从节点]
mkdir ~/.ssh
chmod 700 ~/.ssh
mv ~/master-key ~/.ssh/authorized_keys
chmod 600 ~/.ssh/authorized_keys
 
验证登录:
ssh target
 
3、运行Hadoop
 
在运行Hadoop之前需要做一些配置。需要做的第一件事就是指定包括主节点在内所有节点上Java的位置,即在hadoop-env.sh中定义JAVA_HOME环境变量使之指向Java安装目录。
Hadoop0.20之后的设置主要包含在XML配置文件中,包括core-site.xml、hdfs-site.xml、mapred-site.xml共3个文件。
Hadoop2.x的设置新增了yarn-site.xml配置文件。
 
(1)本地单机模式
     单机模式是Hadoop的默认模式,在这种默认模式下所有3个XML文件均为空。
     该模式主要用于开发调试MapReduce程序的应用逻辑,而不会与守护进程交互,避免引起额外的复杂性。
 
(2)伪分布模式
     伪分布模式在“单节点集群”上运行Hadoop,其中所有的守护进程都运行在同一台机器上。
     该模式在单机模式之上增加了代码调试功能,允许检查内存使用情况、HDFS输入输出,以及其他的守护进程交互。
 

代码清单 伪分布模式下3个配置文件的示例
 
 core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://localhost:9000</value>
</property> mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>localhost:9001</value>
</property> hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
在core-site.xml和mapred-site.xml中分别指定了NameNode和JobTracker的主机名与端口。
在hdfs-site.xml中指定了HDFS的默认副本数。
 

 
还需要在文件masters中指定SNN的位置,并在文件slaves中指定从节点的位置。
cat masters
localhost
cat slaves
localhost
 
格式化HDFS:
hadoop namenode -format
 
 启动Hadoop:
start-all.sh
 
关闭Hadoop:
stop-all.sh
 
(3)全分布模式
 
使用如下的服务器名称:
  • master——集群的主节点,驻留NameNode和JobTracker守护进程
  • backup——驻留SNN守护进程的节点
  • hadoop1,hadoop2,hadoop3…——集群的从节点,驻留DataNode和TaskTracker守护进程
 

代码清单 全分布模式下3个配置文件的示例
 
 core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property> mapred-site.xml
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property> hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
 
在core-site.xml和mapred-site.xml中分别指定了NameNode和JobTracker的主机名与端口。
在hdfs-site.xml中指定了HDFS的默认副本数。

 
还需要在文件masters中指定SNN的位置,并在文件slaves中指定从节点的位置。
cat masters
backup
cat slaves
hadoop1
hadoop2
hadoop3
...
 
格式化HDFS:
hadoop namenode -format
 
 启动Hadoop:
start-all.sh
 
关闭Hadoop:
stop-all.sh
 
4、基于Web的集群用户界面
 
NameNode通过端口50070提供常规报告,描绘集群上HDFS的状态视图。
JobTracker通过端口50030提供一个MapReduce作业运行时状态的近似视图。 
 
 [转载请注明] http://www.cnblogs.com/zhengrunjian/

[Hadoop in Action] 第2章 初识Hadoop的更多相关文章

  1. [Hadoop in Action] 第7章 细则手册

    向任务传递定制参数 获取任务待定的信息 生成多个输出 与关系数据库交互 让输出做全局排序   1.向任务传递作业定制的参数        在编写Mapper和Reducer时,通常会想让一些地方可以配 ...

  2. [hadoop in Action] 第3章 Hadoop组件

    管理HDFS中的文件 分析MapReduce框架中的组件 读写输入输出数据   1.HDFS文件操作   [命令行方式]   Hadoop的文件命令采取的形式为: hadoop fs -cmd < ...

  3. [Hadoop in Action] 第1章 Hadoop简介

    编写可扩展.分布式的数据密集型程序和基础知识 理解Hadoop和MapReduce 编写和运行一个基本的MapReduce程序   1.什么是Hadoop   Hadoop是一个开源的框架,可编写和运 ...

  4. Hadoop专业解决方案-第12章 为Hadoop应用构建企业级的安全解决方案

    一.前言: 非常感谢Hadoop专业解决方案群:313702010,兄弟们的大力支持,在此说一声辛苦了,春节期间,项目进度有所延迟,不过元宵节以后大家已经步入正轨, 目前第12章 为Hadoop应用构 ...

  5. [Hadoop in Action] 第6章 编程实践

    Hadoop程序开发的独门绝技 在本地,伪分布和全分布模式下调试程序 程序输出的完整性检查和回归测试 日志和监控 性能调优   1.开发MapReduce程序   [本地模式]        本地模式 ...

  6. [Hadoop in Action] 第5章 高阶MapReduce

    链接多个MapReduce作业 执行多个数据集的联结 生成Bloom filter   1.链接MapReduce作业   [顺序链接MapReduce作业]   mapreduce-1 | mapr ...

  7. [Hadoop in Action] 第4章 编写MapReduce基础程序

    基于hadoop的专利数据处理示例 MapReduce程序框架 用于计数统计的MapReduce基础程序 支持用脚本语言编写MapReduce程序的hadoop流式API 用于提升性能的Combine ...

  8. [hadoop读书笔记] 第一章 初识 Hadoop

    P3-P4: 目前遇见的问题很简单:硬盘容量不断提升,1TB的已成为主流,然而数据传输速度从1990年的4.4MB/s仅上升到当前约100MB/s 读取一个1TB的硬盘数据需要耗时至少2.5个小时.写 ...

  9. 初识Hadoop入门介绍

    初识hadoop入门介绍 Hadoop一直是我想学习的技术,正巧最近项目组要做电子商城,我就开始研究Hadoop,虽然最后鉴定Hadoop不适用我们的项目,但是我会继续研究下去,技多不压身. < ...

随机推荐

  1. Entity Framework 6 Recipes 2nd Edition(9-6)译->管理断开时的并发

    9-6. 管理断开时的并发 问题 想要确保只接受在WCF客户端并发令牌未被修改的实体. 解决方案 我们有一个如Figure 9-6所示的模型. Figure 9-6订单实体模型 我们想通过WCF服务来 ...

  2. Math.random()

    Math.random() 日期时间函数(需要用变量调用):var b = new Date(); //获取当前时间b.getTime() //获取时间戳b.getFullYear() //获取年份b ...

  3. Integer.parseInt 引发的血案

    Integer.parseInt 处理一个空字符串, 结果出错了, 程序没有注意到,搞了很久, 引发了血案啊!! 最后,终于 观察到了, 最后的部分: Caused by: java.lang.NoC ...

  4. 解析大型.NET ERP系统 多国语言实现

    实现多国语言有许多种实现方案,无外乎是一种字符串替换技术,将界面控件的文本标签替换成相应语言的文字..NET Windows Forms实现多国语言的方法有以下几种: 1 .NET的方案,使用资源文件 ...

  5. Python标准模块--itertools

    1 模块简介 Python提供了itertools模块,可以创建属于自己的迭代器.itertools提供的工具快速并且节约内存.开发者可以使用这些工具创建属于自己特定的迭代器,这些特定的迭代器可以用于 ...

  6. MVC5 网站开发之二 创建项目

    昨天对项目的思路大致理了一下,今天先把解决方案建立起来.整个解决包含Ninesky.Web.Ninesky.Core,Ninesky.DataLibrary等3个项目.Ninesky.Web是web应 ...

  7. android 在 ListView 的 item 中插入 GridView 仿微信朋友圈图片显示。

    转载请声明出处(http://www.cnblogs.com/linguanh/) 先上张效果图: 1,思路简述 这个肯定是要重写 baseAdapter的了,这里我分了两个数据适配器,一个是自定义的 ...

  8. 你真的会玩SQL吗?你所不知道的 数据聚合

    你真的会玩SQL吗?系列目录 你真的会玩SQL吗?之逻辑查询处理阶段 你真的会玩SQL吗?和平大使 内连接.外连接 你真的会玩SQL吗?三范式.数据完整性 你真的会玩SQL吗?查询指定节点及其所有父节 ...

  9. C#7.0中有哪些新特性?

    以下将是 C# 7.0 中所有计划的语言特性的描述.随着 Visual Studio “15” Preview 4 版本的发布,这些特性中的大部分将活跃起来.现在是时候来展示这些特性,你也告诉借此告诉 ...

  10. PyQt4入门学习笔记(三)

    # PyQt4入门学习笔记(三) PyQt4内的布局 布局方式是我们控制我们的GUI页面内各个控件的排放位置的.我们可以通过两种基本方式来控制: 1.绝对位置 2.layout类 绝对位置 这种方式要 ...