admin管理员组

文章数量:1537052

1.大数据平台总体架构
大数据平台是为了计算,所产生的越来越大的数据量,以存储、运算、展现作为目的的平台。大数据技术是指从各种各样类型的数据中,快速获得有价值信息的能力。适用于大数据的技术,包括大规模并行处理(MPP)数据库,数据挖掘,分布式文件系统,分布式数据库,云计算平台,互联网,和可扩展的存储系统。
1.1.大数据平台应用架构
基于多年来环保监测平台的研发经验及智慧园区项目的建设,并借鉴行业大数据分析平台的实施、管理和应用方面的成功经验,结合公司实际信息化情况,我们大数据平台实际为三层架构,其中:
基础数据源层:目前应用的数据主要来源于在线监测系统,第三方系统接口,工控机/PLC/物联网盒子主动上报,FTP文件导入,网页爬取等方式接入系统。
大数据处理层:由于数据源类型的多样性,传统关系型数据仓库架构或者分布式存储架构各有优劣,单独使用都无法很好的满足对结构化和非结构化数据的存储和应用需求,因此采用传统数据仓库架构与大数据分布式数据仓库架构两者相结合的架构设计,两者紧密配合共同承担大数据处理任务,为大数据应用提供数据接口、数据交换、数据查询、数据分析和数据挖掘提供数据基础;
大数据应用层:随着信息化的发展,对大数据的应用方式也越来越多,大数据分析平台应用层需要满足:固定报表、OLAP分析、指标监控、即席查询(自助式分析)、决策支持、消息推送、预警预测(数据挖掘)等多种展现方式,但不局限于此。

1.2.大数据平台技术架构

平台系统构架通过数据采集(包括数据源)、数据存储与管理(数据仓库和Hadoop)和数据共享三部分技术来实现。
1.2.1.数据采集
1)结构化数据采集:现有的数据主要来自于在线监测系统和文件都属于结构化数据,采用ETL工具-kettle和Flume作为采集结构化数据的手段。ETL(Extract, Transform, Load)是建立大数据分析平台的重要组成部分,它将大数据分析平台中所需的数据按数据仓库建立的方法每天或定期从各个业务系统中采集详尽的业务数据,并根据各自的需求进行数据调整,数据迁移过程中需将原始数据进行抽取、清洗、合并和装载。在此过程中必须保证数据的完备性和数据的一致性。当业务数据量过大,未避免Mysql数据仓库压力过大,亦可将业务数据通过kettle迁移到hadoop平台的数据库Hbase中。能够序列们均数据.直接存放到HDFS中;不能够序列化的数据,通过数据整理后统一存放在分布式数据库环境中,再经过序列化化后再存放到HDFS中,整理后还不能序列化的数据也直接存放到HDFS。
2)非/半结构化数据采集:随着信息化建设的发展和监管力度加强,摄像头视频文件、传感器采集的设备数据、移动端收集的数据以及其他流数据等非结构化数据,我们将通过socket接口、视频接入设备、网络爬虫工具和流处理程序等方式分别进行采集并存储到MYSQL,HDFS和Hbase中。各种日志数据(通常序列化半结构化数据)直接存放到HDFS中;PLC/数采仪/物联网盒子和数据接口中的数据(通常序列化半结构化数据) 直接存放到MYSQL,HDFS 中;非结构化的数据直接存放到HDFS中。
3)数据源类型不同采用不同的采集方式:
Sqoop用于从关系型数据库中采集数据。
Flume用于日志数据采集。
Netty 进行socket 通讯基于T212协议数据采集。
网络资源采用爬虫工具进行采集。
其他格式文件(Excel,XML,JSON) 采用kettle进行数据解析采集。
实时计算由于对时效性要求比较高,它一般采用Kafka和业务系统建立实时数据通道,完成数据传输。
1.2.2.大数据存储和管理
Hadoop HDFS分布式文件系统中存放海量的结构化和半结构化数据,需要合理化组织数据的存储:
目前我们主要的数据类型是在线监测数据及设备状态数据属于结构化数据,后续也会对视频监控这类非结构化数据采集存储。
1.相关业务结构化数据和有一定格式关系的半结构化的数据。为方便其管理和满足未来发展的性能要求,选择以关系型数据库MySQL和hadoop的HBase数据库共同承担对结构化的数据的存储和管理。以MySQL建立传统数据仓库来实现对用于结构化数据和元数据的集中存储与管理,并根据需求建立面向主题的数据集市,中央数据仓库将被划分为三个逻辑存储区间: ODS(Operational Data Store)、DW(Data Warehourse)、DM(Data Mart):ODS将存放各业务系统的原始数据,包括与原结构相同的业务数据以及经过初步整理后的业务数据;DW区域存放经过整理过的数据,是大数据分析平台真正的数据中心;DM区域存放各个应用系统(web应用、BI、OLAP、Data Mining等)所需的综合数据。与此同时在MySQL和HBase数据库之间建立连接,利用Kettle定时进行数据交换,俩种数据仓库共同为大数据应用提供数据支撑,从而实现数据共享,分摊压力和数据备份的目的。
2.相关业务中半结构化的数据直接存放在HDFS 分布式文件系统中,一定格式关系的半结构化数据存放在 Hadoop HBase 列簇数据库中和其他 NoSQL(MongoDB) 数据库中。由于Mysql不支持对非结构化数据的存储,利用大数据应用框架Hadoop平台的数据仓库作为传统数据仓库的补充,实现对非结构化数据的存储和管理,并对来自网络的大量数据查询提供支撑。
1.2.3.应用与分析
大数据分析平台为满足不同用户的需求,需要提供多种不同的应用与分析方式。支持利用java等开发语言编写程序实现对Hadoop平台和MySQL数据仓库中数据的应用;同时采用第三方的工具进行数据挖掘及分析。
目前涉及到的主要分析业务包含:1.设备的运行状态及故障分析 2.环境空气质量预警预报 3.水环境水质情况预警预报 4.突发环境类事件的推演及影响评估。有实时要求高的但是大部分对于实时要去不是很高。前期可以采用spark,spark streaming 进行计算分析,后续实时要求更高的可引入storm。Spark是一个分布式计算框架,是一个用来实现快速而通用的集群计算的平台。扩展了广泛使用的MapReduce计算模型,而且高效地支持更多的计算模式,包括交互式查询和流处理。在处理大规模数据集的时候,速度是非常重要的。Spark的一个重要特点就是能够在内存中计算,因而更快。即使在磁盘上进行的复杂计算,Spark依然比MapReduce更加高效。
大数据搜索使用Elasticsearch,Elasticsearch是一个基于Lucene的搜索服务器。它提供了一个分布式多用户能力的全文搜索引擎,基于RESTful web接口。
数据分析工具选Zeppelin。Apache Zeppelin是一个让交互式数据分析变得可行的基于网页的开源框架。Zeppelin提供了数据分析、数据可视化等功能。Zeppelin 是一个提供交互数据分析且基于Web的笔记本。方便你做出可数据驱动的、可交互且可协作的精美文档,并且支持多种语言,包括 Scala(使用 Apache Spark)、Python(Apache Spark)、SparkSQL、 Hive、 Markdown、Shell等等
大数据挖掘工具Mahout,Mahout也是Apache的一个开源项目,提供一些机器学习领域经典算法的实现,包括聚类、分类、推荐过滤、频繁子项挖掘。
Hadoop集群资源管理采用YARN。YARN, Apache YARN(Yet Another Resource Negotiator)是hadoop的集群资源管理系统。YARN在Hadoop2时被引入,最初是为了改善MapReduce的实现,但它具有足够的通用性,也支持其他的分布式计算模式。

4.大数据技术栈

下面自底向上介绍各个层的主要项目。

1.采集层和传输层
数据采集作为基础至关重要。采集的数据主要由业务系统产生,包括存储在关系型DB中的结构化数据和记录在日志文件中的半结构化数据。Sqoop用于从关系型DB中采集数据,Flume用于日志采集。实时计算由于对时效性要求比较高,它一般采用Kafka和业务系统建立实时数据通道,完成数据传输。
Sqoop是Apache的一个独立项目,始于2009年。Sqoop是一个用来将Hadoop和关系型数据库中的数据相互转移的工具,可以将一个关系型数据库(例如 :MySQL ,Oracle ,Postgres等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中。其官方地址是 http://sqoop.apache/。
Flume最早是Cloudera提供的日志收集系统,是Apache下的一个孵化项目。Flume是一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。其官方地址是 http://flume.apache/。
Canal数据抽取是 ETL 流程的第一步。我们会将数据从 RDBMS 或日志服务器等外部系统抽取至数据仓库,进行清洗、转换、聚合等操作。在现代网站技术栈中,MySQL 是最常见的数据库管理系统,我们会从多个不同的 MySQL 实例中抽取数据,存入一个中心节点,或直接进入 Hive。市面上已有多种成熟的、基于 SQL 查询的抽取软件,如著名的开源项目 Apache Sqoop,然而这些工具并不支持实时的数据抽取。MySQL Binlog 则是一种实时的数据流,用于主从节点之间的数据复制,我们可以利用它来进行数据抽取。借助阿里巴巴开源的 Canal 项目,我们能够非常便捷地将 MySQL 中的数据抽取到任意目标存储中。
Logstash 是开源的服务器端数据处理管道,能够同时从多个来源采集数据,转换数据,然后将数据发送到您最喜欢的 “存储库” 中。
Kafka消息队列,一个分布式流平台。
RocketMQ阿里巴巴开源的消息队列。
Netty是一个java开源框架。Netty提供异步的、事件驱动的网络应用程序框架和工具,用以快速开发高性能、高可靠性的网络服务器和客户端程序。
2.存储层
HBase是一个分布式的、面向列的开源数据库,该技术来源于 Fay Chang 所撰写的Google论文“Bigtable:一个结构化数据的分布式存储系统”。就像Bigtable利用了Google文件系统(File System)所提供的分布式数据存储一样,HBase在Hadoop之上提供了类似于Bigtable的能力。HBase是Apache的Hadoop项目的子项目。HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。另一个不同的是HBase基于列的而不是基于行的模式。
Alluxio以内存为中心分布式存储系统,从下图可以看出, Alluxio主要有两大功能,第一提供一个文件系统层的抽象,统一文件系统接口,桥接储存系统和计算框架;第二通过内存实现对远程数据的加速访问。详情参考Alluxio document。
Redis是一个开源的内存键值数据库,相比于Memcache,支持丰富的数据结构。
Ignit是一个以内存为中心的分布式数据库,缓存和处理平台,用于事务,分析和流式工作负载,在PB级别的数据上提供接近内存速度访问数据。
从上述分析可知,Alluxio/Redis/Ignite主要都是通过内存来实现加速。
TiDB是有PingCap开源的分布式NewSQL关系型数据库。NewSQL数据库有两个流派,分别是以Google为代表的Spanner/F1和以Amazon 为代表的Aurora(极光),目前国内做NewSQL数据库主要是参考Google的Spanner架构,Google Spanner也是未来NewSQL的发展趋势。具体请查阅相关资料,或者访问Youtube,观看黄旭东的分享。
Hadoop分布式文件系统(HDFS)是指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System)。它和现有的分布式文件系统有很多共同点。但同时,它和其他的分布式文件系统的区别也是很明显的。HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS能提供高吞吐量的数据访问,非常适合大规模数据集上的应用。HDFS放宽了一部分POSIX约束,来实现流式读取文件系统数据的目的。HDFS在最开始是作为Apache Nutch搜索引擎项目的基础架构而开发的。HDFS是Apache Hadoop Core项目的一部分。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。HDFS放宽了(relax)POSIX的要求(requirements)这样可以实现流的形式访问(streaming access)文件系统中的数据
Ceph Linux中备受关注的开源分布式存储系统,除了GlusterFS,当属Ceph。目前Ceph已经成为RedHat旗下重要的分布式存储产品,并继续开源。Ceph提供了块储存RDB、分布式文件储存Ceph FS、以及分布式对象存储Radosgw三大储存功能,是目前为数不多的集各种存储能力于一身的开源存储中间件。
Kudu是cloudera开源的运行在hadoop平台上的列式存储系统,拥有Hadoop生态系统应用的常见技术特性,运行在一般的商用硬件上,支持水平扩展,高可用,目前是Apache Hadoop生态圈的新成员之一(incubating)。Kudu的设计与众不同,它定位于应对快速变化数据的快速分析型数据仓库,希望靠系统自身能力,支撑起同时需要高吞吐率的顺序和随机读写的应用场景,提供一个介于HDFS和HBase的性能特点之间的一个系统,在随机读写和批量扫描之间找到一个平衡点,并保障稳定可预测的响应延迟。可与MapReduce, Spark和其它hadoop生态系统集成。
3.计算层
Presto是Facebook开源的,完全基于内存的并计算,分布式SQL交互式查询引擎是一种Massively parallel processing (MPP)架构,多个节点管道式执持任意数据源(通过扩展式Connector组件),数据规模GB~PB级使用的技术,如向量计算,动态编译执计划,优化的ORC和Parquet Reader等presto不太支持存储过程,支持部分标准sql presto的查询速度比hive快5-10倍上面。presto适合干PB级海量数据复杂分析,交互式SQL查询,持跨数据源查询。不适合多个大表的join操作,因为presto是基于内存的,多张大表在内存里可能放不下。
和hive的对比:hive是一个数据仓库,是一个交互式比较弱一点的查询引擎,交互式没有presto那么强,而且只能访问hdfs的数据
presto是一个交互式查询引擎,可以在很短的时间内返回查询结果,秒级,分钟级,能访问很多数据源
Hive 是Facebook开源,构建在Hadoop上的数据仓库框架。Hive的设计目标是让精通SQL技能但Java编程技能相对较弱的分析师能对存放在Hadoop上的大规数据执行查询。
Hive的查询语言HiveQL是基于SQL的。任何熟悉SQL的人都可以轻松使用HiveSQL写查询。和RDBMS相同,Hive要求所有数据必须存储在表中,而表必须有模式(Schema),且模式由Hive进行管理。类似Hive的同类产品:kylin druid SparkSQL Impala。
KylinApache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。
Spark是一个分布式计算框架,是一个用来实现快速而通用的集群计算的平台。扩展了广泛使用的MapReduce计算模型,而且高效地支持更多的计算模式,包括交互式查询和流处理。在处理大规模数据集的时候,速度是非常重要的。Spark的一个重要特点就是能够在内存中计算,因而更快。即使在磁盘上进行的复杂计算,Spark依然比MapReduce更加高效。1)Spark 运行模式
local:主要用于开发调试Spark应用程序
Standlone:利用Spark自带的资源管理与调度器运行Spark集群,采用Master/Slave结构,为解决单点故障,可以采用Xookeeper实现高可靠(High Availability, HA)
Apache Mesos:运行在著名的Mesos资源管理框架基础之上,该集群运行模式将资源管理管理交给Mesos,Spark只负责运行任务调度和计算
Hadoop YARN:集群运行在Yarn资源管理器上,资源管理交给YARN,Spark只负责进行任务调度和计算
Storm是一个分布式的、高容错的实时计算系统。Storm对于实时计算的的意义相当于Hadoop对于批处理的意义。Hadoop为我们提供了Map和Reduce原语,使我们对数据进行批处理变的非常的简单和优美。同样,Storm也对数据的实时计算提供了简单Spout和Bolt原语。Storm适用的场景:①、流数据处理:Storm可以用来用来处理源源不断的消息,并将处理之后的结果保存到持久化介质中。②、分布式RPC:由于Storm的处理组件都是分布式的,而且处理延迟都极低,所以可以Storm可以做为一个通用的分布式RPC框架来使用。
Flink 是一个针对流数据和批数据的分布式处理引擎。它主要是由 Java 代码实现。目前主要还是依靠开源社区的贡献而发展。对 Flink 而言,其所要处理的主要场景就是流数据,批数据只是流数据的一个极限特例而已。再换句话说,Flink 会把所有任务当成流来处理,这也是其最大的特点。Flink 可以支持本地的快速迭代,以及一些环形的迭代任务。并且 Flink 可以定制化内存管理。在这点,如果要对比 Flink 和 Spark 的话,Flink 并没有将内存完全交给应用层。这也是为什么 Spark 相对于 Flink,更容易出现 OOM的原因(out of memory)。就框架本身与应用场景来说,Flink 更相似与 Storm。如果之前了解过 Storm 或者Flume 的读者,可能会更容易理解 Flink 的架构和很多概念。
TensorFlow是一个基于数据流编程(dataflow programming)的符号数学系统,被广泛应用于各类机器学习(machine learning)算法的编程实现,其前身是谷歌的神经网络算法库DistBelief [1] 。Tensorflow拥有多层级结构,可部署于各类服务器、PC终端和网页并支持GPU和TPU高性能数值计算,被广泛应用于谷歌内部的产品开发和各领域的科学研究 [1-2]。TensorFlow由谷歌人工智能团队谷歌大脑(Google Brain)开发和维护,拥有包括TensorFlow Hub、TensorFlow Lite、TensorFlow Research Cloud在内的多个项目以及各类应用程序接口(Application Programming Interface, API) [2]。自2015年11月9日起,TensorFlow依据阿帕奇授权协议(Apache 2.0 open source license)开放源代码
4.分布式资源调度
YARN, Apache YARN(Yet Another Resource Negotiator)是hadoop的集群资源管理系统。YARN在Hadoop2时被引入,最初是为了改善MapReduce的实现,但它具有足够的通用性,也支持其他的分布式计算模式。
Mesos 最初由 UC Berkeley 的 AMP 实验室于 2009 年发起,遵循 Apache 协议,目前已经成立了 Mesosphere 公司进行运营。Mesos 可以将整个数据中心的资源(包括 CPU、内存、存储、网络等)进行抽象和调度,使得多个应用同时运行在集群中分享资源,并无需关心资源的物理分布情况。如果把数据中心中的集群资源看做一台服务器,那么 Mesos 要做的事情,其实就是今天操作系统内核的职责:抽象资源 + 调度任务。Mesos 项目是 Mesosphere 公司 Datacenter Operating System (DCOS) 产品的核心部件。
Kubernetes是Google 2014年推出的开源容器集群管理系统,基于Docker构建一个容器调度服务,为容器化的应用提供资源调度、部署运行、均衡容灾、服务注册、扩容缩容等功能。
5.工具层和服务层
Apache Zeppelin是一个让交互式数据分析变得可行的基于网页的开源框架。Zeppelin提供了数据分析、数据可视化等功能。Zeppelin 是一个提供交互数据分析且基于Web的笔记本。方便你做出可数据驱动的、可交互且可协作的精美文档,并且支持多种语言,包括 Scala(使用 Apache Spark)、Python(Apache Spark)、SparkSQL、 Hive、 Markdown、Shell等等
Apache Kylin™是一个开源的分布式分析引擎,提供Hadoop/Spark之上的SQL查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由eBay Inc. 开发并贡献至开源社区。它能在亚秒内查询巨大的Hive表。
6.大数据应用技术
大数据搜索:Lucene、Solr、ElasticSearch。ElasticSearch是新推出的比Solr在大规模数据情况下更好的开源解决方案。
大数据查询:这里有Hive/Impala,Hive的作用是你可以把结构化数据导入到Hadoop中然后用简单SQL来做查询。你可以把Impala看做是性能更快的Hive,因为Impala不强依赖MapReduce。而Facebook开源的Presto更是能查询多种数据源,而且一条Presto查询可以将多个数据源的数据进行合并。
大数据分析:咱们要提到去年新晋顶级Apache项目的Kylin。它创始于ebay,2014年进入apache孵化项目。Kylin不仅仅能做SQL查询,而且能做Cube多维分析。
大数据挖掘:这个领域包含精准推荐、机器学习/深度学习/神经网络、人工智能。自从AlphaGo火了以后,机器学习再度火热。Google开源了最新机器学习系统TensorFlow,微软亚洲研究院开源了分布式机器学习工具包-DMTK,雅虎也开源了Caffe On Spark 深度学习。Mahout是Apache的一个开源项目,提供一些机器学习领域经典算法的实现,包括聚类、分类、推荐过滤、频繁子项挖掘。
7.数据可视化工具
这块有大量的可视化开源组件,但成系统的开源的确实出色的不多。这里面大有可玩。Airbnb近日开源了数据探查与可视化平台Caravel。另外,百度推出的Echarts组件也不做,可以基于此做些系统性的工作。

4.2.开发工具
1.VirtualBox
一款开源、免费的虚拟机管理软件,虽然是轻量级软件,但功能很丰富,基本能够满足全部的使用需求。官方网站:https://www.virtualbox/
2.MobaXterm
大数据的框架通常都部署在服务器上,这里推荐使用 MobaXterm 进行连接。同样是免费开源的,支持多种连接协议,支持拖拽上传文件,支持使用插件扩展。
官方网站:https://mobaxterm.mobatek/
3.Translate Man
Translate Man 是一款浏览器上的翻译插件 (谷歌和火狐均支持)。它采用谷歌的翻译接口,准确性非常高,支持划词翻译,可以辅助进行官方文档的阅读。
4.ProcessOn
ProcessOn 式一个在线绘图平台,使用起来非常便捷,可以用于笔记或者博客配图的绘制。
官方网站:https://www.processon/
5.Idea/eclipse
java语言开发的集成环境

本文标签: 数据技术