大数据基础
目录
目录
前言
大数据已经渗透到了各行各业,无论是政务、金融、医疗、快消、餐饮还是零售、汽车、制造,新兴行业和传统行业都在数字化、数智化的路上探索、尝试、融汇、创新。尤其是在互联网时代,企业积累了大量数据信息,如何将数据资源转变为数据资产,从海量数据中挖掘出更高的数据价值,从而得到可持续的业务增长,已经是很多企业在当今时代面临的最重要的课题之一。为了攻克这一课题,企业必然需要招揽大量相关领域人才,而大数据分析能力正是这些人才必备的看家技能。
大数据分析有什么用?对于中层领导,它可以辅助看到业务现状,看清用户行为、市场变化,看破关键环节和增长引擎,从而可以提高用户运营效益和优质营销策略的制定。对于高层领导,它更可以辅助看透商业规律,预测未来趋势,从而做好企业的战略决策。
作为一个跨行的产品人,我希望能通过学习大数据分析的技术、思维和方法,增强对市场和业务的洞察,辅助做出更优质的决策。并且考虑之后转型数据分析师。
以下是参加一些课程培训后做的课程笔记,记录以供日后复习,若有些内容不当,请联系我侵删或者调整,谢谢。
一、大数据是什么
大数据的定义:
- 无法在可承受的时间范围内用常规软件工具进行捕捉、管理和处理的数据集合。
- 需要新处理模式才能具有更强的决策力、洞察发现力、流程优化能力的海量、高增长率和多样化的信息资产。
大数据的处理思路:
- 将问题拆解为多个可简单求解的小问题。针对小问题逐一攻破。
云计算与大数据:
- 云计算提供存储与计算的基础设施,大数据是运行在其上的应用。
大数据的产生和发展:
- 1663年,John Graunt 统计学黑死病传播与老鼠有关,黑死病预警
- 1865年,Henry Furnese 结构化方式手机分析竞争对手的商业活动,第一次数据分析的商业应用、
- 1880年,Herman Hollerith美国人口普查局工程师打孔卡制表机缩短工作时间,ibm前身
- 2005年,hadoop开源框架创建,可以处理语音视频非结构化数据
- 2013年,阿里云成为世界上第一个对外提供5k云计算服务能力的公司
- 2014年,spark, storm, flink成为apache开源项目,流式计算引擎逐渐投入应用。
大数据的特征:4V
- Volume 体量巨大,pb-eb级数量
- Variety 种类多样。结构、非结构化数据,来源等
- Value 价值密度低。从大量数据中找到某个有价值的数据。
- Velocity 处理速度快,秒级给出结果
大数据在城市治理中的应用:
- 通过数据感知城市交通态势,联通信号灯减少通行时间,事故事件自动报警,提高执法效率。
二、大数据分析是什么
大数据分析的概念:
- 数据分析是基于商业等目的,有目的的进行收集、整理、加工、分析数据,提炼有价值信息的过程。
- 大数据分析针对的是海量多样化数据集合。
- 大数据分析的过程:
- 需求分析,明确目的
- 数据收集,加工处理
- 数据分析,展现
- 分析报告,提炼价值
大数据分析方法分类:
- 描述型分析:发生了什么?
- 探索分布,数据可视化
- 指标:总量指标、相对指标、平均指标
- 诊断型分析:为什么会发生?
- 钻取数据核心,对混乱信息分离
- 预测型分析:可能发生什么?
- 算法保证历史模型能够预测特定结果,自动生成决定
- 指令型分析:下步怎么做?
- 依据测试结果选定最佳的行为和策略,应用先进的分析技术帮助决策
大数据分析流程总览
- 数据采集与预处理
- 对原始数据出现的噪声进行修复、平滑或者剔除
- 清洗:
- 异常值:箱线图、turkey's test检验是否存在,可以删除、当作缺失值、忽略
- 缺失值:统计值填充、固定值填充、最接近记录填充、模型拟合填充、插值填充
- 重复记录:删除
- 错误记录:缺失值处理
- 数据存储与管理
- 单硬盘存储---> 磁盘阵列(raid)---> 分布式存储(多台机器基于网络连接储存数据)
- 数据计算
- 从单机计算进入集群计算
- 批量计算:
- 数据批量装载,外界发起计算请求,每次计算一批。
- 特点:批量、高延时、主动触发计算。
- 使用场景:离线计算场景。
- 工具:sql,hadoop(mapreduce,hive sql, spark),阿里云maxcompute+dataworks (mapreduce, maxcompute sql,graph)
- 流式计算:
- 计算作业运行等待,数据流到计算作业触发计算,一次计算一条数据。
- 特点:持续、低延时、事件触发计算。
- 使用场景:实时性要求高的场景。
- 工具:apache storm,spark streaming, flink
- 数据应用
- 利用计算机图形学和图像处理技术,将数据转换为图形或者图像在屏幕上显示出来进行交互处理的理论方法和技术。借助图形化手段,清晰有效地传达与沟通信息。
三、关系型数据库与数据仓库
关系型数据库
- 1970年IBM Edgar Codd发表著名跨时代论文,开启关系型数据库的时代。
- 数据库:存储数据;
- 数据仓库:分析数据;
- 数据库引擎:甲骨文oracle, mysql, sql server, ibm, postgresql
- 数据仓库:分析数据;
- 数据库:存储数据;
数据库系统构成:
- 运行环境、数据库、数据库管理系统、用户
数据库设计的三范式:
- 原子性(不重复每一列都是不可分割的数据项)
- 唯一性(主键)
- 独立性
五大约束:
- 主键约束
- 外关键字约束
- 唯一性约束
- 检查约束(域)
- 缺省约束(默认值)
数据仓库:
- 面向主题的、集成的、随着时间变化的、用于管理决策支持的不可更新的数据集合
数据仓库的特征:
- 面向主题:与主题相关的数据
- 集成:从不同的数据源采集数据到同一个数据源,一致命名约定、格式、编码结构。
- 随时间变化:关键数据隐式、显示地基于时间变化,可以研究趋势和变化。
- 不可改变:只读,定期刷新。
数据仓库模型:
- 事实表+维度表的关系
- 星型模型:以事实表为核心,维度表围绕核心星星形分布。维度表只和事实表关联
- 雪花型模型:维度表可以关联子维度表
数据仓库的系统结构通常包括四个层次,分别是
- 数据源
- 数据的存储与管理
- 联机分析处理服务器
- 前端工具
etl:将分散凌乱标准不同的数据整合
- 抽取:可能也有清洗转换,抽取到ods
- 转化:清洗。可以使用sql,etl工具,或者两者结合
- 加载:写道数据仓库中
Oltp/olap:
- 在线交易处理系统Oltp
- 事务处理,增删改,数据库的应用
- 在线分析处理系统Olap
- 分析处理,查询,数据仓库的应用
NoSQL数据库
- 键值型数据库key-value : 频繁读写,简单数据模型的应用
- 文档数据库:灵活性设计,适合存储不同的属性和大量数据,例如适合后台频繁读写的网站管理数据类型和变量属性,比如产品跟踪元数据的变量类型使用jason结构应用,类似结构套结构等非规范化数据应用
- 列族数据库:大量数据,保证读取和写入的高性能高可用
- 图形数据库:网络实体链接
四、开源大数据平台Hadoop
1. hadoop的简介
- 在计算机硬件的集群上存储数据、运行应用程序的开源的软件框架。
- 特性:
- 高可靠性;高扩展性;高效性;高容错性(自动多个副本);低成本;
- 生态组成
- Hadoop1.x和Hadoop2.x区别
- hdfs和common辅助工具相同,2.x新增了yarn 资源调度,mapreduce仅负责计算了。
- 1.x里mapreduce既要负责计算也要负责资源调度。
2. HDFS
分布式文件系统HDFS:hadoop distributed file system
- 适合一次写入,多次读出的场景,不支持文件的修改。适合做数据分析,不适合做网盘应用。
- hdfs只允许一个文件有一个写入者,不支持并发写入和文件随机修改。只能做追加操作。不适合做低延迟的数据访问操作。不适合大量小文件的存储。
- 是抽象系统的一种实现。
- 文件的存储和管理,典型大小为GB~tb级别,甚至PB级别。
- 分布式架构,除了低成本,还适合海量数据存储,适合批处理操作,高容错避免丢失。
- 理论存储上限无穷大,实际存储时不会占过多扇区空间
- 数据块(每个块512字节,新版是128M,老的是64M),”分类书籍整箱“
- 寻址时间为传输时间的1%,则为最佳状态。目前磁盘传输速率普遍100m/s。块的大小等于传输速率*传输时间。块太小,会增加寻址时间,块太大会增加磁盘传输数据时间导致处理非常慢。
- Client客户端:
- 文件切片;与namenode交互获得文件位置信息;与datanode交互读取或者写入数据;提供命令来管理hdfs,比如namenode格式化;通过命令访问hdfs,对其增删改查;
- 常用命令操作:
- Ls 显示目录信息; mkdir 创建目录
- cd.切换目录
- namenode管理命名系统,
- 记录各个块所在数据节点信息向datanode发指令;
- namenode可以有一个standby的namenode,只有一个namenode active,当网速/故障状态时就会启用standby的namenode;standby时是可作为datanode的;
- 第二个namenode可以定期合并fsimage和edits并推送给namenode
- 第二个namenode不是在一个挂掉时马上替换namenode提供服务,而是辅助恢复。
- metadata元数据采用元数据镜像文件(fsimage)+日志文件(edits)的备份机制
- datanode根据namenode指令进行存储检查;datanode有备份,如果出错可以查备份;
- 为了处理节点故障,通常备份3个副本,分别
- 第一块:在本地的HDFS目录下存储一个Block。
- 第二块:不同机架的某一个DataNode上存储一个Block。
- 第三块:在该机器的同一个机架下的某台机器上存储最后一个Block。
- HDFS 小文件弊端解决:
- 小文件占用namenode空间,索引文件过大使得索引速度变慢
- 合并小文件再上传hdfs
- 在业务处理前,在hdfs上用mapreduce对小文件合并
- mapreduce处理时采用combine text input format提高效率
- jvm重用
-
3. Mapreduce
-
分布式处理框架mapreduce:
- 用于大规模数据集的并行运算的编程模型。自动完成计算任务并行处理,自动分配任务、处理结果等。
- Map (映射)+ Reduce (化简归约)
- 分布式程序,运行在大规模计算集群上
- 不擅长实时计算,不擅长流式计算(输入数据集是静态的),不擅长dag计算(多个应用程序存在依赖关系,每个mapreduce作业的输出结果都会写入到磁盘,造成大量的磁盘IO,导致性能低下)
- 一个mapreduce编程模型只有一个map和一个reduce阶段。
- 一个mapreduce程序在分布式运行时,有三个实例进程。
- Mrappmaster: 负责整个程序的过程调度及状态协调
- Maptask:负责map阶段的整个数据处理流程
- reducetask:负责reduce阶段的整个数据处理流程
- mapreduce跑得慢的原因:
- 计算机性能:cpu, 内存,磁盘健康,网络
- I/O操作优化:数据倾斜,mapresuce数设置不合理, map运行时间太长,导致reduce等待过久,小文件过多,大量的不可分块超大文件,spill次数多,merge次数多
- mapreduce优化方法
- 数据传输:合并小文件,用combinetext
- Map阶段:减少溢写spill次数,减少合并次数,
- Reduce阶段:合理设置map,reduce数,设置共存,规避使用reduce,合理设置reduce buffer,
- IO阶段:采用数据压缩的方式,减少网络IO时间,使用sequencefile 二进制文件,
- 数据倾斜:抽样和范围分区,combine
- 基于hadoop的数据仓库工具,用来进行数据提取、转化、加载,是一种可以存储、查询、分析存储在hadoop中的大规模数据的机制。
- 可以将类似sql语句转化为mapreduce脚本在hadoop执行。
- hive数据仓库工具将结构化数据映射为一张数据表,基于静态批处理hadoop基础上,通常用于离线分析,百兆级别数据查询可能分钟级别延时。
- 不能改写数据,只能访问查询
- HIVE组件:用户接口(webui可以执行多个查询连接远程服务器,jdbc/odbc,cli命令行);元数据存储;解释器、编辑器、优化器、执行器;
- hive中的Metastore 存储表的信息,元数据库是在hbase/mysql
4. Hbase
- hbase是开发在hdfs上的分布式列式动态数据库。是谷歌bigtable的开源实现,主要用来存储非结构化和半结构化的松散数据,可实现数据存储+并行计算
- 读取列速度快,不需要读取整行,而且hbase可通过添加节点实现伸缩。
- 存的是键值对
5. Spark
- 是uc berkeley AMP 实验室,在hadoop基础上做了改良,支持java,python,sql等。速度比mapreduce快100倍。
- 擅长迭代式运算,交互式查询、流式处理等。
- 它将一些数据存储在了内存中,不需要反复读写。mapreduce在shuffle前排序很久,而它基于hash的分布式聚合,只在需要时做排序。调度开销也比较小,节约计算资源。
- app根据程序操作解析为几个jobs,然后划分不同stage,根据partition分成不同的task。
- RDD是spark核心,弹性数据分布式数据集。从hdfs里读取数据,加载到rdd存储,所有数据会被抽象为rdd。
- Spark生态可以分成伯克利数据分析栈BDAS,在核心框架spark基础上,提供四个范畴的计算框架:
6. Zookeeper
维护集群运行稳定性
- 分布式服务框架,是apacheHadoop的子项目,主要解决分布式应用常见的数据管理问题。
- 分布式协调服务,可以搭在机器节点上(通常布3个zookeeper),保证高可用性(当一个挂掉,激活另一个standby的)
- 配置同步:leader的zookeeper会监测其他server里任务运行状态,检测到修改或者节点变化时可以同步所有配置
7. Flume
- 产生、传输、处理、传入目标路径,抽象为数据流,海量日志收集系统
8. Oozie
- 工作流调度系统,可以管理java、mapreduce等多个任务流。
9. Yarn
分布式资源管理器:
- 任务调度,负责为运算程序提供服务器运算资源,相当于分布式操作系统平台,mapreduce是它上面的应用程序。
- 组成:
- resource manager RM:
- 处理客户端请求,监控nodemanager,启动或者监控application master,资源的分配和调度
- Application master
- 负责数据的切分,为应用程序申请资源并分配内部的任务,任务的监控和容错
- Node manager NM
- 管理单个节点上的资源,处理来自resource manager的命令,处理来自application master的命令
- Container
- 资源抽象,封装了某个节点上的多维度资源,如 内存,CPU,磁盘,网络
- resource manager RM:
10. Pig
- 跟mapreduce一样所有写都是批处理,流式的。不支持随机读和几十毫秒的查询,不支持针对小部分数据的随机写。
- 它是为数据批处理而设计的,如果想执行的查询只涉及一个大型数据集的一小部分数据,Pig的实现不会很好,因为它要扫描整个数据集或其中很大一部分
- 是基于的大数据分析平台,hadoop,
- 它提供语言sql like 叫pig latin,编译器可以把类sql数据转化为经过优化处理的mapreduce计算,为复杂海量的数据计算提供了简单操作和编程接口。
- Pig包括两部分:一是用于描述数据流的语言,称为Pig Latin;二是用于运行Pig Latin程序的执行环境。
11. MPP
大规模并行处理
- 在数据库集群中,首先每个节点都有独立的磁盘存储系统和内存系统,其次业务数据根据数据库模型和应用特点划分到各个节点上,MPP是将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果。
- 每个节点内的CPU不能访问另一个节点的内存,节点之间的信息交互是通过节点互联网络实现的,这个过程称为数据重分配
- MPP架构特征:
- 任务并行执行;
- 数据分布式存储(本地化);
- 分布式计算;
- 高并发,单个节点并发能力大于300用户;
- 横向扩展,支持集群节点的扩容;
- Shared Nothing(完全无共享)架构。
- 批处理架构(如 MapReduce)与MPP架构的异同
- 相同:批处理架构与MPP架构都是分布式并行处理,将任务并行的分散到多个服务器和节点上,在每个节点上计算完成后,将各自部分的结果汇总在一起得到最终的结果
- 不同:执行一个任务,首先这个任务会被分成多个task执行,对于MapReduce来说,这些tasks被随机的分配在空闲的Executor上;而对于MPP架构的引擎来说,每个处理数据的task被绑定到持有该数据切片的指定Executor上
非共享数据库集群有完全的可伸缩性、高可用、高性能、优秀的性价比、资源共享等优势。