如何建立一个大数据平台?

https://www.zhihu.com/question/37627092前端


背景:node


做者:Xiaoyu Ma
连接:https://www.zhihu.com/question/37627092/answer/72948056
来源:知乎
著做权归做者全部。商业转载请联系做者得到受权,非商业转载请注明出处。

linux

对小公司来讲,大概本身找一两台机器架个集群算算,也算是大数据平台了。在初创阶段,数据量会很小,不须要多大的规模。这时候组件选择也很随意,Hadoop一套,任务调度用脚本或者轻量的框架好比luigi之类的,数据分析可能hive还不如导入RMDB快。监控和部署也许都没时间整理,用脚本或者轻量的监控,大约是没有ganglia、nagios,puppet什么的。这个阶段也许算是技术积累,用传统手段仍是真大数据平台都是两可的事情,可是为了从此的扩展性,这时候上Hadoop也许是不错的选择。
当进入高速发展期,也许扩容会跟不上计划,很多公司可能会迁移平台到云上,好比AWS阿里云什么的。小规模高速发展的平台,这种方式应该是经济实惠的,省了运维和管理的成本,扩容比较省心。要解决的是选择平台自己提供的服务,计算成本,打通数据出入的通道。整个数据平台自己若是走这条路,可能就已经基本成型了。走这条路的比较有名的应该是netflix。ios


也有一个阶段,你发现云服务的费用过高,虽然省了你不少事,可是花钱嗖嗖的。几个老板一合计,再玩下去下个月工资发布出来了。而后无奈之下公司开始往私有集群迁移。这时候你大概须要一群靠谱的运维,帮你监管机器,以前两三台机器登陆上去看看状态换个磁盘什么的也许就不可能了,你面对的是成百上千台主机,有些关键服务必须保证稳定,有些是数据节点,磁盘三天两头损耗,网络可能被压得不堪重负。你须要一个靠谱的人设计网络布局,设计运维规范,架设监控,值班团队走起7*24小时随时准备出台。而后上面再有平台组真的大数据平台走起。
而后是选型,若是有技术实力,能够直接用社区的一整套,本身管起来,监控部署什么的本身走起。这个阶段部署监控和用户管理什么的都不可能像两三个节点那样人肉搞了,配置管理,部署管理都须要专门的平台和组件;按期Review用户的做业和使用状况,决定是否扩容,清理数据等等。不然等机器和业务进一步增长,团队可能会死的很惨,疲于奔命,天天事故不断,进入恶性循环。
固然有金钱实力的大户能够找Cloudera,Hortonworks,国内能够找华为星环,会省很多事,适合非互联网土豪。固然互联网公司也有用这些东西的,好比Ebay。
接下去你可能须要一些重量的组件帮你作一些事情。
好比你的数据接入,以前可能找个定时脚本或者爬log发包找个服务器接收写入HDFS,如今可能不行了,这些大概没有高性能,没有异常保障,你须要更强壮的解决方案,好比Flume之类的。web


你的业务不断壮大,老板须要看的报表愈来愈多,须要训练的数据也须要清洗,你就须要任务调度,好比oozie或者azkaban之类的,这些系统帮你管理关键任务的调度和监控。
数据分析人员的数据大概可能渐渐从RDBMS搬迁到集群了,由于传统数据库已经彻底hold不住了,但他们不会写代码,因此你上马了Hive。而后不少用户用了Hive以为太慢,你就又上马交互分析系统,好比Presto,Impala或者SparkSQL。
你的数据科学家须要写ML代码,他们跟你说你须要Mahout或者Spark MLLib,因而你也部署了这些。
至此可能数据平台已是工程师的平常工做场所了,大多数业务都会迁移过来。这时候你可能面临不少不一样的问题。
好比各个业务线数据各类数据表多的一塌糊涂,无论是你仍是写数据的人大概都不知道数据从哪儿来,接下去到哪儿去。你就本身搞了一套元数据管理的系统。
你分析性能,发现大家的数据都是上百Column,各类复杂的Query,裸存的Text格式即使压缩了也仍是慢的要死,因而你主推用户都使用列存,Parquet,ORC之类的。
又或者你发现大家的ETL很长,中间生成好多临时数据,因而你下狠心把pipeline改写成Spark了。
再接下来也许你会想到花时间去维护一个门户,把这些零散的组件都整合到一块儿,提供统一的用户体验,好比一键就能把数据从数据库chua一下拉到HDFS导入Hive,也能一键就chua一下再搞回去;点几下就能设定一个定时任务,天天跑了给老板自动推送报表;或者点一下就能起一个Storm的topology;或者界面上写几个Query就能查询Hbase的数据。这时候你的数据平台算是成型了。算法


固然,磕磕碰碰免不了。天天你都有新的问题和挑战,不然你就要失业了不是?
你发现社区不断在解决你遇到过的问题,因而大家架构师天天分出不少时间去看社区的进展,有了什么新工具,有什么公司发布了什么项目解决了什么问题,兴许你就能用上。
上了这些乱七八糟的东西,你觉得就安生了?Hadoop平台的一个大特色就是坑多。尤为是新作的功能新起的项目。对于平台组的人,老板若是知道这是自然坑多的平台,那他也许会很高兴,由于跟进社区,帮忙修bug,一块儿互动实际上是很提高公司影响力的实情。固然若是老板不理解,你就自求多福吧,招几个老司机,出了问题能立刻带路才是正道。固然团队的技术积累不能不跟上,由于数据平台仍是乱世,三天不跟进你就不知道世界是什么样了。任何一个新技术,都是坑啊坑啊修啊修啊才完善的。若是是关键业务换技术,那须要当心再当心,技术主管也要有足够的积累,可以驾驭,知道收益和风险。数据库


大数据平台从平台部署和数据分析过程可分为以下几步: 安全

一、linux系统安装
 通常使用开源版的Redhat系统--CentOS做为底层平台。为了提供稳定的硬件基础,在给硬盘作RAID和挂载数据存储节点的时,须要按状况配置。例如,能够选择给HDFS的namenode作RAID2以提升其稳定性,将数据存储与操做系统分别放置在不一样硬盘上,以确保操做系统的正常运行。服务器

二、分布式计算平台/组件安装
 目前国内外的分布式系统的大多使用的是Hadoop系列开源系统。Hadoop的核心是HDFS,一个分布式的文件系统。在其基础上经常使用的组件有Yarn、Zookeeper、Hive、Hbase、Sqoop、Impala、ElasticSearch、Spark等。
 先说下使用开源组件的优势:1)使用者众多,不少bug能够在网上找的答案(这每每是开发中最耗时的地方)。2)开源组件通常免费,学习和维护相对方便。3)开源组件通常会持续更新,提供必要的更新服务『固然还须要手动作更新操做』。4)由于代码开源,若出bug可自由对源码做修改维护。
 再简略讲讲各组件的功能。分布式集群的资源管理器通常用Yarn,『全名是Yet Another Resource Negotiator』。经常使用的分布式数据数据『仓』库有Hive、Hbase。Hive能够用SQL查询『但效率略低』,Hbase能够快速『近实时』读取行。外部数据库导入导出须要用到Sqoop。Sqoop将数据从Oracle、MySQL等传统数据库导入Hive或Hbase。Zookeeper是提供数据同步服务,Yarn和Hbase须要它的支持。Impala是对hive的一个补充,能够实现高效的SQL查询。ElasticSearch是一个分布式的搜索引擎。针对分析,目前最火的是Spark『此处忽略其余,如基础的MapReduce 和 Flink』。Spark在core上面有ML libSpark StreamingSpark QLGraphX等库,能够知足几乎全部常见数据分析需求。
 值得一提的是,上面提到的组件,如何将其有机结合起来,完成某个任务,不是一个简单的工做,可能会很是耗时。网络

三、数据导入
 前面提到,数据导入的工具是Sqoop。用它能够将数据从文件或者传统数据库导入到分布式平台『通常主要导入到Hive,也可将数据导入到Hbase』。

四、数据分析
  数据分析通常包括两个阶段:数据预处理数据建模分析
数据预处理是为后面的建模分析作准备,主要工做时从海量数据中提取可用特征,创建大宽表。这个过程可能会用到Hive SQL,Spark QL和Impala。
数据建模分析是针对预处理提取的特征/数据建模,获得想要的结果。如前面所提到的,这一块最好用的是Spark。经常使用的机器学习算法,如朴素贝叶斯、逻辑回归、决策树、神经网络、TFIDF、协同过滤等,都已经在ML lib里面,调用比较方便。

五、结果可视化及输出API
 可视化通常式对结果或部分原始数据作展现。通常有两种状况,行数据展现,和列查找展现。在这里,要基于大数据平台作展现,会须要用到ElasticSearch和Hbase。Hbase提供快速『ms级别』的行查找。 ElasticSearch能够实现列索引,提供快速列查找。

 

平台搭建主要问题:
一、稳定性 Stability
 理论上来讲,稳定性是分布式系统最大的优点,由于它能够经过多台机器作数据及程序运行备份以确保系统稳定。但也因为大数据平台部署于多台机器上,配置不合适,也可能成为最大的问题。 曾经遇到的一个问题是Hbase常常挂掉,主要缘由是采购的硬盘质量较差。硬盘损坏有时会到致使Hbase同步出现问题,于是致使Hbase服务中止。因为硬盘质量较差,隔三差五会出现服务中止现象,耗费大量时间。结论:大数据平台相对于超算确实廉价,可是配置仍是必须高于家用电脑的。

二、可扩展性 Scalability
 如何快速扩展已有大数据平台,在其基础上扩充新的机器是云计算等领域应用的关键问题。在实际2B的应用中,有时须要增减机器来知足新的需求。如何在保留原有功能的状况下,快速扩充平台是实际应用中的常见问题。

上述是本身项目实践的总结。整个平台搭建过程耗时耗力,非一两我的能够完成。一个小团队要真正作到这些也须要耗费很长时间。

目前国内和国际上已有多家公司提供大数据平台搭建服务,国外有名的公司有ClouderaHortonworksMapR等,国内也有华为明略数据星环等。另外有些公司如明略数据等还提供一体化的解决方案,寻求这些公司合做对 于入门级的大数据企业或没有大数据分析能力的企业来讲是最好的解决途径。

对于一些自己体量较小或者目前数据量积累较少的公司,我的认为没有必要搭建这一套系统,暂时先租用AWS阿里云就够了。对于数据量大,但数据分析需求较简单的公司,能够直接买TableauSplunkHP Vertica,或者IBM DB2等软件或服务便可。


对于一个大数据平台主要分为三部分:

  • 数据接入

  • 数据处理

  • 数据分析

  •  

数据接入是将数据写入数据仓储中,也就是数据整合。由于在企业中,数据可能分布在外部和内部,分布在外部的是企业使用第三方系统产生的数据和一些公共数据,分布在企业内部的是企业内部IT系统产生的数据。这些数据通常都是独立分布的,也就是所说的数据孤岛,此时的这些数据是没有什么意义的,所以数据接入就是将这些内外部的数据整合到一块儿,将这些数据综合起来进行分析。


数据处理是对接入的数据进行数据清洗和ETL建模,将各个数据表之间的关系创建起来,好比关联,聚合,追加等等这些处理。


数据分析是在数据处理后的数据基础上进行维度和数值的可视化分析,也就是基于OLAP的查询和分析,包含上卷,钻取,切片,转轴等操做,最后分析的结果经过报表或是仪表盘来呈现出来,从而支撑业务人员和决策人员。


按照数据处理的顺序能够将大数据平台分为传统型和敏捷型,传统型的是在将数据送入数据仓储里面以前作,存入数据仓储里面的数据已经定义好了事实维度这些模型关系,业务人员能够直接进行查询,可是实时性和灵活性会大打折扣,若是业务人员须要分析一个事先没有的数据的话,须要去跟技术人员反馈,技术人员来完成处理。而敏捷型的则是将数据处理放到了后面,这样业务人员能够根据本身的须要去自助探索式的建模和进行数据分析,可是对系统的性能要求较高。

上面只是从产品层面来进行了说明,下面从技术层面来进行对应。


首先是数据仓储,通常是基于HDFS,采用分布式的文件系统来进行存储。数据处理和数据分析须要基于大数据处理引擎,若是想要实时的查询则须要用Spark这类的基于内存计算的,若是实时性要求没那么高的则能够用基于MR的这些离线计算的引擎。数据分析须要OLAP以及前端可视化这些技术来进行支撑。

知道了是什么样的,接下来咱们能够来作了。

经过上面的介绍,咱们能够看出须要的技术成本是比较高的,所以对于初创型的公司建议采用第三方的工具来使用。好比国内的BDP()和永洪(),国外的DOMO()这些SaaS产品,更小型的团队可使用BDP我的版()。这些数据产品都是能够知足企业分析数据的须要,同时有上面所说的各种功能。因为BDP我的版是免费的,这里经过一些截图来讲明一下。

数据接入- 支持各种第三方API以及数据库

数据处理-可视化拖拽和SQL


数据可视化-丰富的图表和交互


若是公司有足够的实力,想自建数据平台,能够在现有的一些开源的数据相关的工具来进行搭建,底层存储和计算平台的HDFS,Spark,Hive这些都是Apache开源的,OLAP有Kylin,Saiku这些开源工具,可视化有Airbnb开源的Superset,若是在这些基础上进行搭建和开发,相信可以省去一些开发量,可是事物除了有共性仍是有个性的,想要绝对的知足需求是没有的,都是须要企业根据自身的需求来进行定制化开发的。



软件工程的流程来分析数据工程,也就是大数据平台的建设步骤。


软件工程建设步骤包括需求分析、系统设计、系统开发、系统运维等4大方面。本文主要讲一下前3个方面。

一、需求分析

数据需求分为三个层次,分别为业务需求、用户需求、功能需求。各需求要了解清楚大体内容:

  • 业务需求,老板想干啥?是想赚多点钱仍是政绩工程?固然通常会是精准营销、个性化服务、提高效率等

  • 用户需求,真正使用这个平台的用户的需求是什么?要什么数据?分析啥?

  • 功能需求,基于业务需求和用户需求推导出大数据平台须要具有哪些功能

  • 数据需求:要接入哪些数据?指标体系是怎样?数据来源于哪些系统?数据量大概什么量级?日增量大概多少?数据接口是怎样的?

二、系统设计

基于需求分析的输出设计大数据平台,设计步骤主要包含4个子环节:

  • 技术选型,技术选型主要考虑3个输入:数据量、查询性能要求、实时性要求等,由此决定是采用传统数据仓库仍是分布式架构,同时还需考虑资金和团队的因素,若是有钱可采用商用平台和服务,没钱但有技术团队,可采用开源方案,没钱又没团队能够洗洗睡了。

  • 技术架构设计,采集、存储、计算、交互式查询、机器学习等场景分别采用什么技术?同时各技术的集成性须要考虑。

  • 数据架构设计,数据主题、数据分层、数据流、数据交换方式等等

  • 数据应用设计,也就是上层数据应用的功能设计,这个和软件差很少,但基于数据的应用设计仍是有不少不一样的考虑,在此不作赘述。

三、系统开发

  • 平台部署:部署hadoop等大数据平台;

  • 数据集成及处理开发:开发ETL,从数据源采集数据,并作清洗、标准化造成主题库,并根据主题库的标准数据,根据上层数据应用需求,处理成相应的专题库(也叫数据集市);

  • 数据服务开发:开发并发布上层所需的数据服务接口,供上层数据应用调用;

  • 数据应用开发:基于数据服务、数据集,开发数据应用;

 


比较简单的步骤:
1. 首先要有一个分布式的文件系统,保证可以对“大”的数据进行存储,并且该文件系统应该具备容错和高吞吐量的特色,例如HDFS之类的。
2. 而后要有一个分布式的计算环境,如Hadoop、Spark之类的,可以快速开发程序对数据进行分析和加工。
3. 最后要有一个大数据的可视化工具,可以快速生成可视化界面。



我参与了一个大数据平台从无到有的过程,建立平台提及来很简单!但你须要考虑几个问题:
1、平台的定位:交易?解决方案?商城?
2、数据的来源:自有?第三方渠道?
3、人员的配备:技术驱动?销售驱动?运营驱动?
4、平台的规则:如何保证数据安全?如何给数据订价?如何保证数据质量?数据使用问题如何定则?数据的更新频率。及时。有效性。
5、快速变现:如何教育用户使用?如何让数据流通碰撞?



第一步,抓取数据
第二步,创建模型
第三步,读取数据。

相关文章
相关标签/搜索