1、什么是大数据?什么是云计算?什么是hadoop?

大数据现在很火,到底什么是大数据,多大的数据才算大,一般而言对于TB级以上的数据我们成为大数据,对于这些数据它的价值在哪?大数据的价值就是我们大量的数据中分析出有价值的信息,来判断一些行为等等信息。而这些大数据存储在哪?如何进行分析?这就衍生了Hadoop。

云计算是什么?通俗的说云计算就是大规模的计算机集群(即多台服务器集群),我们通过软件将这些计算机整合起来,根据需求根据用户来提供服务。比如进行一些数据的计算分析。用来提高工作效率。(这是目前理解的,后面有深入再写)

什么是hadoop?通俗的说,hadoop就是对大数据进行处理的一个工具。利用它我们可以对数据的管理,主要有两方面:数据存储(HDFS)和数据计算(MapReduce、spark、storm),所以我们简单理解为一个数据处理工具即可。

2、什么是HDFS?

刚上面说了HDFS是hadoop中负责对数据进行存储相当于的一个功能模块吧,总的来说,HDFS是一个分布式的文件系统,它可以无限制的存放大量的文件,这些文件分布式的存放在HDFS中,具有高容错、批处理的特点。

3、HDFS的原理?

HDFS的设计思想:

名称解释:

NN: namenode节点:作用:接收来自客户端是读写数据;存放元数据:元数据包括fsimage(格式化的时候产生)和editslog(对元数据进行CRUD的时候产生的日志文件)。

SNN: SecondaryNameNode:作用是协助NN完成元数据的更新操作。

DN:DataNode:数据节点:这里是存放数据的核心位置。DN会不停的向NN发送心跳,用于NN检测DN是否处于活动状态,有没有宕机。

大数据的存储是以块(block)来存储的,每个block默认有三个副本,这三个副本必须存放在不同的节点机器上,即三个不同的计算机。所以DN至少三台。一个DN上面可以存放多个不同的block块,DN的数量必须大于等于block的数量。

SNN合并图:

我们根据图来分析:

HDFS写流程:

4、HDFS如何搭建集群

前提:在进行各项试验之前,各个节点切换到root用户下,将防火墙关闭。 chkconfig iptables off 

centos中搭建集群的步骤:

搭建集群的环境,我们首先准备四个节点机器,一个用来作为NN,一个用来作为SNN,DN,另外两台作为DN .

(1)设置每个节点机器的ssh 免密码登录。

(2)设置NN上面可以免密码登录其余各个节点机器。(将NN的公钥复制给其余节点,其余节点授权NN可以登录自己)(SCP可以不同服务器直接互相传递文件的命令)

(3)解压hadoop后,

修改配置文件:这个可以参考hadoop的API:

修改hadoop-env.sh 文件配置jdk的路径

修改core-site.xml文件:配置NN的访问端口

修改hdfs-site.xml文件,配置SNN地址。

设置slaves中三台DN的节点位置

设置masters作为SNN的节点的位置。

(4)设置好后,复制hadoop到其余各个节点上面。

在NN上面启动hadoop:

start-dfs.sh  即可启动。

5、什么是HA?

HA是高可用,即整个集群的高可用性。

首先为什么会出现HA?

一个集群中只有能有个NN处于活动状态,可是当这个NN宕机了呢,这个集群就不可用了。方案:一主一备,主的宕机了,备的NN作为主的,接替主的位置。

高可用的原因:NN宕机,内存受限

名称解释:

ZK:zookeeper:可以理解为一个服务的管理者,这里主要负责管理主备的自动切换。

JN: journalNode:在HA高可用的集群中,SNN的作用由JN来代替了,JN主要用来负责记录edits文件,共享edits文件,合并edits文件,用来根据edits来合并NN Active 和NN standy 的源文件。

NN acitve:主节点。

NN standby: 备节点。在主节点处于活动状态时,备节点是不作用的。因为一个集群只有一个NN活动。

FileController: 这个文件主要配合zk来进行主备节点的自动切换。

上图分析:

HA原理:

基于QJM的HDFS HA方案如上图所示,其处理流程为:集群启动后一个NameNode处于Active状态,并提供服务,处理客户端和DataNode的请求,并把editlog写到本地和share editlog(这里是QJM)中。另外一个NameNode处于Standby状态,它启动的时候加载fsimage,然后周期性的从share editlog中获取editlog,保持与Active节点的状态同步。为了实现Standby在Active挂掉后迅速提供服务,需要DataNode同时向两个NameNode汇报,使得Stadnby保存block to DataNode信息,因为NameNode启动中最费时的工作是处理所有DataNode的blockreport。为了实现热备,增加FailoverController和Zookeeper,FailoverController与Zookeeper通信,通过Zookeeper选举机制,FailoverController通过RPC让NameNode转换为Active或Standby。

HDFS HA通常由两个NameNode组成,一个处于Active状态,另一个处于Standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步Active NameNode的状态,以便能够在它失败时快速进行切换。

Hadoop 2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode,这里还配置了一个Zookeeper集群,用于ZKFC故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为Active状态。

YARN的ResourceManager也存在单点故障问题,这个问题在hadoop-2.4.1得到了解决:有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调。

YARN框架下的MapReduce可以开启JobHistoryServer来记录历史任务信息,否则只能查看当前正在执行的任务信息。

Zookeeper的作用是负责HDFS中NameNode主备节点的选举,和YARN框架下ResourceManaer主备节点的选举。

6、如何搭建高可用(HA)的HDFS?

centos搭建步骤:

搭建zk集群,搭建HA:

HDFS HA配置要素

NameNode机器:两台配置对等的物理机器,它们分别运行Active和Standby Node。

JouralNode机器:运行JouralNodes的机器。JouralNode守护进程相当的轻量级,可以和Hadoop的其他进程部署在一起,比如NameNode、DataNode、ResourceManager等,至少需要3个且为奇数,如果你运行了N个JNS,那么它可以允许(N-1)/2个JNS进程失效并且不影响工作。

在HA集群中,Standby NameNode还会对namespace进行checkpoint操作(继承Backup Namenode的特性),因此不需要在HA集群中运行SecondaryNameNode、CheckpointNode或者BackupNode。

HDFS HA配置参数

需要在hdfs.xml中配置如下参数:

dfs.nameservices:HDFS NN的逻辑名称,例如myhdfs。

dfs.ha.namenodes.myhdfs:给定服务逻辑名称myhdfs的节点列表,如nn1、nn2。

dfs.namenode.rpc-address.myhdfs.nn1:myhdfs中nn1对外服务的RPC地址。

dfs.namenode.http-address.myhdfs.nn1:myhdfs中nn1对外服务http地址。

dfs.namenode.shared.edits.dir:JournalNode的服务地址。

dfs.journalnode.edits.dir:JournalNode在本地磁盘存放数据的位置。

dfs.ha.automatic-failover.enabled:是否开启NameNode失败自动切换。

dfs.ha.fencing.methods :配置隔离机制,通常为sshfence。

HDFS自动故障转移

HDFS的自动故障转移主要由Zookeeper和ZKFC两个组件组成。

Zookeeper集群作用主要有:一是故障监控。每个NameNode将会和Zookeeper建立一个持久session,如果NameNode失效,那么此session将会过期失效,此后Zookeeper将会通知另一个Namenode,然后触发Failover;二是NameNode选举。ZooKeeper提供了简单的机制来实现Acitve Node选举,如果当前Active失效,Standby将会获取一个特定的排他锁,那么获取锁的Node接下来将会成为Active。

ZKFC是一个Zookeeper的客户端,它主要用来监测和管理NameNodes的状态,每个NameNode机器上都会运行一个ZKFC程序,它的职责主要有:一是健康监控。ZKFC间歇性的ping NameNode,得到NameNode返回状态,如果NameNode失效或者不健康,那么ZKFS将会标记其为不健康;二是Zookeeper会话管理。当本地NaneNode运行良好时,ZKFC将会持有一个Zookeeper session,如果本地NameNode为Active,它同时也持有一个“排他锁”znode,如果session过期,那么次lock所对应的znode也将被删除;三是选举。当集群中其中一个NameNode宕机,Zookeeper会自动将另一个激活。

HA集群启动:

首先启动zk集群,zkServer.sh start

启动hadoop集群:  start-hdfs.sh

7.实验结果:

访问主NN的地址:node1:50070

访问备机:node5:50070

一个显示active 一个显示standby

当一个kill进程主机后,另外standby切换成active

说明:配置下各个节点的名称: 在etc下的hosts文件中添加ip 和节点名。

hadoop学习之HDFS的更多相关文章

  1. hadoop学习(五)----HDFS的java操作

    前面我们基本学习了HDFS的原理,hadoop环境的搭建,下面开始正式的实践,语言以java为主.这一节来看一下HDFS的java操作. 1 环境准备 上一篇说了windows下搭建hadoop环境, ...

  2. Hadoop学习笔记-HDFS命令

    进入 $HADOOP/bin 一.文件操作 文件操作 类似于正常的linux操作前面加上“hdfs dfs -” 前缀也可以写成hadoop而不用hdfs,但终端中显示 Use of this scr ...

  3. Hadoop学习笔记---HDFS

    Hadoop分布式文件系统(HDFS)被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统.HDFS是一个高度容错性的系统,适合部署在廉价的机器上.HDFS能提供高吞吐 ...

  4. Hadoop学习笔记—HDFS

    目录 搭建安装 三个核心组件 安装 配置环境变量 配置各上述三组件守护进程的相关属性 启停 监控和性能 Hadoop Rack Awareness yarn的NodeManagers监控 命令 hdf ...

  5. hadoop学习(二)----HDFS简介及原理

    前面简单介绍了hadoop生态圈,大致了解hadoop是什么.能做什么.带着这些目的我们深入的去学习他.今天一起看一下hadoop的基石--文件存储.因为hadoop是运行与集群之上,处于分布式环境之 ...

  6. 【Hadoop学习】HDFS中的集中化缓存管理

    Hadoop版本:2.6.0 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4146398.html 概述 ...

  7. 【Hadoop学习】HDFS 短路本地读

    Hadoop版本:2.6.0 本文系从官方文档翻译而来,转载请尊重译者的工作,注明以下链接: http://www.cnblogs.com/zhangningbo/p/4146296.html 背景 ...

  8. hadoop学习之hdfs文件系统

    一.hdfs的概念 Hadoop 实现了一个分布式文件系统(Hadoop Distributed File System),简称HDFS. Hadoop是Apache Lucene创始人Doug Cu ...

  9. Hadoop 学习之——HDFS

    HDFS是HADOOP中的核心技术之一——分布式文件存储系统.Hadoop的作者Doug Cutting 和Mike 是根据Google发布关于GFS 的研究报告所设计出的分布式文件存储系统. 一.H ...

  10. hadoop学习记录--hdfs文件上传过程源码解析

    本节并不大算为大家讲接什么是hadoop,或者hadoop的基础知识因为这些知识在网上有很多详细的介绍,在这里想说的是关于hdfs的相关内容.或许大家都知道hdfs是hadoop底层存储模块,专门用于 ...

随机推荐

  1. list推导式,dict推导式,set推导式

    生成一个1-14的列表 1.1 普通for循环 # lst = [] # for i in range(1,15): # lst.append(i) # print(lst) # # 结果: # [1 ...

  2. 在CentOS VPS上通过SSH安装 MySQL

    输入 yum install mysql-server 按Y继续 安装完成,设置开机启动Mysql,输入 chkconfig --levels 235 mysqld on 然后启动tomcat,输入s ...

  3. C语言进阶——循环语句07

    循环语句的基本工作方式: 通过条件表达式判定是否执行循环体 条件表达式遵循if语句表达式的原则 do,while,for的区别: do语句先执行后判断,循环体至少执行一次 while语句先判断后执行, ...

  4. 大数据江湖之即席查询与分析(下篇)--手把手教你搭建即席查询与分析Demo

    上篇小弟分享了几个“即席查询与分析”的典型案例,引起了不少共鸣,好多小伙伴迫不及待地追问我们:说好的“手把手教你搭建即席查询与分析Demo”啥时候能出?说到就得做到,差啥不能差人品,本篇只分享技术干货 ...

  5. 9.5web service基础知识

    Web服务基础 用户访问网站的基本流程 我们每天都会用web客户端上网,浏览器就是一个web客户端,例如谷歌浏览器,以及火狐浏览器等. 当我们输入www.oldboyedu.com/时候,很快就能看到 ...

  6. 质数,$\varphi$和$\mu$线性筛

    typedef long long ll; bool check[N]; int mu[N],pri[N],tot; ll phi[N]; void init(int lim){ check[]=,p ...

  7. 一步一步学Linq to sql(一):预备知识

    什么是Linq to sql Linq to sql(或者叫DLINQ)是LINQ(.NET语言集成查询)的一部分,全称基于关系数据的 .NET 语言集成查询,用于以对象形式管理关系数据,并提供了丰富 ...

  8. MyEclipse - 问题集 - Workspace in use or cannot be created, choose a different one(转)

    转:http://wsfly.iteye.com/blog/1044986 eclipse 使用一段时间后,有时会因为一些故障自己就莫名奇妙的关闭了,再打开时有时没有问题,有时有会提示错误 Works ...

  9. 基于mysqldump备份集来恢复某个误操作的表(drop,truncate)

      Preface       How to rescue a dropped or truncated table online?Dropping or truncating is ddl oper ...

  10. Java基础-7数组

    一).什么是数组: 数组是一组具有相同类型和名称的变量集合,把一系列相同类型的数据保存在一起,这些变量称为数组的元素:每个元素都有一个编号,这个编号叫做下标,下标从 0 开始:元素的个数被称为数组的长 ...