大数据之Hadoop

一、hadoop的核心组件

  • hadoop通用组件 - Hadoop Common
    • 包含了其他hadoop模块要用到的库文件和工具
  • 分布式文件系统  - Hadoop Distributed File System(HDFS)
    • 运行于通用硬件上的分布式文件系统,高吞吐、高可靠
  • 资源管理组件 - Hadoop YARN
    • 用于管理集群中的计算资源并在这些资源上调度用户应用
  • 分布式计算框架 - Hadoop MapReduce
    • 用于处理超大数据集计算的MapReduce编程模型的实现

二、Hadoop关联项目

  • Apache Ambari是一种基于web的工具,支持Apache Hadoop集群的供应、管理和监控。Apache Ambari支持HDFS、MapReduce、Hive、Pig、Hbase、Zookeeper、Sqoop和Hcatalog等的集中管理。也是5个顶级hadoop管理工具之一。
  • Avro 数据序列化系统
  • Cassandra 开源分布式NoSQL数据库系统。
  • chukwa 开源的用于监控大型分布式系统的数据收集系统。构建在Hadoop的HDFS和MapReduce框架之上的,包含了一个强大灵活的工具集,可用于展示、监控和分析已收集的数据
  • Hive 是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询,可以将sql语句转换为MapReduce任务进行运行
  • Mahout提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发更加方便的创建智能应用程序。包括聚类、分类、推荐过滤、频繁子项挖掘
  • Apache Pig 高级过程语言,适合于使用Hadoop和MapReduce平台来查询大型半结构化数据集。通过允许对分布式数据集进行类似SQL的查询,Pig可以简化Hadoop的使用
  • Apache Spark 是专为大规模数据处理设计的快速通用的计算引擎。能更好的适用于数据挖掘与机器学习等需要迭代的MapReduce算法
  • Tez 支持DAG作业的开源计算框架,能更好的处理实时的查询处理及机器学习等
  • Zookeeper 分布式的开源应用程序协调服务,是Hadoop和Hbase的重要组件。功能包括:配置维护、域名服务、分布式同步、组服务等
  • HBase 分布式、高可用、高性能、面向列、可伸缩的分布式存储系统

三、HDFS架构

  • HDFS client
  • NameNode 管理文件系统的命名空间
    • 1.管理文件和目录的元数据(运行时,元数据发内存),block副本个数、时间、权限、block列表信息
    • 2.本地持久化:命名空间镜像文件(fsimage) 和编辑日志(edits log)
    • 3.fsimage文件不记录每个block所在的DataNode信息,每次系统启动时从DataNode重建,通过心跳向NameNode报告block信息,DataNode向NameNode注册时NameNode请求DataNode发送block信息(文件名和路径、文件大小、文件所属关系、block块大小等)
    • 每三秒向NN汇报一次,10分钟未收到消息,NN认为DN宕机
    • 在core-site.xml中指定在哪个节点启动
  • DataNode 存放数据块, 存储模型
    • 按字节切割
    • block分散存储在集群节点中
    • 单一文件block大小一致,文件与文件可以不一致:hdf dfs -D dfs blocksize=104876 -D dfs.replicationn=3 -put hello.txt  /opt   // replication副本数
    • block可以设置副本数,副本分散在不同节点中
      • 副本数不超过节点数
      • 承担计算
      • 提供容错
    • 同一时刻只有一个写入者,可以有多个读取者
    • 可以append追加数据
    • 副本存放策略
      • 如果上传文件的节点数就是一个datanode,则第一个副本放在本地如果在集群外上传文件则随机挑选一个CPU不太忙,存储不太满的节点存放
      • 第二个副本放在和第一个副本不同机架上的一个节点
      • 第三个副本放在和第二个副本相同机架的不同节点
      • 其他副本随机存放
    • 用slaves来记录DN在哪个节点运行,每行一条记录,每个记录表示DN所在的节点ip地址/主机名
  • SecondaryNameNode 定期合并fsimage和edits log,将NameNode内存中的文件系统元数据生成检查点,条件:每一小时一次,不足一小时,则看edits log记录的事务数达到100万则合并,默认每分钟检查事务数量
    • 防止edits log过大,在重启时会花费很长时间执行
    • 合并流程
      • 通知namenode要合并了
      • namenode将现在的edits log文件重命名,同时生成一个空的edits log
      • snn从NN通过HTTP GET的方式下载fsimage和最新的edits log,不是正在使用的
      • snn首先将fsimage加载到自己的内存,然后对内存数据执行edits log中的记录
      • 执行结束后,将内存镜像写到磁盘,形成新的fsimage,此时fsimage就是原来的fsimage+edits log
      • snn将新生成的fsimage推送给NN(HTTP PUT)
      • NN使用
    • hdfs-site.xml中指定启动节点

四、hadoop安装配置

  • core-site.xml配置
  •  <configuration>                                                                                    
         <!-- 指定访问HDFS的时候路径的默认前缀 / hdfs://centos7:9000 -->
         <property>
             <name>fs.defaultFS</name>
             <value>hdfs://shan1:9000</value>
         </property>
         <!-- 指定hadoop的临时目录位置,给namenode、secondarynamenode以及datanode的存储目录指定前缀 -->
         <property>
             <name>hadoop.tmp.dir</name>
             <value>/var/bjsxt/hadoop/pseudo</value>
         </property>
     </configuration>
  • hdfs-site.xml配置
  •  <configuration>                                                                                                    
         <!-- 指定block副本数 -->
         <property>
             <name>dfs.replication</name>
             <value>1</value>
         </property>
         <!-- 指定secondarynamenode所在的位置 -->
         <property>
             <name>dfs.namenode.secondary.http-address</name>
             <value>shan1:54321</value>
         </property>
     </configuration>
  • vi workers 写入shan1   节点名     hadoop安装目录下的etc/hadoop/workers   2.x为slaves
  • 执行格式化   hdfs namenode -format命令
  • 启动    start-dfs.sh
  • 查看进程 jps
  • 浏览器访问shan1:50070   50070是固定的这是hadoop管理页面
  • 若启动失败可以在hdfs-site.html中添加以下内容,重新启动hadoop
  • hdfs dfs -D dfs.blocksize=1048576 -D dfs.replication=1 -put hello.txt  /   上传本地文件到hadoop,blocksize块大小,replication表示副本数
  • hadoop3.x 在workers中设置从节点

五、HDFS的写流程和读流程

  • 写流程(重点)
    • 客户端连接namenode写元数据,该元数据不包含block列表信息,Namenode会做检查,首先有没有权限创建文件,是否存在同名文件,如果通过,则将元数据首先写到edits log文件中,然后更新内存状态,返回客户端success
    • 客户端请求上传当前block块的datanode信息,namenode返回datanode列表,每个datanode上传当前block块一个副本,默认3个datanode,看指定的副本个数
    • 客户端维护两个对列,一个是数据对列,放要发送的数据包,一个是确认对列放要确认的数据包。客户端将block以packet的形式(64KB)数据包向datanode发送。三台datanode构成一个管线,管线间传递packet,客户端只需要向第一个datanode发送数据即可,时间线重叠
    • 如果在传输时管线中有datanode挂掉,首先关闭管线,将确认对列中的packet添加到数据对列的前端,等待重发,给好的datanode上block块部分数据一个新的标记,同时将标记通知namenode为了防止坏的datanode重启后向namenode汇报信息,如果namenode发现block块标记不存在,则让datanode删除,剩下的datanode组成新的管线,继续传输数据
    • 每传输完一个block,datanode向namenode汇报列表信息,客户端向namenode申请下一个block块的上传位置
    • 客户端将所有block传输完成,同时namenode对每个block至少有一个副本,就算传输成功
  • 读流程(重点)
    • 客户端请求namenode,查找一个文件的元数据,如果该文件存在,发送该文件的block块位置信息给客户端
    • 客户端获取到文件的block块位置信息后找到最近邻datanode读取数据
    • 每次读完block块之后,请求下一波block块位置,接着读取
    • 当所有的block块读取完毕,读流程结束
    • 由于客户端一边下载数据,一边进行校验,如果发现当前block块数据损坏,首先通知namenode,然后找次近邻副本读取,如果datanode宕机,记下该datanode位置,以防重复读取该节点上的其他block块。

六、Hadoop HA

  • 解决单点故障和内存受限问题
  • namenode从节点代替主节点,需要内存状态信息一致
    • 主节点写edits log到集群节点,集群节点同步edits log到从节点
    • datanode向主节点和从节点汇报block信息和心跳
    • JQM解决从节点代替主节点的问题,cap 一致性、可用性、分区容忍性,超过半数集群节点收到edits log 记录认为成功
    • 备节点用来合并fsimage和edits log,然后同步给主节点
    • 只能由主节点向外提供服务
    • 手动HA示意图
  • 自动HA: 基于Zookeeper实现
    • Zookeeper Failover Controler :监控NameNode健康状态,并向Zookeeper注册NameNode
    • NameNode挂掉后,ZKFC为NameNode竞争锁,获得ZKFC锁的NameNode变为active
    • Zookeeper的分布式锁,keepalived
  • 启动ha的hadoop
    • 启动zookeeper集群 --> zkServer.sh start 
    • 在shan1、shan2、shan3上启动三台journalnode --> hadoop-daemon.sh start journalnode 
    • 任意选择shan1,格式化HDFS --> hdfs namenode -format,格式化后,启动namenode进程,hadoop-daemon.sh start namenode  若已经格式化过,不需要再格式化
    • 在另外一台shan2上同步元数据 --> hdfs namenode -bootstrapStandby
    • 先在shan4节点启动zookeeper客户端 --> 执行zkCli.sh,会有下图信息
    • 执行命令 get -s /hadoop-ha/mycluster/ActiveStandbyElectorLock
    • 初始化zookeeper上的内容 --> hdfs zkfc -formatZK
    • 启动hadoop集群,可在shan1到shan4这四台服务器上任意位置执行 --> start-dfs.sh

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值