BD01_Hadoop简介及搭建

一、简史

1、Hadoop主要为了解决两个问题

  • 海量数据存储   HDFS 
  • 海量数据运算   MapReduce

2、hadoop的起源

起源于一个开源的项目nutch,

Hadoop源于谷歌的三篇论文:

  • GFS(google  fileSystem),
  • BigTable(key,value对的非关系型数据库)
  • MapReduce(分布式计算框架)   

狭义的Hadoop:

  • HDFS+MapReduce

广义的Hadoop:

  • 指代一个大数据软件的生态圈,包括各种周边的其他框架(Hive,HBase,Spark....)

3、三大主流公司

hadoop的发行版本:主要从0.x到1.x到2.x这三个主流的版本

  • apache开源版本:commiter 
    • 优点:版本更新迭代比较快,所有的软件都有对应的迭代
    • 缺点:版本的升级,兼容,维护等都比较麻烦
    • 实际生产环境当中,尽量不要使用apache的版本
  •  免费开源版本hortonworks:软件的安装,升级等都做了
  • 服务收费版本cloudera:软件有收费版,也有免费版
  • MapR:大数据软件厂商

4、hadoop的架构模型

1.x的版本架构模型介绍

文件系统核心模块:

  • NameNode:集群当中的主节点,主要用于管理集群当中的各种数据(主要维护元数据信息,元数据信息就是表述数据的数据)
  • secondaryNameNode:主要能用于hadoop当中元数据信息的辅助管理
  • DataNode:集群当中的从节点,主要用于存储集群当中的各种数据

数据计算核心模块:

  • JobTracker:接收用户的计算请求任务,并分配任务给从节点
  • TaskTracker:负责执行主节点JobTracker分配的任务

1.x当中,主节点 namenode jobtracker都存在单节点故障问题

2.x的版本架构模型介绍

第一种:NameNode与ResourceManager单节点架构模型

第二种:NameNode单节点与ResourceManager高可用架构模型

第三种:NameNode高可用与ResourceManager单节点架构模型

第四种:NameNode与ResourceManager高可用架构模型

文件系统核心模块:

  • NameNode:集群当中的主节点,主要用于管理集群当中的各种数据,一般都是使用两个,实现HA高可用
  • DataNode:从节点,用于数据的存储
  • secondaryNameNode:主要负责瞄着active什么时候死了,赶紧上位 两个namenode组成主备的架构
  • 如果namenode高可用:就没有secondaryNamenode了,取而代之的是journalNode:主要用于同步元数据信息,保证两个namenode的元数据信息是一致的
  • nameNode active状态:主要负责用户的写请求
  • namenode高可用的自动切换,主要是通过两个守护进程zkfc来实现的

数据计算核心模块:

  • ResourceManager:Yarn平台的主节点,主要用于接收各种任务,通过两个,构建成高可用
  • NodeManager:Yarn平台的从节点,主要用于处理ResourceManager分配的任务

二 、拓展

1、FastLeaderElection是zookeeper默认提供的选举算法

选举流程

目前有5台服务器,每台服务器均没有数据,它们的编号分别是1,2,3,4,5,按编号依次启动,它们的选择举过程如下:

  • 1. 服务器1启动,给自己投票,然后发投票信息,由于其它机器还没有启动所以它收不到反馈信息,服务器1的状态一直属于Looking。
  • 2. 服务器2启动,给自己投票,同时与之前启动的服务器1交换结果,由于服务器2的编号大所以服务器2胜出,但此时投票数没有大于半数,所以两个服务器的状态依然是LOOKING。
  • 3. 服务器3启动,给自己投票,同时与之前启动的服务器1,2交换信息,由于服务器3的编号最大所以服务器3胜出,此时投票数正好大于半数,所以服务器3成为leader,服务器1,2成为follower。
  • 4. 服务器4启动,给自己投票,同时与之前启动的服务器1,2,3交换信息,尽管服务器4的编号大,但之前服务器3已经胜出,所以服务器4只能成为follower。
  • 5. 服务器5启动,后面的逻辑同服务器4成为follower。

2、zookeeper四种类型的znode

1、PERSISTENT-持久化目录节点

客户端与zookeeper断开连接后,该节点依旧存在

2、PERSISTENT_SEQUENTIAL-持久化顺序编号目录节点

客户端与zookeeper断开连接后,该节点依旧存在,只是Zookeeper给该节点名称进行顺序编号

3、EPHEMERAL-临时目录节点

客户端与zookeeper断开连接后,该节点被删除

4、EPHEMERAL_SEQUENTIAL-临时顺序编号目录节点

客户端与zookeeper断开连接后,该节点被删除,只是Zookeeper给该节点名称进行顺序编号

3、Zookeeper对节点的watch监听通知是永久的吗?

不是。官方声明:一个Watch事件是一个一次性的触发器,当被设置了Watch的数据发生了改变的时候,则服务器将这个改变发送给设置了Watch的客户端,以便通知它们。

为什么不是永久的,举个例子,如果服务端变动频繁,而监听的客户端很多情况下,每次变动都要通知到所有的客户端,这太消耗性能了。

4、集群如果有3台机器,挂掉一台集群还能工作吗?挂掉两台呢

过半存活即可用。

5、集群支持动态添加机器吗

其实就是水平扩容了,Zookeeper在这方面不太好。

两种方式:

全部重启:关闭所有Zookeeper服务,修改配置之后启动。不影响之前客户端的会话。

逐个重启:在重启的过程中,需要保证一台机器重启完成后,再进行下一台机器的重启。这样就整个集群中每个时刻只有一台机器不能正常工作,而集群中有过半的机器是正常工作的,那么整个集群对外就是可用的。所以这个时候不会出现错误,也不会出现停止服务,整个扩容过程对用户是无感知的。

三、环境搭建

apache软件下载地址:

http://archive.apache.org/dist/

cdh所有软件下载地址:

http://archive.cloudera.com/cdh5/cdh/5/

分布式环境搭建(适用于工作当中正式环境搭建)

使用完全分布式,实现namenode高可用,ResourceManager的高可用

192.168.1.100

192.168.1.110

192.168.1.120

zookeeper

zk

zk

zk

HDFS

JournalNode

JournalNode

JournalNode

NameNode

NameNode

ZKFC

ZKFC

DataNode

DataNode

DataNode

YARN

ResourceManager

ResourceManager

NodeManager

NodeManager

NodeManager

MapReduce

JobHistoryServer

hadoop安装包结构

hadoop-2.7.5/bin:一些shell脚本,供我们使用
hadoop-2.7.5/sbin:一些shell脚本,供我们使用
hadoop-2.7.5/etc/hadoop:所有的配置文件的路径
hadoop-2.7.5/lib/native:本地的C程序库

检测hadoop的本地程序库

bin/hadoop checknative

hadoop: true 本地库,支持我们使用C程序来访问hadoop
zlib: true 压缩库
snappy: false 压缩库 谷歌出品的一种压缩算法,谷歌出品,必属精品
lz4: true 压缩库
bzip2: false 压缩库

hadoop 六个核心配置文件的作用:

core-site.xml:核心配置文件,主要定义了我们文件访问的格式 hdfs://
hadoop-env.sh:主要配置我们的java路径
hdfs-site.xml:主要定义配置我们的hdfs的相关配置
mapred-site.xml 主要定义我们的mapreduce相关的一些配置
slaves:控制我们的从节点在哪里 datanode nodemanager在哪些机器上
yarn-site.xml:配置我们的resourcemanager资源调度

安装包解压

修改配置文件

启动集群

发布了18 篇原创文章 · 获赞 19 · 访问量 5349

猜你喜欢

转载自blog.csdn.net/weixin_44586883/article/details/100888711
BD