我是靠谱客的博主 开朗月亮,最近开发中收集的这篇文章主要介绍Hadoop总结,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

0. Hadoop

开源的分布式系统基础架构

优点

  1. 对大量数据进行分布式处理
  2. 可靠, 假设硬件失效为常态, 针对失败节点进行重新分布处理
  3. 高效, 并行处理提高处理速度
  4. 可伸缩, 在横向扩展至上千个节点, 可处理PB级数据
  5. 低成本, 项目开源,与同类产品比较成本低廉

相关组件包括

  1. HDFS
  2. MapReduce
  3. Yarn
  4. Hive
  5. HBase
  6. ZooKeeper
  7. Sqoop
  8. Flume

1. Hadoop性能优化

影响性能的主要因素

  1. 数据倾斜,如reduce端接收的某个key包含多个值,另一个key则很少值
  2. job数量多,数据表的关联过多
  3. 求和,计数操作不存在数据倾斜的可能
  4. count(distinct)无法处理大量数据

优化的方向

  1. 数据模型
  2. 避免数据倾斜,如自定义对key分组,需要对数据深入理解
  3. 减少job数量
  4. 设定合理的task数
  5. hive中提供了自动优化解决数据倾斜,但该方法可能导致业务出错,set hive.groupby.skewindata=true;
  6. 拒绝使用count(distinct)
  7. 小文件合并处理,map端建立缓存

优化的手段,调整reducers数量

  1. hive.exec.reducers.bytes.per.reducer
    默认1G, 依据输入文件的总大小为一个job分配多少个reducer
  2. hive.exec.reducers.max
    默认999, 程序允许的reducers最大数量,只有当 input / bytes per reduce > max 才会触发
  3. mapred.reduce.tasks
    默认-1, 完全自定义reducer的数量,否则由程序自动分配

reducers的影响

  1. 太少
    数据量大时运行缓慢,甚至溢出
  2. 太多
    小文件过多时,合并成本高,namenode存储压力大

1. HDFS

Hadoop Distributed File System 分布式文件系统

优点

  1. 高可用, 快速自动恢复发生错误的节点, 保证数据拷贝设定的副本数量
  2. 高吞吐, 流式访问数据集,批处理而非交互, 延迟高
  3. 数据块存储, 默认128M/块,可修改
  4. 数据一致性, 一写多读,可追加不可修改
  5. 移动计算比移动数据划算, 将计算任务移动至最近的数据
  6. 通过namenode统一管理,维护目录树和文件的块id和datanode节点地址
  7. 支持元数据快照, 将失效集群回滚到之前的时间点
  8. 提供web接口, 统一从根目录出发

工作原理

  1. 客户端与namenode通信获取可写入的datanode地址
  2. 客户端按块传递给相应datanode
  3. 完成第一个节点写入后,datanode负责向其他节点拷贝副本
  4. 客户端发送读取文件路径给namenode
  5. namenode返回文件元数据给客户端
  6. 客户端根据元数据找到相应datanode按块读取合并整个文件
  7. secondary namenode定期完成namenode的备份,用于恢复元数据
  8. datanode负责存储数据,定期发送心跳给namenode判断是否正常工作,错误则由namenode重新分配新的节点并进行数据拷贝

2. Yarn

  1. Yet Another Resource Negotiator 另一个资源协调器
  2. 通用资源管理系统, 为上层应用提供统一的资源管理和调度
  3. 将JobTracker和TaskTracker分离, 由ResourceManager管理全局资源,NodeManager管理各个节点, 应用是ApplicationMaster表示,一个应用拥有多个容器在节点管理器上运行

3. MapReduce

  1. 用于大规模数据集并行运算的编程模型
  2. map端, 根据InputFormat分割文件为多个splits,一个split作为一个输入, 每个map task存在一个环形内存缓冲区, 中间结果写入缓冲区至阈值后启动一个线程将溢出数据写入磁盘. 对key进行快排, 多个溢写文件最后会合并为一个文件,等待下一步处理
  3. reduce端, 等待map端全部任务完成, 形成多个文件, 默认按key的哈希值分配reduce task, 对Key进行归并排序, reduce端处理后,将输出写入HDFS

4. Hive

  1. 数据仓库工具
  2. 将结构化数据映射为一张数据库表,常用MySQL存储
  3. 提供类sql语句查询功能,在驱动中可进行类sql语句向mapreduce作业的翻译,优化和执行
  4. 学习成本低,适合进行数据的统计分析
  5. 实际数据存储在HDFS上,mysql中存储一张映射表用于实现查询功能
  6. mapreduce的主要缺点有底层依赖java编程,功能不灵活,操作不清晰,代码多维护难,排序连接操作极其繁琐低效,专注于编程而非功能
  7. Hiveql语句支持大量函数,可通过.hql脚本编程运行

5. HBase

  1. 基于HDFS存储的分布式面向列的开源数据库
  2. 随机存取, 支持低延迟单条记录的访问而非HDFS的批处理模式
  3. 适合于非结构化数据存储, 基于列而非基于行
  4. 一写多读,自动扩展,自动分割过量数据
  5. 表是行的集合,行是列族的集合,列族是列的集合,列是键值对的集合
  6. 由zookeeper负责协调分布式系统成员间的状态信息共享
  7. 主节点由HMaster管理,负责region分配和数据库创建删除操作,监听zookeeper对备份节点的状态通知
  8. 从节点由Region Server管理, 负责读写, 可管理1000个region
  9. 定期向zookeeper发送心跳信息判断节点是否存活
  10. 客户端首次通过zookeeper获取meta table地址获取region server地址获取目标row key所在region的region server地址,缓存操作信息,建立通讯,实现读写
  11. 客户端与目标region server建立通讯后发送put请求,顺序写入预写式日志WAL,存入memstore写缓存,写入Hfiles文件,通过block cache读缓存实现读取

6. ZooKeeper

  1. 分布式开源的应用程序协调服务
  2. 封装复杂易出错的关键服务,提供简单易用的接口和高效稳定的系统给用户
  3. 客户端与服务器建立会话,按先进先出顺序执行请求
  4. 选举机制,自动选举出的leader具有最高执行id权限,避免死锁出现
  5. 提供明明服务,配置管理,集群管理,锁定或同步服务,数据注册功能
  6. 支持序列化,默认znodes节点为永久存活

7. Sqoop

  1. 用于hadoop与mysql间的数据传递的ETL工具
  2. 实现关系型数据库中的数据与hdfs中的数据交互

8. Flume

  1. 支持分布式海量日志采集,聚合和传输的日志收集系统
  2. 支持定制各类数据的发送方,提供简单的数据处理
  3. 支持多种接收方如HDFS,HBae等
  4. 收集速度超过写入速度时,自动调整协调读写平衡
  5. 基于事务,保证一致性
  6. 可靠,易用,可定制,高容错

最后

以上就是开朗月亮为你收集整理的Hadoop总结的全部内容,希望文章能够帮你解决Hadoop总结所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(34)

评论列表共有 0 条评论

立即
投稿
返回
顶部