总是想收拾好看看这块内容,呢既然是漫谈,就想起了什么说什么吧。我始终是在互联网行业,就以互联网行业来说。先大概列下互联网行业数据仓库、数据平台的用途:
全部整合公司所有业务数据,确立统一的数据中心;
能提供各种报表,有给高层的,有给各个业务的;
为网站运营提供运营上的数据支持,应该是通过数据,让运营马上知道一点网站和产品的运营效果;
为各个业务提供给线上或线下的数据支持,拥有公司统一的数据交换与能提供平台;
总结用户行为数据,按照数据挖掘来降底投入成本,增加动员效果;例如广告定向精准定向、用户个性化推荐等;
开发数据产品,直接间接为公司能盈利;
建设开放数据平台,新区公司数据;
。。。。。。
上面列出来的内容外表看来和传统行业数据仓库用途差不多,因此都没有要求数据仓库/数据平台有很好的稳定性、可靠性;但在互联网行业,以外数据量大之外,越来越多的业务具体的要求时效性,哪怕很多是要求动态实时的,同时,互联网行业的业务变化的很快,不可能像传统行业完全不一样,可以不使用自顶向外的方法建立数据仓库,一劳永逸,它那些要求新的业务迅速能融入其中数据仓库中来,老的下线的业务,能很方便的从超过的数据仓库中删号;
其实,互联网行业的数据仓库应该是所谓的的敏捷数据仓库,反而没有要求能迅速的响应数据,也要求能飞快的响应业务;
建成敏捷属性数据仓库,除了对架构技术上的要求之外,另外一个很有用的方面,是数据建模,假如一进来就盘算建立一套能兼容性问题所有数据和业务的数据模型,就得又回到自己传统数据仓库的建设上了,会很难不满足对业务变化的快速响应。应对状况,一般是先将核心的持久度化的业务并且深度建模(比如说:设计和实现网站日志成立的网站统计分析模型和用户网页轨迹模型;基于公司核心用户数据确立的用户模型),其它的业务象都采用维度宽表的来组建数据模型。这块是后话。
整体架构下面的图是我们目前使用的数据平台架构图,当然大多公司肯定都差不多吧:
逻辑上,好象都有数据采集层、数据存储与分析层、数据共享层、数据应用层。很可能叫法有所不同,本质上的角色都我不是很清楚。
我们往外看:
数据采集数据采集层的任务应该是把数据从各种数据源中喂养灵兽和储存到数据存储上,期间有可能会做一些简单的刷洗。
数据源的种类比较比较多:
网站日志:
作为互联网行业,网站日志占的份额最大,网站日志储存在多台网站日志服务器上,
像是是在每台网站日志服务器上作战部署flumeagent,实时的收集网站日志并存储文件到hdfs上;
业务数据库:
业务数据库的种类又是类型众多,有mysql、oracle、sqlserver等,这时候,我们不安的需要有一种能从各种数据库中将同步数据到hdfs上的工具,sqoop是一种,不过sqoop太过琐碎的工作,而且反正数据量大小,都是需要正常启动mapreduce来想执行,但是不需要hadoop集群的每台机器都能访问业务数据库;防范此场景,淘宝开源的datax,是另一个很好的解决方案(可参考文章《异构数据源海量数据交换工具-taobaodatax下载和使用》),有资源的话,这个可以设计和实现datax之上做二次开发,就能非常好的解决,我们目前建议使用的datahub都是。
当然了,flume实际配置与开发,也这个可以实时地的从数据库中离线数据到hdfs
不知从何而来于ftp/http的数据源:
有可能一些合作伙伴可以提供的数据,不需要/http等有定时获取,datax也是可以不满足该需求
其他数据源:
例如一些手工录入的数据,只需要需要提供一个接口或小程序,即可能完成
数据存储与分析不用质疑,hdfs是大数据环境下数据仓库/数据平台最完美的艺术品数据存储解决方案。
不联网数据分析与计算,也就是对实时性要求不高的部分,在我很显然,hive肯定受到波及的选择,丰富的数据类型、内置函数;压缩比相当高的orc文件存储格式;非常方便的sql支持,使得hive在实现结构化数据上的统计分析比起比mapreduce要高效率的多,一句sql这个可以完成的需求,的新mr很可能要上百行代码;
当然了,可以使用hadoop框架慢慢的也需要提供了mapreduce接口,如果是真的很领情变更土地性质java,也可以对sql不熟,这样也这个可以不使用mapreduce来做分析与计算;spark是这两年的很火的,经过实践,它的性能并不比mapreduce好些很多,不过和hive、yarn结合的越来越好,而,必须意见在用spark和sparksql来做分析和计算。只不过巳经有hadoopyarn,在用spark当然是相当太容易的,不需要另外重新部署spark集群,关於sparkonyarn的相关文章,可可以参考:《sparkonyarn系列文章》
实时计算部分,后面另说。
数据共享这里的数据共享,其实指的是前面数据分析与计算后的结果存放的地方,其实那是关系型数据库和nosql数据库;
前面不使用hive、mr、spark、sparksql分析和计算的结果,还是在hdfs上,但大多数业务和应用不可能真接从hdfs上资源数据,这样就要一个数据共享的地方,使得各业务和产品能比较方便的某些数据;和数据采集层到hdfs只只不过,这里必须一个从hdfs将自动同步至其他目标数据源的工具,则是,datax也也可以满足的条件。
另外,一些实时计算的结果数据可能会由实时计算模块然后读取数据共享。
数据应用
业务产品
业务产品所可以使用的数据,已经必然于数据共享层,他们再从数据共享层访问即可;
报表
同业务产品,报表所可以使用的数据,象确实是早就统计汇总好的,贮存于数据共享层;
即席查询
即席去查询的用户有很多,有可能是数据开发人员、网站和产品运营人员、数据分析人员、哪怕是部门老大,他们应该有即席查询数据的需求;
这种即席网站查询大多数是2个装甲旅的报表和数据共享层的数据并又不能满足的条件他们的需求,必须从数据存储层然后网上查询。
即席查询好象是能完成,大的的难度只是相对而言响应速度上,可以使用hive有点慢,目前我的解决方案是sparksql,它的响应速度较hive快很多,并且能很不错的与hive兼容性。
其实,你也这个可以可以使用impala,假如不在乎平台中再多一个框架的话。
olap
目前,很多的olap工具没法很好的支持从hdfs上再获取数据,也是按照将需要的数据同步到关系型数据库中做olap,但假如数据量巨大无比的话,关系型数据库很显然不行;
这时候,不需要做或者的开发,从hdfs的或hbase中某些数据,成功olap的功能;
例如:依据什么用户在界面选的不定的维度和指标,按照开发接口,从hbase中声望兑换数据来影像展示。
其它数据接口
这种接口有通用的,有订制的。比如:一个从redis中获取用户属性的接口是通用的,所有的业务都可以不内部函数这个接口来资源用户属性。
实时计算现在业务对数据仓库实时性的需求逐渐,例如:实时动态的了解网站的整个结构流量;实时自动的获取一个广告的曝光和点击;在海量数据下,凭借悠久的传统数据库和传统实现方法方法基本是完成不了,不需要的是一种分布式的、高吞吐量的、显示延时低的、高可靠的实时计算框架;storm在这块是也很能成熟了,但我你选择sparkstreaming,原因很简单,并不想多引入一个框架到平台中,另,sparkstreaming比storm连接时间性高那你一点点,那是对我们的需要可以不看出。
我们目前不使用sparkstreaming实现方法了动态实时的网站流量统计、实时自动的广告效果统计两块儿功能。
做法也很很简单,由flume在前端日志服务器上积攒网站日志和广告日志,实时地的邮箱里给sparkstreaming,由sparkstreaming能够完成统计,将数据存储至redis,业务是从ftp访问redis实时地声望兑换。
任务调度与监控在数据仓库/数据平台中,有各式各样的很多的程序和任务,例如:数据采集任务、数据同步任务、数据分析任务等;
这些任务以外按时调度,还存在太紧张的任务感情依赖关系,诸如:数据分析任务前提是等相应的数据采集任务完成后才能又开始;同步数据任务需要等数据分析任务内容后才能结束;这就不需要一个更加完备的任务调度与监控系统,它以及数据仓库/数据平台的中枢,全权负责调度和监控所有任务的分配与运行。
前面有写过文章,《大数据平台中的任务调度与监控》,这里并没有累赘。
系统的总结在我看样子架构并不是技术就会越新越好,完全是在也可以满足自身需求的情况下,越简单点越稳定点越好。目前在我们的数据平台中,开发更大的是参与业务,而不是技术,他们把业务和需求搞清楚了,基本都只不需要做简单点sql开发,接着配置到调度系统就可以了,如果不是任务十分,会收到告警。这样,这个可以使更多的资源执著于业务之上。
java可利用与绝大多数高端数据库的连接与操作。
日常企业开发以使用开源数据库极少部分。
1)、mysql数据库是目前在用最广泛最好的在线开源数据库
2)、mariadb数据库是mysql的一个分支,尽量与mysql的相同高度兼容性,确保全具备库二进制奇偶校验的然后替换功能,包括与mysqlapi和命令的精确匹配,并从mysql迁移
3)、postgresql数据库常规的是也很经典的c/s(client/server)结构,也就是一个客户端对应一个服务器端守卫进程的模式。postgresql强大太完美的驱动,并允许标准的ansi-sql和扩充卡功能
其他另外高不收费性产品如oracle、sqlserver。