• 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. python实现一个控制台下的进度条

    今天写练习爬虫感觉很需要个进度条,就随手用函数实现了一个,到了晚上突然感觉到这个东西应该单独写出来以后肯定用用得着. 代码也很简单,我就不细讲了,直接上代码了. 测试代码: instance.py i ...

  2. PHP日志压缩下载

    主要实现了在后台查看日志列表及打包下载功能. 由于用到了PHP压缩功能,特此记录下. 压缩下载类: Hzip.php <?php /** * Created by PhpStorm. * @au ...

  3. Atitit 图像处理和计算机视觉的分类 三部分 图像处理 图像分析 计算机视觉

    Atitit 图像处理和计算机视觉的分类 三部分 图像处理 图像分析 计算机视觉 1.1. 按照当前流行的分类方法,可以分为以下三部分:三部分 图像处理 图像分析 计算机视觉1 1.2. 图像处理需要 ...

  4. CSS布局之div交叉排布与底部对齐--flex实现

    最近在用wordpress写页面时,设计师给出了一种网页排布图样,之前从未遇到过,其在电脑上(分辨率大于768px)的效果图如下: 而在手机(分辨率小于等于768px)上要求这样排列: 我想到了两种方 ...

  5. jquery判断当前浏览器的实现代码

    写了一个判断当前浏览器类型及版本的方法,只在IE 8/11 .谷歌 .360 浏览器(不完全)上测试过,需要用到jquery 核心代码: ;(function($, window, document, ...

  6. Dreamweaver 扩展开发: Calling a C++ function from JavaScript

    After you understand how C-level extensibility works in Dreamweaver and its dependency on certain da ...

  7. WPF自定义控件与样式(3)-TextBox & RichTextBox & PasswordBox样式、水印、Label标签、功能扩展

    一.前言.预览 申明:WPF自定义控件与样式是一个系列文章,前后是有些关联的,但大多是按照由简到繁的顺序逐步发布的等,若有不明白的地方可以参考本系列前面的文章,文末附有部分文章链接. 本文主要是对文本 ...

  8. SQLServer:什么是主键(PK)和外键(FK)?

    一.主键与外键 1.主键是用来唯一地标识一行数据.主键列必须包含唯一的值,且不能包含空值(null). 2.主键可以建立在每张二维表中单列或者多列上. 3.一张二维表上的外键可以引用另一张二维表上对应 ...

  9. python2.7 内置ConfigParser支持Unicode读写

    1 python编码基础 对应 C/C++ 的 char 和 wchar_t, Python 也有两种字符串类型,str 与 unicode: str与unicode # -*- coding: ut ...

  10. Hive索引功能测试

    作者:Syn良子 出处:http://www.cnblogs.com/cssdongl 转载请注明出处 从Hive的官方wiki来看,Hive0.7以后增加了一个对表建立index的功能,想试下性能是 ...