大数据框架总结

  • zookeeper
  • hadoop
  • hive
  • flume
  • sqoop
  • azkaban
  • oozie
  • impala
  • hue
  • redis
  • hbase nosql数据库
  • ELK
  • kafka
  • 软件框架之间依赖关系


zookeeper

大数据领域里面一个分布式服务协调框架,主要是帮助其他的框架正常运行
永久节点:
普通永久节点
序列化永久节点
临时节点:客户端一旦断开连接,节点消失
普通临时节点
序列化临时节点
watch机制:类似于监听器

hadoop

hdfs
分布式文件存储系统

namenode:主节点 主要用于管理元数据信息
fsimage:一份比较完整的元数据信息,
edits:最近一段时间客户端的操作日志 操作次数达到100W次,还有时间限制 1个小时
datanode:数据存储,以block块为单位来进行存储,默认block128M
secondaryNameNode:主要进行合并fsimage以及edist文件
snn需要拷贝fsimage与edits文件,进行备份,snn也是元数据冷备份
snn合并过程:知道
jobhistory:查看历史job进程

读取数据过程

  1. client发起文件读取请求,NameNode检查元数据(有没读取权限,文件是否存在),返回是否可以读取。
  2. 如可以读取,NameNode会视情况返回文件的部分或者全部block列表(多线程)。
  • 对于每个block,NameNode 都会返回含有该 block 副本的 DataNode 地址;
  • 返回的DN根据网络拓扑图的远近进行排序,离client越近的DN地址越前。
  • 心跳机制中超时汇报的 DN 状态为 STALE,这样的排靠后。
  1. client 选取排序靠前的 DataNode 来读取 block。
  • 如果客户端本身就是DataNode, 那么将从本地直接获取数据(短路读取特性);
  • 如果读取过程中断,客户端需要重新请求DN读取block。
  1. 所有的block 块传输完毕后,在客户端拼接成一个完整的文件。
    client 与ABC机器建立pipeline。
    client开始以packet为单位(默认64K)往A上传第一个block,A收到packet后会传给B,B传C; A每传一个packet就会放入一个应答队列等待应答。
    通过ack机制判断一个block是否上传成功,当一个block传输完成之后,client再次请求NameNode上传第二个block到服务器,直到所有block上传完毕。

写入数据过程:背下来

  1. client发起文件上传请求,NameNode检查元数据(目标文件是否已存在,父目录是否存在),返回是否可以上传。
  2. 如可以上传,client请求上传第一个block。
  3. NameNode根据配置文件中指定的备份数及机架感知原理进行文件分配,返回可用的DataNode的地址如:A,B,C。
  • 如果副本数是三个,NN会找三台机器。
  • 第一台:离客户端最近的一台机器。
  • 第二台:最近一台机器的相同路由器下面的一台机器。
  • 第三台:不同路由器下面找一台机器。
  1. client 与ABC机器建立pipeline。
  2. client开始以packet为单位(默认64K)往A上传第一个block,A收到packet后会传给B,B传C; A每传一个packet就会放入一个应答队列等待应答。
  3. 通过ack机制判断一个block是否上传成功,当一个block传输完成之后,client再次请求NameNode上传第二个block到服务器,直到所有block上传完毕。
    mapreduce:
    三个key,value对
    八个步骤
第一步:读取文件,解析成key,value对  k1  v1  LongWritable Text
 第二步:自定义mapper逻辑,接收 k1   v1  转换成为 k2   v2  Text  IntWritable  
 
 第三步:分区  相同key的数据发送到同一个reduce里面去,key合并,value形成一个集合
 第四步:排序 对数据key2进行排序
 第五步:规约 combiner  调优步骤  可选项  求平均值不能使用规约
 第六步:分组   key2合并,value形成一个集合
 
 第七步:自定义reduce逻辑,接受k2   v2转换成为新的k3  v3 输出  Text  IntWritable
 第八步:输出k3   v3 进行保存

yarn:资源调度管理平台
资源调度方式:三种
FIFO:先进先出 没人用
fair scheduler 公平调度 apache版本使用
capacity scheduler 容量调度器 cdh使用的调度方式
自定义capacity scheduler 配置实现 不同用户提交任务到不同的队列里面去,实现资源隔离
多租户,实现资源隔离

hive

数据仓库基本概念:数据仓库主要就是面向数据分析
将hive的元数据信息保存在mysql里面了

独立表模型
外部表:external 外部表删除表的时候,不会删除hdfs的数据
内部表:删除表的时候,会删除hdfs的数据

分区表:一般与外部表或者内部表搭配使用 分文件夹 partition by
分桶表:一般与外部表或者内部表搭配使用 分文件 cluster by into xxx buckets

hive基本语法 group by
自定义函数
爆炸函数 explode 将数组给炸开
lateral view UDTF 函数 主要与爆炸函数配合使用

分析函数 都是用于分组求topN row_number over rank over dens_rank over (partition by order by )

每个,每月,各个 都是需要进行分组 group by

每月最大的前五个值:分析函数
select
*,row_number() over(partition by s_id order by score )
from user;

多使用子查询
select from (
) temp

数据存储格式,压缩,调优
数据存储格式:行式存储以及列式存储
行式存储:textFile,sequenceFile
列式存储:orc,parquet

在ods层:使用textFile
在dw层:使用orc存储格式 配合snappy压缩 数据压缩比 6 :1
原始文件100GB 使用orc格式配合snappy之后数据大概剩下 100/6

hive调优:尽量多背几个
map端join
合并小文件
控制map个数以及reduce个数
表的优化
本地模式
推测执行

flume

flume:数据采集工具 离线分析:
将数据保存到hdfs上面去:hdfsSink 文件滚动的时长,文件event数据量,文件大小
文件夹滚动策略:多长时间在hdfs上面滚动生成一次文件夹
多长时间发送一次数据到hdfs上面去,采集一次数据都是一般接近128M
hdfs.rollInterval 30 Number of seconds to wait before rolling current file (0 = never roll based on time interval)
hdfs.rollSize 1024 File size to trigger roll, in bytes (0: never roll based on file size)
hdfs.rollCount 10 Number of events written to file before it rolled (0 = never roll based on number of events)

多长时间在hdfs上面生成一个文件夹	
hdfs.round	false	Should the timestamp be rounded down (if true, affects all time based escape sequences except %t)
hdfs.roundValue	1	Rounded down to the highest multiple of this (in the unit configured using hdfs.roundUnit), less than current time.
hdfs.roundUnit	second	The unit of the round down value - second, minute or hour.
flume多长时间采集一次:多长时间怎么配置将数据发送一次到hdfs上面去
实时处理:将数据发送到kafka里面去

sqoop

sqoop:数据的导入导出工具
增量数据怎么解决
减量数据怎么解决:做拉链表
更新数据怎么解决:做拉链表
启动了多少个mapTask -m 每条数据库数据量大概有多大

azkaban

azkaban: 任务调度工具 自己会使用就行

oozie

oozie: 完全替代azkaban

impala

impala: 完全替代hive 比较消耗内存,官方建议内存128GB起步

hue

hue:管理工具,主要与其他的各种框架进行整合

redis

redis:内存数据库 存取速度都比较快
string
hash
list
set
zset
运行模式
单机版
主从模式
哨兵模式
redis集群

hbase nosql数据库

大数据领域里面一个分布式的nosql 数据库
rowkey
列族

时间戳
多版本
一张hbase表,有多个region
一个region两部分组成:一个HLog + 多个store模块
一个store模块:一个memoryStore + 多个StoreFile

flush:数据从memoryStore到storeFile
compact:数据从storeFile到HFile
split:大的HFile达到10GB的时候,就会进行分裂,region也会一分为二
hbase的数据读写流程:元数据记录表 hbase:meta表
多版本特性:一个cell里面可以存放多个值
TTL过期时间
namespace:命名空间

使用hbase存储微博数据

ELK

ELK:elasticse 全文检索框架,也是类似于一个数据库
index
type
document
field
shard
replicat
mappings
settings

kafka

kafka:消息队列 用于实时处理场景
作用:解耦,异步,并行
一般用于数据的统一的管理平台
核心 概念
producer
topic
consumer
partition
segment
.log
.index

软件框架之间依赖关系

1、zookeepper没有任何依赖 依赖jdk
2、hadoop
ha模式:依赖zk
3、hive 依赖hadoop 和 mysql
4、flume 没有依赖
5、sqoop没有依赖
6、azkaban没有依赖
7、impala 依赖hive 必须启动hive metastore服务
8、oozie 依赖于hadoop
9、hue 没有依赖

10、redis 依赖C程序 yum -y install gcc-c++
11、hbase 依赖于zookeeper以及hadoop
12、ELK 没有依赖
13、kakfa 依赖zookeeper