zoukankan      html  css  js  c++  java
  • Hadoop入门

     

    Hadoop主要解决问题

    大量的存  HDFS

    大量的算  MapReduce

    优势:

    高可靠性

    高扩展性

    高效性  MapReduce 使得并行执行运算

    高容错性 自动失败的任务重新分配

    Hadoop1.x Hadoop2.x区别

     

    实现计算与调度解耦  Yarn不但可以调度MapReduce 还可以调度其他资源

    HDFS架构

    NameNode(nn)  存储文件的元数据(文件名,文件目录结构,文件属性)

    DataNode(dn)  存储数据本身

    Secondary NameNode(2nn) nn的好助手/替身

    Yarn架构 调度CPU和内存资源分配

     

    ResourceManager(RM)(主管,负责从客户端接项目 然后安排人员 监控人员)

    1处理客户端请求

    2监控NodeManager

    3启动并监控ApplicationMaster

    4资源的分配和调度

    NodeManager(NM)(项目组的程序员 负责具体干活的人)

    1管理单个节点的资源

    2执行ResourceManager的命令

    3执行ApplicationMaster的命令

    ApplicationMaster(跟进具体项目的临时负责人,项目结束打包离职)

    1负责数据切分

    2负责为应用程序申请资源

    3任务的监控和容错

    Container容器(物资)

    是资源的抽象 封装了多维度资源(内存,cpu,磁盘,网络等) NodeManager使用

    MapReduce架构

    MapReduce将计算分为两阶段 Map Reduce

     

    大数据生态体系

     

    大数据分析过程

    最终用户画像 产品聚类

    Zookeeper在整个过程中充当润滑剂

    集群搭建:正常六台机器

    NN一台   DN+NM共三台  2NN一台  RM一台

    HDFS Hadoop Distributed File System

    适合一次写入 多次读出 且不支持文件修改

    优点:

    高容错性:多副本机制

    适合处理大量数据

    可构建在廉价机器上

    缺点:
    不适合低延迟数据访问

    不适合存储大量小文件:因为NameNode空间是有限的。小文件寻址时间远超过读写时间

    不支持并发写入,文件随便修改

    HDFS架构

    NameNode

    DataNode

    Client

    将文件切分成一个个的block然后上传

    Secondary NameNode

    辅助分担NameNode

    HDFS文件分块Block: 默认128M

    寻址时间/读取时间 规范 1/100

    设置的文件块太小-导致寻址时间过长

    设置文件快太大-文件处理会很慢

    HDFS上传过程

     

    (1) 建立一个客户端Client,输入流读取本地文件,输出流上传文件

    (2) NameNode发送申请上传,经过审核(上传路径是否正确,是否有权限)得到响应是否可上传

    (3) 将本地文件逻辑切分,128M分一块

    (4) 请求上传第一个Block块,返回n个节点数的DataNodeList(nDataNode副本数量),选出离客户端最近的DataNode作第一个,该DataNode再选出其他的DataNode

    (5) 按顺序发送DataNode请求建立通道,请求建立通道,请求建立通道

    (6) 按顺序返回应答成功,应答成功,应答成功

    (7) 按顺序传输packet,传输packet,传输packet

    (8) 传完第一个块 再重新找DataNode重复(5)-(7)步骤

    (9) NameNode更新元数据

     

    传输packet过程中不是完全串行的,客户端发给DN1DN1还没落入磁盘就继续发送packetDN2,然后继续发给DN3. DN3开始逐个返回成功,最后返给客户端成功

     

    如果中途请求建立通道或相应应答失败了,则文件传输失败

    如果第一个DataNode的传输packet失败了,那么文件传输失败。

    如果后边DataNode的传输packet失败了,前边的DataNode会再找新DataNode补齐

     

    HDFS下载过程

     

    也是一个块一个块的读

    当一个DataNode能满足提供一个块 其他DataNode副本就不会再给了

     

     

    NameNode

    元数据内存持久化  

    Fsimage 类似于RedisRDB 记录了某一刻内存的 负责将磁盘恢复到内存    

    edits.log 类似于RedisAOF 记录的每一步的操作 负责NameNode内存持久化到磁盘

    NameNode服务器启动 先加载Fsimage 再加载edit.loB

    存入新数据 存入edits.log 再由2NN合并入Fsimage

    2NN作为秘书 把edits.log整合到Fsimage

    询问NameNode 是否需要CheckPoint,

    触发条件:

    (1) 定时时间到

    (2) Edits的数据满了

    整合步骤:

    (1) NN同意整合CheckPoint,然后将editsFsimage发给2NN

    (2) 2NN根据edits保存的指令,整理出新的Fsimage发回NN

    (3) NN创建新的edits存指令,旧的edits不会删,旧的Fsimage会删

    DataNode存储

    存储块的数据  存储块的元数据(数据长度,校验和,时间戳)

    (1) DN启动后向NameNode注册

    (2) 注册成功后,以后每周期(一小时)上报所有块信息

    (3) 3秒一次心跳,心跳返回结果带有NameNode返给DataNodeNN超过十分钟没有接到心跳则认为DN挂了。

     

    DataNode扩展集群

    退役旧DataNode节点

    添加白名单  用来保证集群安全性  白名单外一律不允许连接NameNode

    黑名单退役  用来退役  放入黑名单安乐死 还有心跳但是没他事了

    MapReduce 分布式运算程序的框架

    优点:简单

    简单,易编程

    良好扩展性,加机器扩展运算能力

    高容错性,一个机器挂了 放别的机器算,只要不是所有机器全挂了就不会失败

    海量数据离线处理

    缺点:
    不擅长实时计算

    不擅长流式计算  MapReduce输入的数据是静态的 文件块  不支持动态流式计算

    不擅长有向图计算 后一个输入是前一个输出的有向图计算,由于MapReduce的计算结果都要落入磁盘,导致有向图计算会产生大量IO效率特别低

    Map阶段

    将数据映射为想要的KEY-V形式  <word,1>

    Reduce阶段

    再将数据进行合并处理  <word,n>

    MrAppMaster

    MapTask

    ReduceTask

     

    代码三部分:

    WcMapper

    WcReducer

    WcDriver

     未完待更新 !

    Hadoop常用命令:

    全开启

    start-all.sh等价于start-dfs.sh + start-yarn.sh

     

    hadoop fs -ls /        hadoop下查看所有目录

    hadoop fs -mkdir /aaa   hadoop下创建目录

     

     

    查看指定目录内容

    hdfs dfs –ls [文件目录]

    打开某个已存在文件

    hdfs dfs -cat [path]

    本地文件存入hadoop

    hdfs dfs -put [hadoop目录] [本地地址]

    hadoop文件down到本地已有目录

    hadoop dfs -get [hadoop目录] [本地目录]

    删除hadoop上指定文件

    hdfs dfs -rm [文件地址]

    hadoop上创建新目录

    hdfs dfs -mkdir [目录名]

  • 相关阅读:
    Linux命令-tail命令
    服务器重装ip未更改,ssh连不上(WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED)
    Docker中Nginx部署go应用
    Django+gunicorn+nginx项目部署
    Django之 CVB&FVB
    Django之form校验&后台管理
    python argparse例子实践
    重新认识递归
    Django之数据库对象关系映射
    jenkins参数化构建&HTML报告
  • 原文地址:https://www.cnblogs.com/ttaall/p/13366773.html
Copyright © 2011-2022 走看看