hadoop生态圈-- 个人笔记学习01

文章详细介绍了Hadoop中的HDFS、MapReduce和Hive组件。HDFS是分布式文件系统,NameNode负责元数据管理,DataNode存储数据块;MapReduce是并行计算模型,用于大规模数据处理;Hive则提供了SQL-like查询接口,用于结构化和半结构化数据的分析。文章还提到了Hadoop的容错机制和数据处理流程。

分布式大数据处理框架

  • 可靠
  • 高效
  • 可伸缩

包含HDFS MapReduce等框架

分层

  1. 数据来源
  2. 数据传输
  3. 数据存储 – HDFS
  4. 数据管理
  5. 数据计算
  6. 任务调度
  7. 业务模型

HDFS 分布式文件系统

  • 高容错性
  • 低廉硬件适配
  • 高吞吐量
  • 超大数据集

client: 提交读取请求

  1. HDFS的api编写程序交互
  2. Hadoop的Datenodes

NameNode: 全局把控

DateNodes:数据存储

两个node对他们进行操作处理。client类似仓库管理员,Namenode类似存储系统,而DateNodes相当于存储的货柜。
所以,NameNode响应client请求,DataNode处理产品存取,并根据NameNode反馈数据

Block:一个文件拆分成多个Block存储

详细阐述

NameNode:client请求响应、维护文件系统的目录结构、管理文件和block之间关系,block和DataNode的关系。对HDFS目录、文件、块做类似增删改等操作。块存储于存储中只有一个active状态的NameNode,负责对HDFS管理

特点

  • NameNode是中心服务器,单一节点,管理namespcae和client对file的访问
  • NameNode负责文件元数据操作,DataNode处理文件内容的读写请求。文件相关数据流数据流不经过NameNode,只询问它与关联的DataNode
  • NameNode控制副本存放在哪个DataNode —— 全局情况决定放置块。
    • 尽量保证读取最近的副本,降低块消耗与读取时延
  • 管理data block的复制,周期性从cluster的每个DataNode接受 心跳信号(表示这个DataNode节点工作正常)与块状态报告(包含了这个DataNode所有数据块的列表)

DataNodes:数据块 ( Block ) 文件被分成多个 block 存储在磁盘上。文件有多个副本。Namenode和Client进行存储、检索block,定期向NameNode发送心跳信息、汇报本身、所有的block信息,健康状况

特点

  • 数据块在 DataNode 以文件存储在磁盘上
    • 数据本身
    • 元数据(数据块长度,校验和,时间戳)
  • DataNode启动,向NameNode注册。周期性向NameNode上报块信息
  • 心跳3seconds 一次,返回结果附带 一个命令(NameNode发送给DataNode),如复制数据块,删除数据块。若超10分钟无心跳,认为该节点不可用
  • cluster可以安全加入or 推出某些机器

Block:可靠性的基础 —— HDFS把文件分为大小一样的块(除了最后一块),通过copy实现容错。大小和副本系数针对文件配置。HDFS文件时一次写入的。限制一个时间内只能由一个用户写入

  • 文件分成块,大小默认128M,每个块多个副本存储在不同机器,副本数在文件生成的时候指定(默认3
  • NameNode是主节点,存储文件元数据(文件名,文件目录结构,文件属性,生成时间,副本数,文件权限,文件块列表和所在的DataNode)
  • DataNode在本地 File System存储文件块数据,块数据校验和
  • 创建、删除、移动、重命名文件。文件创建、写入、关闭后无法修改
    NameNode + 多个DataNode(多数情况下NN和DN在不同节点上

Hive

处理结构化、半结构化数据。SQL语句转换MapReduce任务查询,分析数据。

根据业务匹配需求 —— 多种输入输出格式存储格式、数据类型。根据具体业务配置。分区、桶的方式组织、管理数据,便于查询、分析数据 —— 还有自定义函数

扩展、易用、灵活、可定制。处理大规模数据

把sql语句转换为MapReduce任务运行。

Hive的表 == HDFS的目录、文件(按照表名把文件分开)

  • 分区表:分区的值就是子文件

系统架构

  • CLI: shell命令行
  • JDBC/ODBC 为Hive的Java
  • WebGUI 浏览器访问Hive
  • Thrift: 可扩展、跨语言的服务开发
    • 跨语言无缝衔接
  • 解释器编译器,优化查询计划的生产,查询计划存储在HDFS,后有MapReduce调用执行
  • Hive数据存在HDFS中,大部分查询由MapReduce完成(包括*的查询不会产生
  • Hive将元数据存在metastore中。元数据包括表的名字、表的列、分区、属性 —— 表的属性(是否为外部表),表数据所在目录

Hive的Metastore组件是Hive元数据存放地

  • Metastore服务
  • 后台数据存储(关系数据库

默认状况下,Metastore和Hive服务安装在一起,在同一个进程中。

Metastore独立安装于集群里(与Hive剥离),Hive远程调用Metastore服务,让他们运行在不同的进程里 —— 保证Hive的稳定性。 Hive依赖于HDFS与YARN

MapReduce

分而治之思想。拆分的前提 —— 任务可以并行计算且没有依赖关系。 Map负责分,Reduce负责合起来。

使用Map和Reduce两个函数进行高层的并行编程抽象模型。

  • Map:对一组元素重复式处理
  • Reduce,对Map结果进行进一步结果整理

处理类型 : key value键值对. .

  • 统一的计算框架,隐藏系统层面细节
  • 把what need to do 和 how to do分开,提供抽象和高层变成接口框架

分布式程序部署到hadoop集群运行,node扩展到成百上千个内容.增加机器扩展计算能力,计算数量基本和节点数增长保持线性增长。任何单一机器节点宕机了,它可以把上面的计算任务转移到另一个节点上运行,不影响整个作业任务得完成(hadoop实现

局限

  1. 实时计算差
  2. 多用于离线作业,无法实现秒级数据响应
  3. 无法进行流式计算(动态数据),该主要针对静态数据集

Hadoop MapReduce编程

需要有三类实例进程

  • MRAppMaster
    • 整个程序过程调度、状态协调
  • MapTask
    • map阶段数据处理 —— 并行
  • ReduceTask
    • reduce阶段数据处理流程 —— 依赖Map的输出结果

Mapper,Reducer,Driver(提交运行mr程序的客户端驱动)。mapper,reducer,前两者继承自己的父类。mapper在map方法中写逻辑业务,reducer在reduce()中写业务,程序需要Driver提交

工作流程

map,shuffle,reduce

  • map

数据源读取到数据,默认是得到kv键值对,处理后输出kv键值对

  • shuffle

map的数据会进行:分区、排序、分组等动作重组 —— 洗牌的逆过程

  1. 分区:key相同在一个分区,一个分区被同一个reduce处理
  2. 排序:key字典序排序
  3. 分组:key相同为一组,一组调用reduce处理一次
  • reduce
    shuffle的数据进行聚合处理,输出结果kv对

序列化机制

serialization:结构化对象转化为字节流 —— 网络传输or写入持久存储的过程

deserialization:字节流转化为结构化对象,重新创建对象

Why serializate?

  • 持久化格式
  • 通信
  • 数据拷贝,克隆机制
    java中:对象标识为二进制字节数组。实现序列化,需要实现java.io.serializable的接口。

而在hadoop中,使用writable接口实现序列化机制。但没有比较功能 —— 和java的comparable合并,提供一个接口WritableComparable

|hadoop数据类型|java||

实践如下:
https://segmentfault.com/a/1190000040852791

Map阶段执行过程

  1. 目录文件按标准切片(一般切片大小就是块大小
  2. 按切片数据解析为key value对
  3. 调用map解析出来一个kv对就是用一次map方法
  4. 对3的结果分区(默认一个区,分区数量就是reducer任务运行的数量,默认一个reducer
  5. 分区的value排序(如果key相同按value排序,
  6. 数据局部聚合 combiner处理,key相同就会进行一次reduce方法(默认没有,因为后续还有reducer

reduce阶段

  1. reducer主动从Mapper任务复制 kv对
  2. 复制到reducer的本地数据进行合并
  3. 对排序后的kv对调用reduce方法
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值