hadoop

hadoop简介

Hadoop起源于Google的三大论文:

GFS:Google的分布式文件系统Google File System

MapReduce:Google的MapReduce开源分布式并行计算框架

BigTable:一个大型的分布式数据库

演变关系:

GFS—->HDFS

Google MapReduce—->Hadoop MapReduce

BigTable—->HBase

hadoop主流版本:

Apache基金会hadoop

Cloudera版本(Cloudera’s Distribution Including Apache Hadoop,简称“CDH”)

Hortonworks版本(Hortonworks Data Platform,简称“HDP”)

Apache基金会hadoop官网:

Apache Hadoophttps://hadoop.apache.org/Hadoop的框架最核心的设计组成:HDFS和MapReduce;HDFS为海量的数据提供了存储、MapReduce为海量的数据提供了计算

Hadoop框架包括以下四个模块:

Hadoop Common:这些是其他Hadoop模块所需的Java库和实用程序,这些库提供文件系统和操作系统级抽象,并包含启动Hadoop所需的Java文件和脚本

Hadoop YARN:一个用于作业调度和集群资源管理的框架

Hadoop Distributed File System (HDFS):分布式文件系统,提供对应用程序数据的高吞吐量访问

Hadoop MapReduce:基于YARN的用于并行处理大数据集的系统

hadoop应用场景:

在线旅游、移动数据、电子商务、能源开采与节能、基础架构管理、图像处理、诈骗检测、IT安全、医疗保健

hadoop集群搭建

本地(单点)模式

本地模式是最简单的模式,所有模块都运行于一个JVM进程中,使用的是本地文件系统,而不是HDFS;本地模式主要用于本地开发过程中的运行调试,部署好hadoop架构后不用进行任何设置,默认就是本地模式

##下载软件包并解压,创建普通用户hadoop,使用此用户搭建单点模式hadoop集群

##在hadoop环境变量脚本文件中声明java环境和hadoop环境

##测试hadoop是否正常运行

##bin/hadoop运行计算jar文件,过滤input目录中文件内容符合后接正则表达式的内容并将输出存放至output目录中

伪分布式模式

伪分布式模式是指Hadoop运行在一台主机上,运行多个java进程,模仿完全分布式模式的结构;此模式的特点有:有完全分布式模式的全部功能、只有一个节点主机,此模式也是常用于调试程序

##配置hadoop的核心配置文件指定hdfs的默认文件系统路径;配置分布式文件系统的副本数

##配置java命令工具的环境变量

##配置hadoop用户于localhost的ssh免密登陆

##格式化hdfs文件系统

##启动分布式文件系统

##浏览器访问namenode的web界面

##创建分布是文件系统的根目录并上传input目录

##上传文件

##进行计算测试,测试的输出被写入到hdfs文件系统,而非本地

##下载文件系统的文件到本地

##假设误删除了本地的文件,hdfs文件系统还有备份呢

##客户端通过命令行方式删除文件系统中的文件,而无法通过web界面删除

完全分布式模式

完全分布式模式也称做集群模式,此种模式下对集群物理机器节点进行规划,使得hadoop各个模块分别部署在不同的物理节点上;其特点有:将Hadoop运行在多台主机中,各主机按照相关配置运行相应的Hadoop守护进程、真正的分布式环境;此模式即常用于实际生产环境

环境准备:

##停掉伪分布式模式下的分布式文件系统,删除namenode初始化时在/tmp下生成的文件以便后续重新初始化

##新增datanode节点配置

##配置namenode节点于datanode节点免密登陆(因nfs网络文件系统原因已经为免密状态)

hdfs集群部署(1NN+2DN)

##namenode配置

##namenode格式化hdfs文件系统

##在namenode启动hdfs文件系统,查看java进程信息

##上传本地文件至hdfs文件系统

##datanode节点的文件存储位置

##计算测试,输出写至hdfs文件系统

##数据节点的文件存储位置

集群数据节点的扩容:

##so easy~但别忘了namenode节点和新增datanode节点的ssh免密哦

----------

HDFS文件系统的一些特性

HDFS属于Master与Slave结构,一个集群中只有一个NameNode,可以有多个DataNode

HDFS存储机制保存了多个副本,当写入1T文件时,我们需要3T的存储,3T的网络流量带宽;系统提供容错机制,副本丢失或宕机可自动恢复,保证系统高可用性

HDFS默认会将文件分割成block,然后将block按键值对存储在HDFS上,并将键值对的映射存到内存中,如果小文件太多,会导致内存的负担很重

HDFS采用的是一次写入多次读取的文件访问模型,一个文件经过创建、写入和关闭之后就不需要改变;这一假设简化了数据一致性问题,并且使高吞吐量的数据访问成为可能

HDFS存储理念是以最少的钱买最烂的机器并实现最安全、难度高的分布式文件系统(高容错性低成本),HDFS认为机器故障是种常态,所以在设计时充分考虑到单个机器故障,单个磁盘故障,单个文件丢失等情况

HDFS容错机制:

节点失败监测机制:DN每隔3秒向NN发送心跳信号,10分钟收不到,认为DN宕机

通信故障监测机制:只要发送了数据,接收方就会返回确认码

数据错误监测机制:在传输数据时,同时会发送总和校验码

Hadoop HDFS读写工作原理漫画详见:

一篇漫画让你理解 Hadoop HDFS 读写工作原理_Soul Joy Hub-CSDN博客一篇漫画让你了解Hadoop HDFS!https://blog.csdn.net/u011239443/article/details/51751462----------

hadoop集群资源管理架构yarn

Yarn是Hadoop集群的资源管理系统,是Hadoop2.x后的一个新的特性;其将MapReduce job的调度管理中的ResourceManagement(资源管理)和JobScheduling/JobMonitoring(任务调度监控)分离开来

在Yarn中把job的概念换成了application,因为在新的Hadoop2.x中,运行的应用不只是MapReduce,还有可能是其它应用;Yarn的另一个目标就是拓展Hadoop,使得它不仅仅可以支持MapReduce计算,还能很方便的管理诸如Hive、Hbase、Pig、Spark/Shark等应用;这种新的架构设计能够使得各种类型的应用运行在Hadoop上面,并通过Yarn从系统层面进行统一的管理,也就是说,有了Yarn,各种应用就可以互不干扰的运行在同一个Hadoop系统中,共享整个集群资源

Yarn的组件及架构

Yarn主要由以下几个组件组成:

yarn组件详解见:Hadoop Yarn详解_weixin_34037977的博客-CSDN博客

部署yarn

##在集群namenode节点配置yarn并启动,启动后namenode节点会运行一个resourcemanager的进程,而datanode会各自运行一个nodemanaget进程

hadoop高可用集群

hadoop集群结合Zookeeper分布式管理协作框架实现hadoop集群的高可用性

Zookeeper介绍:

Zookeeper是一个分布式服务框架,是Apache Hadoop 的一个子项目,它主要是用来解决分布式应用中经常遇到的一些数据管理问题,如:统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等;简单来说zookeeper=文件系统+监听通知机制

Zookeeper保证hadoop集群高可用的原理:

hadoop集群中配置有两个namenode节点,此两个节点会定期发送心跳以告诉zookeeper其是alive状态,但此两个namenode在hadoop集群中的服务状态不同,一个是active、一个是standby;一旦active的namenode节点宕机后,zookeeper未检测到其定期发送的心跳action,就会将standby状态的namenode状态设置为active,使其上位,提供服务;这种方式保证了hadoop集群中始终保有一个可用的namenode,从而实现了hadoop集群的高可用性

Zookeeper的选举机制:

zookeeper集群也能保证自身的高可用,解决单点故障隐患;zookeeper集群中的各个节点分为Leader和Follower两个角色,写入数据时先写入Leader节点,Leader同一写入后再通知Follower节点写入,客户端读取数据时可以从任意节点上获取到,因为它们上的数据都是一样的;zookeeper集群中的Leader节点是选举出来的,当集群中任何一台机器发现没有Leader节点时,会推荐自己成为Leader,其他节点会对这一推荐进行投票,当超过半数的节点同意这一推荐时,其正式上位为Leader节点,从而保证了zookeeper集群的高可用,所以zookeeper节点数必须是奇数,选举的目的也是为了保证集群中的数据一致性

Zookeeper官网:

Apache ZooKeeperhttps://zookeeper.apache.org/部署环境准备:

##重置hadoop集群

##server5作为hadoop集群standby状态的namenode

部署zookeeper集群

##server1主机通过nfs共享zookeeper文件

##部署zookeeper集群并启动,查看节点状态

hadoop高可用集群部署

##配置hdfs

##在hadoop集群的DN节点上依次启动journalnode(第一次启动hdfs必须先启动journalnode)

##格式化server1节点的namenode

##配置两个namenode节点的ssh免密登陆;同步server1-namenode的格式化数据至server5节点

##格式化zookeeper

##启动hdfs集群

##浏览器访问web界面

至此,我们的hadoop高可用集群就搭建好了;接下来进行高可用测试

##在zookeeper客户端查看hadoop高可用的active节点,显示在server1主机

##往hdfs导入数据

##active节点可以查看到数据而standby节点则不行

##杀掉server1主机的namenode进程模拟server1主机宕机,原standby状态的server5节点现在切换为active状态并能够访问到存储的数据

##此时在zookeeper客户端查看hadoop高可用的active节点,显示在server5主机

##重新启动server1节点namenode后server1主机则变为standby状态

hadoop高可用集群中的yarn高可用部署:

##在server1主机上配置并启动yarn

##server5也启动了resourcemanager的进程(可能需要手动启动,可用命令:sbin/yarn-daemon.sh start resourcemanager)

##在zookeeper客户端查看yarn高可用的active节点,显示在rm1即server1主机

##查看hadoop集群的yarn管理web界面;server1节点为active状态,server5节点为standby状态

至此,我们的hadoop高可用集群中的yarn高可用就搭建好了;接下来进行高可用测试

##停掉active节点的resourcemanager进程

##zookeeper显示yarn的active节点在rm2即server5主机

##server5主机的yarn管理界面也显示resourcemanager为active状态

##重启server1节点的resourcemanager进程

##其变为standby状态

Hbase分布式部署

HBase是一种构建在HDFS之上的开源的、面向列的非关系型分布式数据库,目前是Hadoop体系中非常关键的一部分;在需要实时读写、随机访问超大规模数据集时,可以使用HBase

HBase是Google Bigtable的开源实现,与Google Bigtable利用GFS作为其文件存储系统,类似地,HBase利用Hadoop HDFS作为其文件存储系统;Google运行MapReduce来处理Bigtable中的海量数据,HBase同样利用Hadoop MapReduce来处理HBase中的海量数据;Google Bigtable利用Chubby作为协同服务, HBase利用Zookeeper作为对应

与Hadoop一样,HBase目标主要依靠横向扩展,通过不断增加廉价的商用服务器,来增加计算和存储能力;所以HBase是一个通过大量廉价机器解决海量数据的高速存储和读取的分布式数据库解决方案

HBase的特点

大:一个表可以有上亿行,上百万列

面向列:面向列表(族)的存储和权限控制,列(族)独立检索

稀疏:对于为空(NULL)的列,并不占用存储空间,因此表可以设计的非常稀疏

无模式:每一行都有一个可以排序的主键和任意多的列,列可以根据需要动态增加,同一张表中不同的行可以有截然不同的列

数据多版本:每个单元中的数据可以有多个版本,默认情况下,版本号自动分配,版本号就是单元格插入时的时间戳

数据类型单一:HBase中的数据都是字符串,没有类型

HBase的高并发和实时处理数据

Hadoop是一个高容错、高延时的分布式文件系统和高并发的批处理系统,不适用于提供实时计算;HBase是可以提供实时计算的分布式数据库,数据被保存在HDFS分布式文件系统上,由HDFS保证其高容错性,但是再生产环境中,HBase是如何基于hadoop提供实时性呢?HBase上的数据是以StoreFile(HFile)二进制流的形式存储在HDFS上block中,但是HDFS并不知道的hbase存的是什么,它只把存储文件视为二进制文件,也就是说,hbase的存储数据对于HDFS文件系统是透明的

HBase部署:

##配置hbase

##主启动hbase

##备节点启动hbase

##访问hbase的web界面

##region server的hbaseweb页面

至此我们的高可用hbase就搭建完成了,接下来进行测试:

##往hbase中添加数据

##查看数据

##停掉server1节点的HMaster进程

##在zookeeper查看hbase的active节点,显示在server5主机

##访问server5主机的hbase的web页面,其已经上位为master,此时也没有backup节点

##数据依然能访问到

##重启server1节点的hmaster进程

##server1主机重新加入并作为backup节点

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值