• 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. [译]ZOOKEEPER RECIPES-Locks

    锁 全局式分布式锁要求任何时刻没有两个客户端会获得同一个锁对象,这可以通过使用ZooKeeper实现.像优先级队列一样,首先需要定义一个锁节点. 在ZooKepeer的发布中src/recipes/l ...

  2. Vue.js入门

    之前一直用的是jQuery,jQuery手动操作DOM导致性能不够好,因为DOM修改导致的页面重绘.重新排版!重新排版是用户阻塞的操作,同时,如果频繁重排,CPU使用率也会猛涨! Vue.js是数据驱 ...

  3. IE开发人员工具之实用功能讲解

    F12快捷键调出开发人员工具 一.JS的内容格式化 1.内容较乱的js脚本: 2.勾选下面两项即可进行格式化脚本:自动换行与格式化JS 3.调理清楚的脚本 二:清空控制台 1.右键->清空 2. ...

  4. 2. SVM线性分类器

    在一个线性分类器中,可以看到SVM形成的思路,并接触很多SVM的核心概念.用一个二维空间里仅有两类样本的分类问题来举个小例子.如图所示 和是要区分的两个类别,在二维平面中它们的样本如上图所示.中间的直 ...

  5. 通过IEnumerable和IDisposable实现可暂停和取消的任务队列

    一般来说,软件中总会有一些长时间的操作,这类操作包括下载文件,转储数据库,或者处理复杂的运算. 一种处理做法是,在主界面上提示正在操作中,有进度条,其他部分不可用.这里带来很大的问题, 使用者不知道到 ...

  6. ubuntu 14.04LTS 环境下配置NFS服务

    简言之,NFS(Network FileSystem,网络文件系统)用于在不同机器,不同操作系统之间通过网络互相分享各自的文件.NFS设计之初就是为了在不同的系统间使用,所以它的通讯协议设计与主机及操 ...

  7. android使用PullToRefresh实现上拉加载和下拉刷新效果

    其实很早前就在博客园中也写过官方的下拉刷新控件SwipeRefreshLayout,但是这个控件仅仅支持下拉刷新,用起来还算可以.然而在我们实际开发应用中,很多地方都不止有下拉刷新,而且还有上拉加载的 ...

  8. 安卓Design包之TabLayout控件的简单使用

    Google在2015的IO大会上,给我们带来了更加详细的Material Design设计规范,同时,也给我们带来了全新的Android Design Support Library,在这个supp ...

  9. 介绍,介绍我的底层支持库 Net.Sz.CFramework

    Net.Sz.CFramework  是我自己的底层库,是经过验证的底层库. 包含: socket tcp协议,socket http协议线程池,线程模型,任务模型,定时器模型,日志模块脚本模块一些辅 ...

  10. ASP.NET Core官方计划路线及需要废除的一些Framework技术

    概述 下面是 ASP.NET Core的时间表和路线图. 注意日期和特性都可能更改. 作为.NET Core这么大的一个项目,很难准确预测每一个计划的是否有变动. 即便如此,我们还是计划公开和透明的实 ...