hadoop基础整理

1、大数据概念

主要解决海量数据的存储和数据分析计算的问题java

8bite =1 Byte,1k=1024Byte,node

Bite Byte KB MB,GB,TB,PB,EB,ZB,YB,BB,NB,DBmysql

  • 大数据特色:

Volume 大量 (部分企业数据量达EB)sql

Velocity 高速(数据处理效率要高)shell

Variety 多样。(结构化+非结构化)数据库

value 低价值密度apache

2、从hadoop框架讨论大数据生态

  • Hadoop
    hadoop的初衷是采用大量的廉价机器,组成一个集群!完成大数据的存储和计算!

1 hadoop 1.x和2.x区别

1.x和2.x的区别是将资源调度和管理进行分离!由统一的资源调度平台YARN进行大数据计算资源的调度!
提高了Hadoop的通用性!Hadoop搭建的集群中的计算资源,不只能够运行Hadoop中的MR程序!也能够运行其余计算框架的程序!编程

在hadoop不久以后,因为MR的低效性,出现了许多更为高效的计算框架!
例如: Tez,Storm,Spark,Flinktomcat

完成大数据的计算
①写程序,程序须要复合计算框架的要求!安全

java---->main----->运行
    MapReduce(编程模型)----->Map--Reducer

②运行程序,申请计算资源(cpu+内存,磁盘IO,网络IO)

java----->JVM------>OS----->申请计算资源
    1.0: MapReduce(编程模型)---->JobTracker----->JVM----->申请计算资源
    2.0: MapReduce(编程模型)---->jar------>运行时,将jar包中的任务,提交给YARN,和YARN进行通讯
            由YARN中的组件-----JVM------>申请计算资源

2 hadoop的组件

HDFS(框架):负责大数据的存储
YARN(框架): 负责大数据的资源调度

MR(编程模型): 使用Hadoop制定的编程要求,编写程序,完成大数据的计算!

2.1 HDFS:负责大数据的存储
  • Namenode(1个):

    • 负责文件,名称等元数据(属性信息)的存储!
      文件名,大小,文件切分了多少块(block),建立和修改时间等!
    • 职责:接受客户端的请求;接受DN的请求 ;向DN分配任务
  • DataNode(N个)

    • 负责文件中数据的存储!
    • 负责接受NM分配的任务;负责数据块(block)的管理(读,写)!
  • 可选进程:SecondaryNamenode(N个): 负责辅助NameNode工做!
2.2 MapReduce

MapReduce(编程规范): 程序中有Mapper(简单处理)和Reducer(合并)

遵循MapReduce的编程规范,编写的程序,打包后,称为一个Job(任务)!

Job须要提交到YARN上,向YARN申请计算资源,运行Job中的Task(进程)!

Job会先建立一个进程MRAppMaster(mapreduce 应用管理者),由MRAppMaster向YARN申请资源!
MRAppMaster负责监控Job中各个Task运行状况,进行容错管理!

2.3 Yarn:负责集群中全部计算资源的管理和调度!
  • ResourceManager(1个): 负责整个集群全部资源的管理!

    • 负责接受客户端的提交Job的请求!
    • 负责向NM分配任务!
    • 负责接受NM上报的信息!
  • NodeManager(N个): 负责单台计算机全部资源的管理!

    • 负责和RM进行通讯,上报本机中的可用资源!
    • 负责领取RM分配的任务!
    • 负责为Job中的每一个Task分配计算资源!
  • Container(容器): 对任务运行环境的抽象

    • NodeManager为Job的某个Task分配了2个CPU和2G内存的计算资源!
      ,避免被其余的task抢占资源!
    • 将计算资源,封装到一个Container中,在Container中的资源,会被暂时隔离
    • 当前Task运行结束后,当前Container中的资源会被释放!容许其余task来使用
  • ApplicationMaster :数据切分,为应用程序申请资源,并分配给内部任务,任务监控与容错

3、Hadoop 的运行环境搭建

一、重要目录

(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操做的脚本

(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件

(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)

(4)sbin目录:存放启动或中止Hadoop相关服务的脚本

(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例

二、配置文件

(1)4个默认的配置文件:

位置:  HADOOP_HOME/share/xxxx.jar/xxx-default.xml

​ 文件名:core-default.xml: 设置hadoop最核心的参数!
​ hdfs-default.xml 保存的是hdfs相关的参数!

​ mapred-default.xml: MR程序在运行时,须要使用的参数!

​ yarn-default.xml: yarn在启动时,须要的参数!

(2)4个可自定义的配置文件:xxx-site.xml

​ core-site.xml: 用户自定义的设置hadoop最核心的参数!
​ hdfs-site.xml 用户自定义的保存的是hdfs相关的参数!

​ mapred-site.xml: 用户自定义的MR程序在运行时,须要使用的参数!
​ yarn-site.xml: 用户自定义的yarn在启动时,须要的参数!

(3) tips

能够自定义配置文件的目录: hadoop --config 配置文件的目录
若是没有配置,默认读取 HADOOP_HOME/etc/hadoop 中对应的配置文件!

Hadoop在启动时,先加载4个默认的配置文件,再加载用户自定义的配置文件,若是用户自定义的配置文件中有和4个默认配置文件中门的参数,能够覆盖以前已经加载的值!

​ hadoop-daemon.sh start namenode脚本在执行时,只会去默认的目录中读取配置文件!

三、hadoop的运行模式:本地模式、伪分布式模式以及彻底分布式模式

(1) 本地模式:在本机上使用hdfs,使用的就是本地的文件系统

​ 设置方法:

core-site.xmlfs.defaultFS=file:/// (默认,不用修改)

(2)伪分布式:NN和DN在一台机器,且只有一个DN节点

​ 设置方法:

  1. 配置集群

    指定HDFS中namenode的地址,core-site.xmlfs.defaultFS=hdfs://hadoop101:9000

    配置hdfs-site.xml指定HDFS副本的数量dfs.replication

  2. 启动集群

    格式化nameNode ,bin/hdfs namenode -format,启动namenode,datanode

    启动NN: hadoop-daemon.sh start namenode

    中止NN:  hadoop-daemon.sh stop namenode
                启动DN:  hadoop-daemon.sh start datanode
                中止DN:  hadoop-daemon.sh stop datanode
                使用:  hadoop fs  命令  文件路径
  3. 查看集群jps

    jps是JDK中的命令,不是Linux命令。不安装JDK不能使用jps

  4. Yarn上运行mapreduce程序

    完成大数据的计算!

    ①按照MR的规范编写一个程序
         ②将程序打包为jar
         ③运行jar中的程序

    两种运行模式:
    取决于参数: mapreduce.framework.name=local(默认)
    ①本地模式(在本机上运行MR) mapreduce.framework.name=local

    在本机运行MR!在本机使用多线程的方式,运行多个Task!

    ②在YARN上运行 mapreduce.framework.name=yarn

    将MR提交给YARN,由YARN将Job中的多个task分配到多台机器中,启动container运行task!
             须要启动YARN,YARN由RM和NM进程组成!

(3) 彻底分布式

准备3台客户机 P0501&wo

4、HDFS(hadoop distributed file system)分布式文件系统

1. hfs 不支持对文件的随机读写,能够追加,但不能修改

​ 缘由:文件在HDFS上存储时,以block为基本单位存储的

​ a. 没有提供对文件的在线寻址功能

​ b. 文件以块形式存储,修改了一个块中的内容,就会影响当前块以后的全部块,效率低

2. HDFS 不适合存小文件

缘由: HDFS存储了大量的小文件,会下降NN的服务能力

NN负责文件元数据(属性,块的映射)的管理,NN在运行时,必须将当前集群中存储的全部文件的元数据所有加载到内存,NN须要大量的内存

4. 同一个文件在同一时刻只能有一个客户端写入

5. 块大小,取决于dfs.blocksize ,2.x 默认为128M,1.x 默认为64M

缘由: 基于最佳传输损耗理论(在一次传输中,寻址时间占用总传输时间的1%时,本次传输的损耗最小,为最佳性价比传输)

不论对磁盘的文件进行读仍是写,都须要先进行寻址

目前硬件的发展条件,普通磁盘写的速率大概为100M/s,寻址时间通常为10ms

块在传输时,每64k还须要校验一次,所以块大小,必须为2的n次方

6. 块大小须要合适调节

不能太大,a. 在一些分块读取的场景,不够灵活,会带来额外的网络消耗;b.在上传文件时,一旦发生故障,会形成资源的浪费。

不能过小,a. 块过小,一样大小的文件,会占用过多的NN的元数据空间;b. 块过小,在进行读写操做时,会消耗额外的寻址空间

7 副本数的概念指的是最大副本数

默认块大小128M,指的是块的最大大小。每一个块最多存128M,若是当前块存储的数据不满128M,存了多少数据,就占用多少磁盘空间,一个块只属于一个文件。

8 shell操做

hadoop fs 既能够对本地文件系统进行操做还能够操做分布式文件系统

hdfs dfs 只能操做分布式文件系统

hadoop fs -help +命令,可查帮助文档

9 HDFS的写数据流程

①服务端启动HDFS中的NN和DN进程
②客户端建立一个分布式文件系统客户端,由客户端向NN发送请求,请求上传文件
③NN处理请求,检查客户端是否有权限上传,路径是否合法等
④检查经过,NN响应客户端能够上传
⑤客户端根据本身设置的块大小,开始上传第一个块,默认0-128M,
NN根据客户端上传文件的副本数(默认为3),根据机架感知策略选取指定数量的DN节点返回
⑥客户端根据返回的DN节点,请求创建传输通道

客户端向最近(网络举例最近)的DN节点发起通道创建请求,由这个DN节点依次向通道中的(距离当前DN距离最近)
下一个节点发送创建通道请求,各个节点发送响应 ,通道创建成功

⑦客户端每读取64K的数据,封装为一个packet(数据包,传输的基本单位),将packet发送到通道的下一个节点

通道中的节点收到packet以后,落盘(检验)存储,将packet发送到通道的下一个节点!
每一个节点在收到packet后,向客户端发送ack确认消息!

⑧一个块的数据传输完成以后,通道关闭,DN向NN上报消息,已经收到某个块
⑨第一个块传输完成,第二块开始传输,依次重复⑤-⑧,直到最后一个块传输完成,NN向客户端响应传输完成!

客户端关闭输出流

10 异常写流程

①-⑥见上
⑦客户端每读取64K的数据,封装为一个packet,封装成功的packet,放入到一个队列中,这个队列称为dataQuene(待发送数据包)
在发送时,先将dataQuene中的packet按顺序发送,发送后再放入到ackquene(正在发送的队列)。
每一个节点在收到packet后,向客户端发送ack确认消息!
若是一个packet在发送后,已经收到了全部DN返回的ack确认消息,这个packet会在ackquene中删除!
假如一个packet在发送后,在收到DN返回的ack确认消息时超时,传输停止,ackquene中的packet会回滚到
dataQuene。

从新创建通道,剔除坏的DN节点。创建完成以后,继续传输!
只要有一个DN节点收到了数据,DN上报NN已经收完此块,NN就认为当前块已经传输成功!
NN会自动维护副本数!

11 机架感知

2.7.2默认的策略:
第一个副本放在本地机架的一个DN节点
第二个副本放在本地机架的另外一个DN节点

本地机架的网络拓扑举例最多为2,速度快!

第三个副本放在其余机架的一个DN节点

为了安全性

tomcat服务器日志
数据库服务卡mysql数据 客户端()

5、MapReduce

6、zookeeper

一、概述:zookeeper= 文件系统+通知机制

开源的分布式的,为分布式应用提供协调服务的apache项目,多用做为集群提供服务的中间件

负责存储和管理你们都关心的数据,eg,hdfs 的url

Zookeeper是java编写的一个开源的分布式的存储中间件!
Zookeeper能够用来存储分布式系统中各个进程都关心的核心数据!
Zookeeper采起观察者模式设计,能够运行客户端在读取数据时,设置一个观察者一旦观察的节点触发了指定的事件,服务端会通知客户端线程,客户端能够执行回调方法,执行对应的操做!

二、特色:

(1)一致性:zookpeer 中的数据按顺序分批入库,并最终一致

(2)原子性:一次数据更新要么成功要么失败

(3)单一视图:client 不管链接到哪一个zk节点,数据都是一致的

(4)可靠性:每次对zk的操做状态都会保存到服务器,每一个server保存一份相同的数据副本(和hdfs不同,dhfs 每一个datanode 数据不一致)

(5)更新请求顺序进行,来自同一个client的更新请求按其发送顺序依次执行

(6)实时性:在必定范围内,client 能读取到最新数据

三、数据结构

与unix文件系统相似,总体可看做一棵树,每一个节点称做一个znode,每一个znode能够相似看做一个目录,其余能够建立子目录

zookeeper 集群自身维护了一套数据结构,存储结构是一个树形结构,其上每一个节点,成为znode,每一个znode默认能存1M的数据,每一个znode能够经过其路径惟一标示

四、应用场景:

数据发布与订阅:适用于配置信息多设备共享,会发生动态变化

软负载均衡:负责收集服务信息与状态监控

集群管理:每台机器的运行状态收集

五、使用

启动:   bin/zkServer.sh start
             bin/zkCli.sh -server host:port
             
中止:   bin/zkServer.sh stop
          bin/zkCli.sh -server host:port  close|exit
          
增:   create [-s] [-e]  path  data
                -s:  建立一个带序号的znode
                -e:  建立一个临时znode,临时的znode被所建立的session拥有,一旦session关闭,临时
                        节点会被删除
删:   delete  path 
            rmr   path
改:   set  path  data

查:   get  path 
       stat path
       ls   path
       ls2  path
支持四字命令
nc hadoop101 2181  ruok
设置观察者
  get  path watch:  监听指定节点数据的变化
    ls   path watch:  监听当前路径子阶段数据的变化,一旦新增或删除了子节点,会触发事件
    注意: 观察者在设置后,只有当次有效!

2、ZK集群的注意事项

  1. ZK在设计时,采用了paxos协议设计,这个协议要求,集群半数以上服务实例存储,集群

    才能够正常提供服务
  2. ZK集群中,server有Leader 和Followwer两种角色

    Leader只有一个,在集群启动时,自动选举产生!
    
    选举Leader时,只有数据和Leader保持同步的Follower有权参与竞选Leader!
    在竞选Leader时,serverid大的Server有优点!
  3. 集群模式ZK的写流程

    ①客户端能够链接任意的zkserver实例,向server发送写请求命令
    ②若是当前链接的server不是Leader,server会将写命令发送给Leader
    ③Leader将写操做命令广播到集群的其余节点,全部节点都执行写操做命令
    ④一旦集群中半数以上的节点写数据成功,Leader会响应当前Server,让当前Server
            响应客户端,写操做完成!

相关文章
相关标签/搜索