第一周:总结
记录第一周工作内容和下一周计划。
1 什么是BI
BI全称商业智能(Business Intelligence),在传统企业中,它是一套完整的解决方案。将企业的数据有效整合,快速制作出报表以作出决策。商业智能BI在数据架构中处于前端分析的位置,其核心作用是对获取数据的多维度分析、数据的切片、数据的上钻和下钻、cube等。通过ETL数据抽取、转化形成一个完整的数据仓库、然后对数据仓库的数据进行抽取,而后是商业智能的前端分析和展示。
说白了,商业智能就是对当前数据或者历史数据进行分析,帮助决策者定制未来的业务决策,促使企业向更有利的方向发展。从技术层面上讲商业智能BI并不是什么新技术,它只是对数据仓库和数据分析,ETL等技术的综合应用。
2 什么是ETL
字面意思很明白:抽取,转换,加载。
其实ETL技术就是将业务系统中的数据抽取清洗转换之后加载到数据仓库中的过程。在BI项目中ETL是非常重要的一个环节,在整个BI项目中甚至会“花掉”1/3的时间。所以可以看书ETL设计的好坏直接直接关乎到整个BI项目的成败或者说是好坏。
E是从不同的数据源中或者系统文件中抽取数据数据到ODS(操作型数据存储)中,这个过程可以做一些数据的清洗和转换,T是清洗和转换,ETL花费时间最长的一步,L就是加载,数据清洗转换结束之后会被load到数据仓库DW中。
ETL实现的三种方式:
一种是借助ETL工具(如Oracle的OWB、SQL Server 2000的DTS、SQL Server2005的SSIS服务、Informatic等)实现,
一种是SQL方式实现,
另外一种是ETL工具和SQL相结合。
前两种方法各有各的优缺点,借助工具可以快速的建立起ETL工程,屏蔽了复杂的编码任务,提高了速度,降低了难度,但是缺少灵活性。SQL的方法优点是灵活,提高ETL运行效率,但是编码复杂,对技术要求比较高。第三种是综合了前面二种的优点,会极大地提高ETL的开发速度和效率。
集体抽取转换和清洗数据的过程参考链接:
3 什么是数据的可视化
直观的理解 数据可视化就是指将结构或非结构数据转换成适当的可视化图表,然后将隐藏在数据中的信息直接展现于人们面前。
数据可视化主要是借助于图形化手段,清晰有效地传达与沟通信息。
在数据可视化的实际操作过程中,整个过程可以分成这样几个步骤:数据清洗、数据分析、角度选择、图形运用、配色等
目前国内市面上的数据可视化工具也是存在的比如:FineBI,FineBI是为大数据量提供数据处理、ETL、Dashboard报表展示、动态分析、报表管理的可视化分析工具。
产品LEAN-BI也是一款以数据仓库为基础
4 什么是数据仓库,维度,度量?
对数据仓库和维度,以及度量的学习和理解。
4.1 数据仓库
4.1.1 概念和定义
在传统数据库中,数据库一般会和业务挂钩,所以数据库的设计一般也是根据业务需求。就比如某系统的用户管理模块,我们想要获取到某一个用户的详细信息(姓名,年龄等)很容易,但是想要分析该用户在某一时间段做了什么操作,操作了几次,仅凭用户信息这张表根本不能完成操作,我们需要修改表字段才能完成具体需求。显然这样的做法确实有点"鸡肋"。
数据仓库:DataWarehouse (DW或DWH);数据仓库从字面意思上理解就是一个存放数据的仓库,对于一个企业来说,用户信息相关数据、商品信息相关数据、操作日志相关数据、订单相关数据等等一系列的数据"存放"在一个“仓库”中,就是我们的数据仓库,有了数据仓库想要解决上面说到的问题就可以利用数据仓库进行分析解决问题,不需要改动数据库中表结构等信息。
综合上面分析可以知道数据仓库的设计其实是依照具体分析需求,以及分析的指标和维度进行设计的。数据仓库更像是数据库基础上的一种升级,它能够存储更加庞大的数据和数据集。数据仓库是为企业所有级别的决策制定过程,提供所有类型数据支撑的战略集合,主要是用于数据挖掘和数据分析,以建立数据沙盘为基础,为消灭消息孤岛和支持决策为目的而创建的。
4.1.2 特点
上面概念知道了数据仓库一依照 分析需求,分析维度,分析指标设计的,那数据仓库就一定会它自己的特点存在。
特点一:面向主题
这里的主题是一个抽象的概念,它是指用户使用数据仓库进行决策时所关心的重点方面,一个主题通常和多个操作型信息系统相关。比如阿里相关工作人员想要分析客户购物情况的,那么这里的主题就是指的购物。而购物主题包含对用户数据,订单数据,物流等数据的分析,这个主题中如果缺少其中任何一个相关数据都不能保证这个主题的完整性和一致性。
特点二:数据集成
数据仓库的数据是从不同的数据库中抽取形成的,在抽取过程中需要使用ETL相关工具对数据进行“清洗”。
特点三:不可更新
数据仓库的数据主要是提供决策分析用,涉及的数据主要是数据查询,一般情况下不做修改,这些数据反映的是一段较长时间内历史数据的内容,有一块修改了影响的是整个历史数据的过程数据。可以看出数据仓库的数据往往会非常大,所以对数据查询提出了更高的要求,要求采用各种复杂的索引技术,并对数据查询的界面友好性和数据凸显性提出更高的要求。
特点四:随时间不断变化
上面说到的数据不可更新是针对应用来说的。从数据的进入到删除的整个生命周期中,数据仓库的数据是永远不变的。数据仓库的数据是随着时间变化而不断增加新的数据,也会随着时间变化不断删除旧的数据,这也证明了数据仓库的数据也是有时限的。
4.1.3 数据仓库和数据库区别
最根本区别:
前者面向分析,后者面向事务。
前者数据量大,后者数据量小。
4.1.4 数据仓库常用系统架构
数据仓库常用系统架构
ODS层:
临时存储层,这一层的数据是从个各个系统文本文件以及数据库中抽取的数据和源系统的数据是同构的,在这一层ETL会对数据进行简单的清洗。
DW层:
数据仓库层,从ODS层到DW层ETL会根据具体的业务需求对数据进行清洗、设计。如果没有业务需求,则根据源系统的数据结构和未来的规划去做处理。这一层的数据尽量要求一致,准确,尽量建立数据的完整性。
APP层:
引用层,这一层的数据ETL会对数据进行最后的清洗设计,形成提供报表和数据沙盘展示所需的数据。
数据仓库分层的好处:
数据分层能够简化ETL对数据清洗和设计的过程,每一层的逻辑变得更加简单和易于理解。
4.2 维度和指标
维度和指标是数据分析领域常用的概念,亦是在设计数据仓库过程中需要考虑的。
维度就是数据的观察角度,即从哪个角度去分析问题,看待问题
指标,即度量,就是从维度的基础上去衡算这个结果的值。
维度一般是一个离散的值,比如时间维度上每一个独立的日期或地域,因此统计时,可以把维度相同记录的聚合在一起,应用聚合函数做累加、均值、最大值、最小值等聚合计算。
指标(度量)就是被聚合的通计算,即聚合运算的结果,一般是一个连续的值。
5 SQL的学习
SQL是一门计算机语言,这次学习主要是巩固一些SQL基础和一些常见的SQL查询,以及一些SQL优化问题。
SQL优化总结:
6 分布式原理
分布式系统的基本概念:
所谓分布式系统顾名思义就是利用多台计算机协同解决单台计算机所不能解决的计算、存储等 问题。它是由一组通过网络进行通信、为了完成共同的任务而协调工作的计算机节点组成的系统。分布式系统的出现是为了用廉价的、普通的机器完成单个计算机无法完成的计算、存储任务。其目的是利用更多的机器,处理更多的数据。
什么时候需要考虑分布式:
只有当单个节点的处理能力无法满足日益增长的计算、存储任务的时候,且硬件的提升(加内存、加磁盘、使用更好的CPU)高昂到得不偿失的时候,应用程序也不能进一步优化的时候,我们才需要考虑分布式系统。因为,分布式系统要解决的问题本身就是和单机系统一样的,而由于分布式系统多节点、通过网络通信的拓扑结构,会引入很多单机系统没有的问题,为了解决这些问题又会引入更多的机制、协议。
分布式的的问题:
分布式的一些问题来自于不确定性
因为分布式系统需要大量的机器相互协作工作。所以就可能遇到以下问题:
1 异构的机器与网络
机器配置不一样,甚至语言不一样,所以导致机器处理能力不一样,节点间通过网络连接,而不同网络运营商提供的网络的带宽、延时、丢包率又不一样。想要在这种情况下保证所以机器共同完成一个任务,难度可想而知。
2 节点故障:
分布式系统需要保证故障发生的时候,系统仍然是可用的,这就需要监控节点的状态,在节点故障的情况下将该节点负责的计算、存储任务转移到其他节点。
3 网络的不可靠
节点间通过网络通信,而网络是不可靠的。可能的网络问题包括:网络分割、延时、丢包、乱序。网络问题中最难搞的应该是网络超时。节点A向节点B发出请求,在约定的时间内没有收到节点B的响应,那么B是否处理了请求,这个是不确定的,这个不确定就导致我们要不要考虑请求的重试,如果重试会不会导致B节点处理多次请求?
衡量分布式系统的标准:
可扩展性:分布式系统的根本目标就是为了处理单个计算机无法处理的任务,当任务增加的时候,分布式系统的处理能力需要随之增加。简单来说,要比较方便的通过增加机器来应对数据量的增长,同时,当任务规模缩减的时候,可以撤掉一些多余的机器,达到动态伸缩的效果
可用性与可靠性:一般来说,分布式系统是需要长时间甚至7*24小时提供服务的。可用性是指系统在各种情况对外提供服务的能力,简单来说,可以通过不可用时间与正常服务时间的必知来衡量;而可靠性而是指计算结果正确、存储的数据不丢失。
高性能:不管是单机还是分布式系统,大家都非常关注性能。不同的系统对性能的衡量指标是不同的,最常见的:高并发,单位时间内处理的任务越多越好;低延迟:每个任务的平均时间越少越好。这个其实跟操作系统CPU的调度策略很像
一致性:分布式系统为了提高可用性可靠性,一般会引入冗余(复制集)。那么如何保证这些节点上的状态一致,这就是分布式系统不得不面对的一致性问题。一致性有很多等级,一致性越强,对用户越友好,但会制约系统的可用性;一致性等级越低,用户就需要兼容数据不一致的情况,但系统的可用性、并发性很高很多。
7 Hadoop
7.1 什么是Hadoop
Hadoop的由来
Hadoop是一种分析和处理大数据的软件平台,是Appach的一个用Java语言所实现的开源软件的框架,在大量计算机组成的集群当中实现了对于海量的数据进行的分布式计算。
三大组件
HDFS:
是一个高度容错性的系统,适合部署在廉价的机器上的,适合存储海量数据的分布式文件系统。在HDFS中,1个文件会被拆分成多个Block,每个Block默认大小为128M(可调节)。这些Block被复制为多个副本,被存放在不同的主机上,这也保证了HDFS的高容错性。
MapReduce:
是一个分布式的计算框架,用于处理海量数据的运算。说白了就是为海量的数据提供计算。
YARN:
是一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处。通过YARN,不同计算框架可以共享同一个HDFS集群上的数据,享受整体的资源调度。
Hadoop一般用于做什么:
大数据存储:分布式存储
日志处理:擅长日志分析
ETL:数据抽取到oracle、mysql、DB2、mongdb及主流数据库
机器学习: 比如Apache Mahout项目
搜索引擎:Hadoop + lucene实现
数据挖掘:目前比较流行的广告推荐,个性化广告推荐。
就数据分析而言,Hadoop框架利用MapReduce技术进行数据分析,重在处理大规模数据,更偏后台;BI软件中的数据分析多指在数据清洗加工后,对较规范的数据进行分析,以业务为导向更偏前端。尤其是敏捷型BI,因IT门槛的降低这一块大部分的工作完全可以交给业务人员来做,让业务方自己来探索数据。现在有许多BI软件可以对接Hadoop,进行大数据的处理。