大数据基础-董CC

大数据基础

JAVA基础:集合,线程,IO,反射,泛型,Map(映射),JVM(1.8),GC,算法,数据结构,stream
WEB:GIT, VUE,Mysql,主从,读写分离,分库分表,索引,存储过程.
SSM:Shiro,看雷图画雷图,设计模式,servlet,生命周期,过滤,拦截,监听
JT:业务,nginx,redis(缓解数据库压力应对高并发,去状态),dubbo(zookeeper),mycat,
微服务:cloud,MQ(RabbitMQ(1.2W),RocketMQ(3-5W),Kafka(25-50W)),lucene+solr(ES)

推荐书籍: JAVA面试宝典\ 码出高效 \ Java编程思想(不建议现在看)
大数据相关书籍: Hadoop权威指南\Hadoop技术内幕\Scala程序设计\深入理解Scala\spark快速分析\Flink的原理实战与性能优化
数学科学: 李飞飞

大数据

big table ,高表和宽表的统称

应用场景

前景

项目

京淘电商用户日志流量分析系统

  1. 大数据基础理论,项目的搭建
  2. 大数据开发环境的搭建
  3. Hadoop
  4. Flume,对项目进行第一次重构
  5. Hive详解
  6. 基于Hive实现大数据离线处理,项目的第二次重构
  7. Kafka+Flink
  8. Flink
  9. 基于Flink+Kafka完成大数据的流式处理,项目的第三次重构
  10. Python及爬虫

大数据相关技术

什么是大数据? 海量数据及其处理
捕捉: 数据库捕捉,用户与系统进行交互时产生的所有数据.
大数据(big data),IT行业术语,是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的数据集合,
是需要新处理模式才能具有更强的决策力、洞察发现力和流程优化能力的海量、高增长率和多样化的信息资产。
在维克托·迈尔-舍恩伯格及肯尼斯·库克耶编写的《大数据时代》 [1] 中大数据指不用随机分析法(抽样调查)这样捷径,而采用所有数据进行分析处理。大数据的5V特点(IBM提出):Volume(大量)、Velocity(高速)、Variety(多样)、Value(低价值密度)、Veracity(真实性)。
1.数据获取
爬虫:python
历史数据: 数据仓库Hive
日志数据: log4j, Flume(收集,聚合,移动日志数据)
2.数据清洗
SQL: id name age addr select name ,age from user where addr=‘北京’
逻辑清洗: if(user != null) {…}
3.数据存储
Google: 2004年: 13
Hadoop.HDFS,用于存储海量数据,特点是高吞吐.理论上来说:没有上限,并且现在没有任何一个应用商触及过他的极限.
FastDFS

4.数据计算
data set ;数据集: 离线数据
data stream: 数据流: 流式数据
离线计算
Hadoop.mapreduce,Hive,FlinkDataSet,SparkSQL,Pig
流式计算
Flink,Spark,Storm
MQ: Kafka
数据桥梁: Sqoop
数据可视化: Echarts

简历的项目怎么写?
自研项目: 主题一致 项目可以少
达内: tmooc\ 考试系统 \ TTS \ crm\ oa
京东: 电商 金融 物流
外包
人力外包: 类型一致 项目数量要多
招商银行风控系统 浦发银行风控系统 建设银行风控系统 农业银行风控系统 工商银行风控系统 邮政银行风控系统
项目外包:
国企:
3 知识储备阶段

基础环境准备

4G内存:
hadoop01:
内存:1G
IP:192.168.65.161
8G内存:
hadoop01
内存:1G 总内存大于8G可以设置为2G
IP:192.168.65.161
hadoop02
内存:512M
IP:192.168.65.162
hadoop03
内存:512M
IP:192.168.65.163

Hadoop

是大数据行业中最重要的技术.没有之一.
主要功能有: 海量数据存储, 集群资源管理和任务调度, 离线数据的计算.

历史

搜索引擎? Google: 全文检索, 爬虫, 海量数据存储, 海量数据处理
2004年,《 google file system 》GFS《mapreduce》
Doug cutting : Nutch(爬虫,lucene) HDFS, Mapreduce
2006年,《big table》描述Google如何维护高表和宽表,Redis,MongoDB,Hbase(Hadoop data base)

HDFS

分布式海量数据存储系统. 理论上来讲,可以无限存储.可以存超大文件,并且以高吞吐的方式读,写文件.

版本

hadoop1.x: HDFS(存储),MapReduce(处理,资源管理) 64M
hadoop2.x: HDFS(存储,备份),MapReduce(处理,shuffle) ,Yarn(资源管理) 128M
hadoop3.x: HDFS(存储,纠栅法),MapReduce(处理,stream) ,Yarn(资源管理) 128M

2.7.1:HDFS(存储,备份),MapReduce(处理,shuffle) ,Yarn(资源管理) 默认,128M,备份三份

数据库连接池:
连接数 = 服务器的CPU逻辑核数*2 + n (一般情况下n=磁盘个数)

Hadoop的安装

  1. 单机模式: 上传解压安装包即可.不需要任何配置.前提是环境中有JDK,配置了JAVA_HOME,但是一般不使用.只能实现MapReduce的单元测试,HDFS和Yarn都不支持.
  2. 伪分布式模式: 在一台服务器上,用多个进程模拟各个角色(NameNode,DataNode…),需要一定的配置修改.支持所以的Hadoop功能,包括Yarn HDFS MapReduce. 但是性能较差(单机).比较适合学习和测试,生产环境不适用.
  3. 完全分布式模式: 真正的生产环境下的操作方式.安装起来相对复杂.需要大量的配置.课上不讲,在百威IT课堂中有相关视频.

可能出现的问题:
1.命令找不到:说明/etc/profile配置有问题,或者没有source
2.在初始化时出现报错信息,一般信息都非常明确,能够根据日志找到对应的错误位置.
3.初始化和启动过程都没有报错.但是进程数不够,此时可以尝试单独启动相关的进程. [root@hadoop01 sbin]# ./hadoop-daemon.sh start namenode
如果还是不能正确启动进程.需要重新格式化.流程详见第二章笔记.
如果没有成功(进程数不够)
1.stop-all.sh 停掉hadoop所有进程
2.删掉hadoop2.7.1下的tmp文件夹
3.hdfs namenode -format 重新初始化(出现successfully证明成功),如果配置文件报错,安装报错信息修改相应位置后重新执行第二步。
4.start-all.sh 启动hadoop

Yarn

Hadoop2.0版本之后出现.
资源管理,任务调度,为Hadoop提高拓展性.对MapReduce和HDFS进行了解耦.

MapReduce

是一个计算模型
包括map模块和reduce模块

flume

分布式的日志收集系统.用于收集,聚合,移动海量日志.具有简单流式数据处理结构.

重要的概念

Event: 事件,FLume接收到日志数据之后,会先将其进行封装,封装的格式就是Event : { “headers” : “自定义” , “body” : “日志本身” }
Agent: 代理,Flume集群中的每个节点都叫做Agent,代表了Flume节点内接收封装(source),缓存(channel),输出(sink)数据的整个流程.
Source: 数据源,负责接收日志数据,并将其封装为Event,输出到Channel中进行缓存.
Channel: 通道,缓存.本质是一个内置的消息队列. 用来缓存event. 被动的接收source传来的event,进行缓存,等待sink的消费.在这里,source相当于Channel的生产者,sink是channel的消费者.channel缓存一般都使用内存作为存储资源.所以通常我们会给Channel设置容量最大值.
Sink: 指定数据输出的位置,消费channel中的数据,并将其发送到目的地.

Flume的多级流动和扇入扇出

flume灵活的特点就是有这三个模式来支持的.

知识回顾

Flume分布式的日志收集系统,用于收集,聚合,移动大量的日志数据.
Event:事件,Flume接收到日志数据之后,先对其进行封装,封装结构就是Event {“headers”:“自定义”,“body”:“日志”}
Agent:代理,Flume集群中的每一个节点都叫做Agent,每个Agent中都包含三个模块,
Source:数据源,负责接收日志数据,并将其封装Event,之后将Event发送到Channel进行缓存
Channel:管道,缓存. 被动接收Source传来的数据,进行缓存,等待SInk的消费.是类似消息队列的结构.需要注意的是,缓存一般都用内存作为存储资源,所以必须要设置最大容量.
Sink:指定数据的输出位置,消费Channel中的数据.

Hive

Mapreduce海量离线数据处理中遇到的问题:

  1. 开发调试复杂,不适合要求快速得出结果的工作场景.
  2. Mapreduce用Java开发,对Java支持最好,对其他语言使用者就不够友好.
  3. 底层原理比较复杂,并且对于底层的理解,会直接影响开发代码质量.

Hive是一个基于Hadoop的数据仓库工具, 使用SQL的方式来处理离线海量数据,避免了传统MR开发的诸多问题.使海量离线数据处理变得简单.内部提供了非常丰富的函数库.供开发者使用.如果业务特别复杂,内置不能满足需求.他还支持自定义函数.(UDF).

数据仓库

数据仓库是一个面向主题的,稳定的,集成的,反映历史数据的数据存储系统,一般用于为管理者提供决策分析的数据支持.
数据仓库
有用但不常用的数据,历史数据
数据仓库的实现方式有很多,普通的文件系统,关系型非关系型数据库,等等都可以做数据仓库.但是Hive有天生的优势.1.操作方便(SQL),2.存储能力超强(HDFS),符合用空间换时间.

Hive的安装

基于Java开发. 需要JDK环境,基于Hadoop,需要Hadoop安装,HADOOP_HOME,hadoop是全量启动状态(5个进程)
生产环境下,需要有mysql的支持.

Hive中表的类型

1.内部表和外部表
内部表(托管表)Managed Table: 与我们之前熟悉的表类似.都是先创建一个表结构,然后在表中插入数据,表本身是属于Hive的,其中的数据也属于Hive
create table tb_user (id int,name string) row format delimited fields terminated by ‘,’;
外部表External Table: 与内部表正好相反, 表的数据先被保存下来,然后根据数据的格式,创建表结构,投影在数据上.其中表结构属于Hive但是表中的数据不属于.
create external tb_user (id int,name string) row format delimited fields terminated by ‘,’ location ‘/hdfs/user’;
hive中的所有表,不是内部表就是外部表.
其中内部表在删除时,数据和表结构都会被删除
外部表在删除时,只会删除表结构,数据不会被删除(数据本身不属于hive)

2.分区表
是Hive作为数据仓库,实现面向主题的唯一方式.
create table tb_par (id int,name string) partitioned by (country string, gender string) row format delimited fields terminated by ‘,’;

关于Hive对数据的维护:
1.Hive只能读到元数据库中记录了数据文件所在目录的所有数据
2.Hive同时也只关注目录,目录中到底有哪些数据.Hive不会区分.只要是目录下的文件.不管什么格式都会尝试进行读取.

3.分桶表
测试时使用,解决抽样时样本数据需要具有全局代表性的问题
create table tb_buc (id int,name string) clustered by (id) into 4 buckets row format delimited fields terminated by ‘,’;
select * from tb_buc tablesample (bucket x out of y on id);

抽取前百分之30的数据.
select *from tb_data tablesample (30 percent);

海量数据离线处理

重要指标

  1. 访问量: 以天为单位统计网站被访问次数,页面被请求一次访问量就会增加一次.
  2. 独立访客数: 以天为单位统计网站被多少个不同的用户访问.
  3. 独立会话数: 以天为单位统计网站开启了多少个不同的会话.
  4. 跳出率: 跳出是指,用户只发送了一个请求就关闭了会话.此时这个会话就是跳出的会话. 跳出率 = 跳出会话的数量 / 会话总数
  5. 新增访客数 : 通过判断当天所有的uvid在历史数据中是否出现过,没出现过的uvid就是一个新增访客.
  6. 新增IP数 : 通过判断当天所有的ip在历史数据中是否出现过,没出现过的ip就是一个新增IP.
  7. 平均访问时长 : 统计全天所有会话的在线时长,求平均数. 体现用户黏着度.
  8. 平均访问深度 : 深度是指一次会话中,用户访问的不同页面的个数.求当天所有会话的平均访问深度.

流式数据处理

Kafka

是一个消息队列,同时具备拓展功能(海量数据存储,海量数据流式处理)
activemq(6k) rabbitmq(1.2w) rocketMQ(3-5w) 理论上来讲避免了数据丢失的问题.
kafka(25-50w) 有数据丢失的可能,所以只能用于大数据,或者对数据一致性要求不高的业务中. 亿分之几
kafka只有一种模式:发布/订阅(与rabbitmq不一样)

Kafka
消息队列
海量数据存储
流式数据处理

重要概念

broker: kafka中所有的服务器节点都叫做broker. 编号规则为 从0开始的整型数字.
topic: 在kafka中,可能同时为多个项目或者业务提供消息队列的服务,也就是说会同时连接多个生产者和多个消费者.那么为了避免不同业务数据交叉,设置了主题来分别保存不同业务的数据.来进行隔离.
partition: 在主题的内部,又进行了进一步的细分,就是所谓的分区. 在一个独立的主题内部,如果业务上还有细分的话,可以将不同业务的数据存放在不同的分区. 同时,一个主题中包含多个分区,每个分区存放在不同的服务器上,本身也是一种负载均衡的体现.
leader和follower: 在分区内部,每个分区还会在其他的服务器上对数据进行备份.备份出来的数据,被称为follower 原本的分区叫做leader. 所有写入和消费数据的操作全部由leader完成.follower只负责实时同步leader的数据变化.只有leader宕机之后才会在follower中进行选举,选出新的leader保证服务可用.
ConsumerGroup: 在消费者订阅消息时,需要以组的形式来注册offset.如果该消费者需要消费所有数据,那么自己注册一个组.如果多个消费者负载均衡分摊一份数据,那么可以将这几个消费者注册为一组.
log: 在kafka中非常特殊,表示的并不是日志,而是kafka存储的数据,生产者将数据写入kafka后以event的形式封装,在kafka内部叫做log

Kafka的安装和测试

  1. 基础环境: JDK(Scala开发java的衍生语言,编译.class,在jvm上运行),zookeeper支持.

数据传输的三种语义

  1. at-most-once:至多发送一次,优点:效率高, 缺点:不能保证数据一致 ,适用于广告推送
  2. at-least-once : 至少成功一次 , 有点: 能够保证所有数据的一致性, 缺点,效率低, 适用于金融,交易等数据价值较高的场景.
  3. exactly-once : 精确一次,(一次一致性), 通过checkpoint或者ACK或者幂等的方式 实现数据从a到b只发送一次,并且准确.

Flink

Flink是一个海量数据处理框架,支持离线计算和流式计算.是目前最新的也是性能最强的大数据处理框架.开源与18年之前,2019.1月Flink开发团队被Alibaba收购,开发了Flink的分支Blink运行在淘宝,天猫,蚂蚁金服等线上系统中,参与支持了2019年双十一. 在国内受到T0 T1级企业的青睐. 19年12月,阿里又将经过线上验证的版本开源至Apache.同期,开源了基于Flink体系的机器学习框架Alink.
大数据计算框架的历史:

  1. MapReduce:只能做离线计算
  2. Storm: 真正意义上的流式处理框架
  3. Spark: 流式数据处理框架,采用微批的方式提高吞吐
  4. Flink: 流式,离线通用.

CoreAPI

DataSet

专门用于处理离线数据.批量计算.
环境: ExecutionEnvironment.getExecutionEnvironment()

source:常用的:

  •  readTextFile(path) / TextInputFormat - Reads files line wise and returns them as Strings.(读本地文件或HDFS上的数据)
  • fromCollection(Collection) - Creates a data set from a Java.util.Collection. All elements in the collection must be of the same type.(从数据库读数据,如返回一个list)
  • fromElements(T …) - Creates a data set from the given sequence of objects. All objects must be of the same type.(常用于测试)

官网:https://ci.apache.org/projects/flink/flink-docs-release-1.13/zh/docs/dev/dataset/overview/#data-sources

transformation
sink

DataStream

将流式数据和离线数据都转化为数据流进行计算,主要负责流式数据处理.
在某些时候需要批流结合计算,所以DataStream中也支持离线数据的计算.

Tuple

元组,是函数式编程语言中非常常见的一种数据存储结构.
(“hello”,“world”,1,2.3,new Person())

Windows

滚动窗口
滑动窗口
迟到:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值