大数据相关
2019-02-27 14:36:03 1 举报
AI智能生成
大数据关系及其配件图
作者其他创作
大纲/内容
HIVE
内部表与外部表
内部表
使用HIVE语句创建的表并且在HIVE里插入数据
外部表
在HIVE里面创建表引入外部数据,例如HDFS中的数据
分区表
当普通表数据量太大时需要建立分区
基本操作语句
插入
HDFS不支持数据修改和删除,但是支持追加
实际调用的是MapReduce
加载文件到指定表里
hive的工作原理实际上就是在管理hdfs上的文件
创建表,并指定分割符
创建表并复制其他表结构
重命名表
为表增加字段
Hive数据类型
基本数据类型
int
boolean
float
double
string
复杂数据类型
array
数组
map
key-value
struct
相当于一个对象,可以通过对象.属性来访问
常用函数
length(string A)
返回字符串A的长度
reverse(string A)
返回字符串A的反转结果
concat(string A,string B)
字符串连接函数
concat_ws(string SEP,string A,string B.....)
带分隔符字符串连接函数
substr
select substr('abcde',2);从第二个截,截到结尾
select substr('abcde',1,3);从第一个截,截三个长度
select substr('wfeww',-2);从尾部截,截两个长度
upper(string A)
ucase(string A)
ucase(string A)
转大写
lower(string a)
lcase(string a)
lcase(string a)
转小写
trim(string a)
去空格
UDP
自定义函数
Kafka
Zookeeper
通过zookeeper来存储集群的meta信息
zookeeper的/brokers/../state节点存储了该partiton的leader
Producer
消息生产者,发布消息到kafka集群或终端的服务
broker
controller
kafka集群中的其中一个服务器,用来进行leader election以及failover
controller进程随机在某台Broker启动
topic
每条发布到kafka集群的消息属于的类别,即kafka是面向topic的
partition
分区
每个topic包含多个分区
每个partiton在物理上对应一个文件夹
replica
分区的副本,保障partition的高可用
保障数据的可靠性
leader
producer和consumer只跟leader交互
推送和返回ack
follower
从leader中复制数据
Consumer group
消费者组,消费者线程都归属于某个消费者组
consumer
offset
记录消费到哪里
Hadoop
HDFS
NameNode
Edits
操作日志文件,记录了NameNode所要执行的操作
Fsimage
元数据镜像文件。存储NameNode元数据信息,并不是实时同步内存中的数据
fstime
保存最近一次checkpoint的时间
HDFS启动时,每个DataNode向NameNode汇报信息,如果文件不完整,HDFS会进入安全模式,修复完成后,安全模式自动退出,安全模式只能对外读,不能写
SeconderyNameNode
不是热备份,而是协助NameNode进行元数据合并
合并时机默认3600秒
edits log大小默认64MB
DataNode
Block
默认128M
存储目录:dfs/data/current/BP-1998993700.....
会不断向NameNode发送心跳报告
启动时会将当前存储数据块信息告知NameNode节点
心跳是3秒一次:包含这个节点状态以及数据块信息
10分钟没发送心跳NameNode会认为节点lost,NameNode会copy这个DataNode上的Block到其他节点上
Replication默认是三个
MapReduce
JobTracker/ResourceManager:任务调度,管理多个TaskTracker.ResourceManager是Hadoop2.0后引入yarn管理机制
Tasktracker/NodeManager:任务执行者
任务流程
从HDFS中获取数据
MapReduce会将输入数据进行逻辑切片,每一个切片是一个InputSplit对象
每一个InputSplit对象会交给一个MapTask来执行
切片中每一行数据都会出发一次map方法
map方法的输入的键默认为数据偏移量,输入的值为这一行的数据;输出的键以及值的类型根据业务确定
在Barrier阶段,会将所有相同的键所对应的值放入一个ArrayList中,然后产生一个迭代器交给ReduceTask来执行
在ReduceTask中,每一个键都会触发一次reduce方法
将结果写到HDFS中
Mapper
MapTask在接收到FileSplit之后按行读取
每一个切片对应一个MapTask,每一个MapTask对应一个缓冲区
每读取一次调用一次map方法
执行完毕输出到缓冲区
缓冲区默认100M,可以通过io.sort.mb来进行调节
缓冲区中,会对数据进行分区-partition,排序 -sort,合并 -combine操作
缓冲区利用率达到0.8是,会启动一个后台线程将缓冲区写到指定目录的溢写文件中,过程称之为spill
每次spill都会产生一个新的溢写文件
所有数据写完后对溢写文件进行合并(merge),如果文件个数>=3,合并完成之后再执行一次Combiner
Reducer
ReduceTask通过HTTP的方式来得到输出文件的分区,这个过程称之为fetch
每一个ReduceTask将获取的分区的数据再次进行merge,然后进行排序
将相同的key做聚合,将值放入迭代器中,这一步称之为grouping
调用reduce方法,将key和迭代器传入
fetch默认线程数是5
ReduceTask的阈值为5,%,即当5%的MapTask完成之后,ReduceTask就开始启动
Merge因子默认为10,即每10个文件合并成一个文件
shuffle调优
map阶段
调大缓冲区,一般调为250~350M
可以引入combine过程
merge之后的文件可以进行压缩,减少网络传输的消耗
Reduce阶段
增多fetch的线程数
降低ReduceTask的阈值
提高merge因子
Yarn
将JobTracker和TaskTacker进行分离
ResourceManager
scheduler
调度器
纯调度器,不负责监视,也不负责任务失败重启
Containner
表示一个动态资源分配单位,将内存,CPU封装在一起
是YARN中的资源抽象,它封装了某个节点上的内存、CPU资源
Application Manager向Resourc Manager申请资源时,Resource Manager为Application Manager返回的资是用Container表示
YARN会为每一个任务分配一个Container,且该任务只能使用该Container中描述的资源
Applications Manager
应用程序管理器
负责整个系统中所有应用程序
任务提交
与调度器协商资源
监控App运行状态并在失败时重启
NodeManager
NM是每个节点上的资源和任务管理器
会定时向RM汇报本节点上的资源使用情况和各个Containner的运行状态
接收来自AM的Containner启动/停止等各种请求
HBase
Zookeeper
存放整个Hbase集群的元数据以及集群的状态信息。以及Region Server服务器的运行状态
实现HMaster主备节点的failover(失效备援)
(/hbase/meta-region-server)中存储了metaTable的位置,缓存到客户端中
HMaster
管理HRegionServer,实现负载均衡
管理和分配Hregion,比如在HRegion split时分配新的HRegion,在HRegion Server退出时迁移其内的HRegion到其他HRegionServer上
实现DDL操作(Data Definition Language,namespace和table的增删修改,colum和familiy的增删改等)
管理namespace和table的元数据(实际存储在HDFS上)
权限控制(ACL)
HRegion Server
存放和管理本地HRegion
HRegion
一个Table在行的方向上分割为多个HRegion
每个HRegion达到一定大小开始分割,默认为10GB,分割流程:
每一个表开始只有一个HRegion,随着数量增大达到阈值,就会等分成两个新的HRegion
Table中的行不断增多,就会有越来越多的HRegion
是分布式存储最小单位
Hstore
多个Hstore组成HRegion
对应一个列族 columns familiy
memStore
StoreFile(Hfile)
是存储最小单位
WAL(Write Ahead Log)
早期版本为Hlog
早期版本为Hlog
所有写操作都先写入这个文件中,然后才会更新到memStore,最后写入Hfile中
每个HRegionServer都有一个这个文件,保证宕机后依然可以从log文件中恢复数据,Replay所有操作
读写HDFS,管理Table中的数据
Client直接通过HRegioServer读写数据(从HMaster中获取元数据,找到RowKey所在的HRgion/HRegionServer)
BlockCache
读缓存
Strom
Topology
Spout
数据源的生成者,将数据转化成一个个tuple,并将tuple作为数据流进行发射
Stream
由无限制连续的tuple组成的序列,tuple是Storm最核心的数据结构,每个Tuple都是包含了一个或者多个键值对的列表
分组方式
Shuffle Grouping
随机分发元组到Bolt,并保证每个Bolt获得相等数量的元组
Fields Grouping
根据指定的字段分割数据流并分组。例如a,具有该字段的Tuple被分到相同的Bolt
All Grouping
对于每一个Tuple来说,所有的Bolt都会收到,所有Tuple被复制到Bolt的所有任务上,小心使用该分组
Global Grouping
全部的流都分到唯一个一个Bolt上,就是分配给ID最小的Task
不分组
目前无分组等效于随机分组,一般不使用这种方式
Bolt
将数据流作为输入
运算后选择性的输出一个或者多个数据流
nimbus
主要职责:
管理、协调、监控再集群上运行的topology,包括topology的发布,任务指派,事件处理失败时重新指派任务
将topology发布到Storm集群
指派task(bolt和spout)实例到每个supervisor并且发送信号指示supervisor生成足够的worker来执行指派的task
Zookeeper
并不用来传递消息,所以压力低
Supervisor
Workers--JVM进程
可以配置一个或者多个worker,一个Topology会费配到一个或者多个worker运行
每一个工作进程执行一个Topology的一个子集
Executor--执行线程
Worker的jvm中运行的java线程,Storm默认会给每个executor分配一个task
Task--spout或者Bolt的实例
spout和bolt的实例,他们的nextTupele()和execute()方法会被executors线程调用执行
0 条评论
下一页