1.hdfs
1.1.namenode
所有文件的读写入口,用来保存文件的元信息
元信息包括:
fsimage文件:文件权限信息文件在block块的偏移量文件的位置信息
editlogs文件:对文件的写操作日志文件写日志指令,为了安全同步,重启会执行指令
1.2.datanode
用来真正保存文件内容的节点
datanode有很多个,保存的是若干个block块
1.3.secondarynamenode
定期合并editlogs文件,防止editlogs文件过大,文件过大时,重启会特别慢。
这个editlogs就类似于redis的AOF持久化机制,也是定期得合并,不然太大就会造成重启慢。
1.4.block
hdfs中保存文件的基本单位,默认128M,可改。
如果文件大于128M,会拆分成多个block块,保存在多个datanode中。
分布式就是将block打散放在不同的node上,
每个block块都有一个唯一标识,这个唯一标识保存在namenode的fsimage文件中
2.mapreduce
2.1 map
归纳整理,将hdfs文件解析拆成key-value
2.2 reduce
真正的计算,一般是多台机器同时计算
在hadoop2中,mapreduce实现用到了Yarn组件
2.3 Yarn组件(yet another resource nevatitor : 下一代资源管理者)
2.3.1 ResourceManager资源管理器(简称RM)
mapreduce的执行入口
接收客户端的job请求
协调job所用资源
产生一个jobId和appMaster(后面的AM)通信
监听任务的开始和结束
2.3.2 NodeManager(简称NM)
运行在各个datanode上,有几个datanode,就有几个NodeManager
负责和RM,AM通信
由NM启动各个YarnChild
2.3.3 MRAppMaster(简称AM)
由RM在各个NM中指定一个机器启动
负责具体的某一个map任务,即:
负责从hdfs中下载job运行的资源
同时将job资源分发到各个NM中
监听各个YarnChild的状态
2.3.4 YarnChild
由NM在各个节点上启动YarnChild
执行map,YarnChild1启动,关闭
执行reduce,YarnChild2启动,关闭
如果某个YarnChild不行了,由AM再选一个NM启动一个YarnChild,再继续干
2.4 shuffe(洗牌)
map完会shuffe,再交给reduce
shuffe:合并key,并排序(按照key字典顺序排)
2.5 split计算过程
一个split对应一个map任务
有几个split,在mapreduce过程中就会有几个map任务并行计算
2.6 job提交过程
从job.writeForCompletion(),开始debug
2.7 mapreduce中常见的输入输出类型
3.hbase(hadoop database)
存储在hdfs之上的,对hdfs的封装,简化hdfs的操作
是一种key-value类型的nosql数据库
没有事务
基于内存
只支持key查询
面向列存储
传统的关系型数据库,一行可以存储多个列的值
hbase中,一行只存储一列
3.1 hbase概念
3.1.1 namespace(命名空间)
hbase中没有数据库的概念,但有个namespace,命名空间,类似于库
3.1.2 table(表)
3.1.3 column family(列簇)
分类管理列,由相同特性的列组成
一个表有多个列簇
列簇必须在创建表的时候指定
列簇不宜设置过多,能用一个就不用两个,用列簇是为了方便管理
3.1.4 column(列)
隶属于列簇,一个列簇下可以有多个列
列名需在添加数据时指定
3.1.5 value(值,保存列名对应的值)
同一条数据,可以有多个值,每个值对应一个版本
通过timestamp当版本号,一个value默认可以保存3个版本
存储举例:key value1 name:zhangsan
1 age:18
1 city:beijin
2 name:lisi
2 age:28
3.2 hbase核心服务
3.2.1 hregion
一个hregion包含了某个表的全部或局部内容
默认每个hregion的大小为256M
一个hregion只保存一个表的信息
在hregion中,数据是按照key的自然顺序排好序的
一个hregion由一个或多个hstore组成
每一个hstore保存一个column family,及列簇
每个hstore包含一个memstore和多个storFile
3.2.2 hmaster
监听用户对表的操作(建表,删表,修改表信息)
hmaster集群,采用副本集,一主多从,用zk管理
3.2.3 zookeeper
4.hive
对mapreduce的封装,可以当成一个数据库
hive是建立在hadoop上的数据仓库基础架构
仓库保存的数据一般都是经过特殊处理的(一般是ELT)
4.1 hive组件
4.1.1 Driver
4.1.2 metastore
4.2 hive分区
4.3 hive分桶
4.4 hive中的类型
5.flume
日志收集组件
一般是将日志收集到hdfs存储
这里的日志不仅仅是nginx中的日志,任何数据都可以认为是日志
5.1 三大核心组件
5.1.1 source
定义数据的来源,即日志来源
5.1.2 channel
通道,用来传输数据
为什么有chanel:如果source很快,sink很慢,就会宕机,所以加上channel来缓解sink的压力
5.1.3 sink
定义数据的目的地
5.2 agent
三大组件合起来叫agent
agent分别管理若干个source,channel,sink
一个agent代表一个JVM
5.3 event
事件,数据传输的基本单位
flume在读数据的时候,是一个event一个event的读
event可以理解为日志文件中的一行或多行
5.4 flume的强大之处
1.使用简单
2.可以进行各种source,channel,sink的组装,即一个agent中可以有多个source,多个channel,多个sink,多个组件之间可以相互搭配
3.可以进行多级agent,提高单agent的抓取效率,agent之间一般用消息队列传输,比如kafka
4.多个agent数据合并成一个agent,称为sink的聚合
5.多路agent,即一个source,对应多个channel,对应多个不同的sink,最终存储到不同的地方
6.flume支持集群,有负载均衡和容灾策略
7.flume内置了和其他组件的的集成方式(这也是用flume的主要原因)
比如:
和hdfs集成
和hbase集成
和hive集成
和kafka集成
和自定义集合组件集成