大数据的核心:
海量数据分析
—————————————————————功能划分—————————————————————————————
海量数据存储
HDFS,Hive(本质还是HDFS),HBASE(底层依旧是HDFS)
数据清洗
MapReduce,Hive(ETL),SparkCore
海量数据分析
MapReduce,SparkSQL,hive(SQL),impala
数据展示
javaweb,帆软,hcharts,echarts
幽梦,百度,帆软
————————————第一方面:大数据离线分析————————————————————————————————————————————————
Hadoop 2.x(Common,HDFS,MapReduce,Yarn):
储存,分析
环境搭建,处理数据思想
功能:
储存数据(HDFS)
数据分析(mapReduce)
介绍:
Apache的顶级项目
包含的模块:
Common:公共的工具,为其他模块提供支撑
HDFS:是一个分布式文件系统,提供高吞吐量数据储存
将数据化为很多小块,默认一块block(128MB)500M分4块,每块存储3份
主节点:NameNode
决定数据存储在那个Datanode
管理元素,索引
管理元数据
存在内存,也存在磁盘,就是文件<fsimage>
管理从节点
处理客户端发过来的请求
启动过程:
加载Fsimage中内容到内存中,同步HDFS的变化
SecondaryNameNode功能:
辅助nameNode同步本地元数据
fsimge(old)+edits = fsimage(new)
edits记录了HDFS的修改操作,不能丢失,通过edits日志文件信息,可以解析得到元数据
合并过程中,合并到fs.temp文件,完成后修改名字为fsimage删除fs.temp
从节点:DataNode
存储,管理(当前机器)
MapReduce:大数据集合的并行计算,分而治之思想
将数据划分为多个部分,单独处理,最后将处理结果进行合并
Map:(MapTask)
处理数据
Reduce:(ReduceTask)
合并MapTask输出的结果数据
MapReduce编程
1)工程导入
2)HDFS API
3)MapReduce处理数据流程
在整个MapRedue程序中,所有的数据流程流式都是键值对(Key-value)
MapReduce执行过程
Input->Map->shuffle->Reduce->Output
Input:读取HDFS上数据 输出K,v
Mapper:通过空格分隔,取出里面的单词
shuffle:分区
决定key交由哪个reduce处理
默认:按照key的hash值对reduce个数取余
分组 将相同Key的value放到一个集合中
排序 按照字典顺序排序
****************优化:
combiner合并
在map阶段提前进行了一次合并,等同于提前执行reduce操作
好处:可以降低reduce的压力
不是所有程序都适合
compress压缩
减少磁盘IO以及网络IO
Reduce:(处理)将集合里面的值拿出来相加
Output:将内容写到HDFS文件中
YARN:任务调度和分布式集群资源管理框架
管理CPU和内存,分配给MapReduce 程序的运行
主节点:Resourcemanager
管理子
相应客户要求
任务调度
存节点:NodeManager
管理当前机器的资源(CUP,memory)
程序提交到yarn上运行只有一种方法bin/yarn jar
bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar wordcount /datas/tmp/wordcount /datas/mapreduce/output1
8088 和 50070 上查看
数据类型:
和java相似只是重新封装了一些类型
BooleanWritable 布尔
ByteWritable 单字节
IntWritable 整数
FloatWritable 浮点
LongWritable 长整数
Text UTF8格式文本
NullWritable <key,value>中为空时使用
类型转换 ->get
<-set
————————————————————————————————————————————————————————————
达梦数据库:1,通用性
兼容多种硬件体系
2,高性能
支持列式存储,数据压缩,物化视图等面向联机事务分析场景的优化选项,支持2000个以上的高并发处理
3,高可用
可配置数据守护系统(主备),自动快速故障恢复,具有强大的容灾处理能力
支持物理备份和恢复,支持在线和离线备份,支持对库、表空间、表、归档等多种颗粒的备份,支持基于备份集的方式进行备份,支持完全备份、增量备份的备份和还原,支持基于时间点的还原
4,高可扩展
支持拓展软件包和多种工具,实现海量数据分析处理、数据共享集群(DSC)和吴共享数据库集群(MPP)等扩展功能
5,跨平台
支持主流软硬件体系(linux、windows、中标麒麟、银河麒麟等操作系统),支持主流标准接口
Hive(数据库仓库):分析数据
通过SQL语句对数据进行操作,SQL和MySQL的SQL基本一样
底层是mapreduce
功能:
将sql语句转换成MapReduce程序,并且提交到Yarn上运行,读取HDFS上的数据进行处理
分析数据的流程:
1)创建数据库,创建表
2)加载数据
方式一:
加载本地local数据:hdfs put
Load data local input 'Inpath' into table "目标表"
加载HDFS数据:hdfs mv
LOAD DATA INPATH 'Inpath' INTO TABLE “目标表”;
方式二:
直接使用HDFS中普通命令上传
将数据上传到对应目录
3)编写SQL分析数据
4)数据的保存
传递参数
UDF: 一对一
UDAT:多对一
UDTF: 一对多
****数据倾斜:
hive中的数据倾斜也就是MapReduce的数据倾斜
现象:
当某一种key的值数量过多,导致处理该key的reduce迟迟不能结束
原因:
join
map join
小表与大表join
reduce join
大表与小表join
SMB join
桶join
group by/distinct
参考:
https://blog.youkuaiyun.com/weixin_45289456/article/details/98663556
解决:
1)开启提前聚合
有数据倾斜的时候进行负载均衡,当选项设定为true,生成的查询计划有俩个
2)添加随机分布reduce
执行2个MapReduce
mr1:输出之前key加随机数(位数一样)
mr2:输出之前key去随机数(位数一样)
------------------------------------------------------------
协作框架: sqoop:桥梁(HDFS<--->RDBMS)
本身就是一个MapReduce程序,只有Map任务(sql+hadoop)
用于RDBMS与HDFS之间数据导入导出
Flume:采集数据,可以在多台机器上运行多个flume, 简单,就是一个配置文件
采集日志文件数据,动态采集日志文件,数据流
flum采集到的数据,一份给HDFS,用于做离线分析
一份给Kafaka,实时处理
三大高级组件:拦截器与spring中拦截器相似
1)时间拦截器
2)主机名拦截器
3)自定义拦截器
通过自定义正则表达式,实现数据过滤
Failover sink processor故障转移:
启动多个,但是工作的只有一个,只有active状态进程死掉,其他才可能接替工作,
多个sink,谁权重,谁先干活
往HDFS写数据,HDFS宕机了,数据不丢失,往文件里写
load balancing sink processor负载均衡:
负载均衡与故障转移,只能实现一个,不能同时实现,往往选择负载均衡
------------------------------------------------------------
调度框架: zakaban:
优点:想对比较全面,操作性想对比较好
特点:
分布式多执行器
mysql重试:元数据放在mysql中
友好的UI
数据触发器
高安全性
支持插件,能从web Ui操作创建人物
完整的人员管理系统
组件:
web server
提供用户访问的接口,接收用户提交的工作流程,实现工作流的监控
executor
执行用户提交的工作流任务
mysql
用于储存所有的工作流信息,状态,日志
定时任务
Crontab(Linux自带)
Zookeeper :布式应用程序协调服务
HBASE数据库: NOSQL数据库:
不仅仅是数据库,将数据存储在内存中
产生数据时代的3v:
1海量数据 2多样数据库 3数据实时
互联网3高:
1高并发 2高扩展 3高性能
特点:易扩展,大数据量,高性能,灵活性,高可用
理论:
*************************关系数据库理论:事务管理(ACID)
原子性:一个不可分割的工作单位
一致性:事务前后数据完全一致
隔离性:不被其他事务操作数据所干扰
持久性:事务一旦被提交,对数据库中的改变就是永久的,数据库发生故障也不影响
分布式系统:CAP
Consistency(一致性)
Availability(可用性)
Partition Tolerance(分区容错性)
********************分类:
1)key-value键值
*Redice
键值对存储,查询快
内容缓存,主要用于处理大数据的高访问负载,也用于一些日志系统等等
2)colunmn列式存储
*HBase
将同一列的数据放在一起,查询非常快
3)document文档存储
*MongoDB 主要用于应用爬虫,JSON组成的文档
经典用于web项目中,与KeyValue类似
4)Graph 图结构存储
*neo4j
用于社交网络
redis:单线程框架 客户端调用都经历,发送命令,执行命令,返回结果 支持高并发
*********************单线程是纯内存访问,非阻塞IO,单线程避免线程切换和竞态产生的消耗
数据类型:
1)String字符串
2)hash哈希
3)List列表
4)set集合
5)zset有序集合
redis事务:
三阶段:
开启 入队 执行
事务5种情况
1)正常执行
2)放弃事务
3)全体连坐:语法错误导致,比如set key
4)冤头债主:错的不执行,运行才发生错误,对字符串+1
5)watch监控:事务开始之前监控,被其他客户修改了,事务不再执行,直接返回失败
**********************秒杀需求
数据持久化
--------------------------------------------------------------
扩展前沿框架:
Impala:游戏公司用的多,耗内存
用来做数据分析
ElaticSearch(ES)
检索的框架
相当于数据库,即可存储数据库,也可以检索数据
第二方面:大数据实时分析
Scala语言:OOP+FP
Spark Core, SQL, Streaming
Kafka:消息队列
Flink:前沿框架
第三方面:机器学习
Spark MLib
————————————————————————————————————————————————————————
学大数据统计是为了:
让数据变现
具体的体现
维度:
分析任何的指标都会有唯独信息,没有唯独信息的指标意义不大,
cdh版本的好处
1)兼容性问题解决
2)框架的坑少
————————————————————————————————————————————————————————
网站日志的来源
web 容器日志:
接收用户请求并记录
缺点:
收集数据比较少
服务器端字段
主机名,请求的域名,时间
客户端字段
ip,url,refere_url,条件
JS 埋点:
通过JS监听用户的操作行为
JS将收集好的数据发送日志服务器:nginx
优点:
可以采集到客户端所有的用户数据
登陆信息
cookie
项目架构选型和集群规划
处理流程:
数据源
关系型数据库
表:订单,用户,地址。。。
日志文件
页面数据,埋点数据
数据采集
sqoop,kettle
flume
kafka:主要用于实时的数据流处理,消息队列,缓存
shell
数据存储
HDFS,hive,hbase(列式存储的数据库)
数据清洗
Mapreduce,hive(ETL),sparkCore
数据处理(分析)
SparkSQL,hive,mapreduce,impala
数据应用(展示)
。。。。。。帆软
——————————————————————————————————————————————————————————————————————
架构逻辑
1)用户访问不同的客户端,触发不同的SDK(前端,IOS,Android)
2)SDK收集所有需要的数据,发送给nginx日志服务器(后台开发)
3)nginx服务器接收SDK发送过来的日志,并记录下来(后台开发)
4)使用flume采集所有日志节点上的数据到HDFS统一存放
5)使用MapReduce对数据进行ETL
6)使用MapReduce对ETL之后的数据构建分析模型(Hive)
按照需求(topic)构建表
7)使用Hive对模型数据进行指标分析
8)将Hive分析结果导出Mysql中
——————————————————————————————————————————————————————————————————————————
数据量大小(中小型电商网站为例)
访客数:200~500W
页面上:(平均值)
电商:20~40个页面
记录大小:300~1000字节
20个字段:400字节
一条的数据量:
记录数:300W *20 = 6000W
数据大小:60000000 * 0.5kb=30GB
常规的中小型公司一天的数据量:20GB~40GB
数据存储3年
30GB * 365 * 3 * 3(3份)= 98TB
一台机器:8 *2 = 16TB
可用空间:16TB *80% = 12TB
DataNode:90 /12 = 8 + (1~3) = 9~11台
公司业务发展比较快,准备的机器就会稍微多一些
——————————————————————————————————————————————————————————————————
所有集群台数
DataNode、Nodemanager、RegionServer:9~11台
Namenode + ResourceManager、HMaster:3~4台
node1: Namenode(active)
node2: Namenode/ ResourceManager(standby)
node3: ResourceManager(active)
Hive、azkaban:2台
hive需要的资源比较少,就是一个MapReduce客户端,所有可以和其他工具放一起
client(beeline) ->hiverserver2 ->metastore
zookeeper:3台、5台
机器的选择
8核16GB 、16核32GB 、32核64GB、32核128GB
Yarn:计算
task:1核1GB
NameNode:16GB
RegionServer(16GB)
系统盘/数据盘:普通硬盘
元数据存储的硬盘/zookeeper的硬盘:SSD
————————————————————————————————————————————————————————————--
ETL的实现
数据过滤:肯定用不到或者非常数据
字段格式化:
字段处理,日期处理
字段补全
解析字段:
ip:省市区信息
user-agent:浏览器、操作系统
提取补全
userid ->age,addr
构建Pageview模型
Map:
key value
ip 其他字段
reduce:
每一个IP调用一次Reduce方法
将所有的记录放到List
可以对所有的记录进行排序:访问时间排序
生成对应的字段
迭代整个List集合
如果list的长度为1,
直接输出结果
如果拿到的是第一条记录
i=0,跳过
循环到达第二个记录·
i=1,
sessionId = RandomUUID.toString();
step=1
length =list[i].getTime() –list[i-1].getTime
判定:length >30分钟
sessionId重置
step=1
如果I = list.length-1
输出上一条和当前条
output
总结:
(1)通过MapReduce程序得到不同的模型数据
bin/yarn jar XX.max inpath,outpath
(2)导入数据
创建分区目录,
加载数据
修复分区
(3)分析数据
————————————————————————————————————————————————————————
HBeas :
大数据从入门到放弃
最新推荐文章于 2023-08-20 19:15:13 发布