相关文章推荐
卖萌的眼镜  ·  ChangeServiceConfig2设置 ...·  2 年前    · 
谦和的猕猴桃  ·  Spark3.2 VS ...·  2 年前    · 
狂野的鸭蛋  ·  JAVA ...·  2 年前    · 

--------------------------------------------------------------------

大数据平台优势

横向扩展:大数据技术出现之初所要解决的问题就是数据存储与计算,近年来随着数据量产生速度越来越快,传统平台存储与计算能力遇到瓶颈,而大数据平台是分布式架构,理论上是可以无限扩展的,所以其能更好的适应时代的发展。

资源共享:企业通过使用单一集群,可以化零为整,整合所有可用服务器资源,并统一对外提供所有的能力,可以实现细粒度的资源调度机制。并且只需维护一个集群,降低运维成本。

数据共享:使用单一存储架构,可以将企业内部所有数据集中在一个集群中,方便进行各种业务数据的整合使用,从而充分利用大数据技术全量数据分析的优势。

服务共享:通过统一服务架构,可将一套统一服务设计规则应用到所有的服务实现上,例如一张表数据可以以文件形式共享也能以接口形式接口进行共享,我们进行统一之后各个部门可以以相同方法进行调用使用,避免烟囱式架构,间接减少重复开发成本。

安全保障:通过统一安全架构,在单一集群架构基础上实现细粒度的资源隔离,对不同人员进行不同程度的授权。

大数据平台需要具备的能力

集群监控与管理:毫无疑问集群是需要能够进行统筹的管理及监控的能力,否则运维团队在做运维时将无从下手。

资源接入:数据是一个企业的核心资源,我们对业务模型的建立,分析,挖掘都需要建立在原始数据之上,而这些数据来源多(日志,关系数据库,爬虫等),类型杂(结构化,半结构化,非结构化数据),体量大,所以大数据平台需要能够对接各种来源及各种类型的海量数据。

数据存储及查询:数据接入之后,就需要根据不同的应用场景进行存储,例如关系型数据模型,非关系型数据模型,文档数据模型,大数据平台需要能够提供不同的存储模型及不同的查询手段。

数据计算:根据不同的应用场景会有不同的计算要求,简单的可以分为离线计算和实时计算,机器学习,多维分析。在数据对时效性要求不高且数据量大的情况下可以选择离线计算。例如报表之类的需求。但对于时效性要求比较高的场景,例如银行的风险控制,就需要选择实时计算模型。机器学习可以使用大数据平台的全量数据进行模型训练,常用于预测,预警,推荐等应用场景。例如今日头条。由于大数据平台数据的互通性使得可以从多个维度对某一事件进行分析,例如从商品,客户,价格,商品折扣,商品促销等多个维度进行分析,从而得出某一商品近期销售额是增加了还是减少了,商品的主要消费群体是什么年龄段的。

大数据平台安全管理:需要具备用户管理与访问控制能力。

任务管理及调度:我们开发的数据抽取,离线计算还是实时计算等都需要以任务形式提交到调度系统,可以进行任务追踪,日志查询key,执行周期性要求等。

--------------------------------------------------------------------

1、数据采集框架

Flume、Logstash、FileBeat常用的日志实时监控采集

sqoop和dataX关系型数据库离线采集

canal和MaxWell关系型数据库实时采集

大数据的采集处于大数据生命周期的第一个环节,从数据采集的类型看不仅仅要涵盖基础的结构化数据,半结构化数据,以及非结构化数据音频、视频、图像等。常见的数据采集方式包括系统日志采集、网络数据采集、设备数据采集。

系统日志采集

系统日志采集主要是对数据库、系统、服务器等运行状态,行为事件等数据抓取。

  • 埋点:浏览器(PC)打点、无线客户端、服务端打点。
  • 数据采集框架:Chukwa、Splunk Forwarder、Flume、Fluentd、Logstash、Scribe。
  • 网络数据采集

    网络数据采集是指通过爬虫或者公开 API 等方式从网站获取数据。数据的内容可以是文本、视屏、图片数据等。

    爬虫技术:Nutch、Heritrix、Scrapy、WebCollector。

    设备数据采集

    设备数据采集主要是指针对一些物理设备的数据采集,常见的如传感器,探针。

    经过采集的数据通过数据通道被传输存储。集中存储的数据源的数据发生变化也能通过数据通道尽快地通知对数据敏感的相应应用或者系统构建,使得它们能够尽快的捕获数据的变化。

    数据传输包含如下相关技术:消息队列、数据同步、数据订阅、序列化。

    消息队列是涉及大规模分布式系统时候经常使用的中间件产品,主要解决日志搜集,应用耦合,异步消息,流量削锋等问题实现高性能,高可用,可伸缩和最终一致性架构。

    在数据仓库建模中,未经任何加工处理的原始业务层数据,我们称之为 ODS (Operational Data Store) 数据。在互联网企业中,常见的 ODS 数据有业务日志数据(Log)和业务 DB 数据(DB)两类。对于业务 DB 数据来说,从 MySQL 等关系型数据库的业务数据进行采集,然后导入到数据仓库中,是进一个重要环节。如何准确、高效地把 MySQL 数据同步到数据仓库中?一般常用的解决方案是批量取数并 Load。数据同步解决各个数据源之间稳定高效的数据同步功能。

    数据订阅功能旨在帮助用户获取实时增量数据,用户能够根据自身业务需求自由消费增量数据,例如实现缓存更新策略、业务异步解耦、异构数据源数据实时同步及含复杂 ETL 的数据实时同 步等多种业务场景。

    序列化 (Serialization)是将对象的状态信息转换为可以存储或传输的形式的过程。数据序列化用于模块通讯时,将对象序列化为通信流,高效的传输到另一个模块,并提供反序列化还原数据。对于大数据传输场景下序列化的性能、大小也直接影响了数据传输的性能。

    --------------------------------------------------------------------

    2、数据存储框架

    ODS:原始数据层(保持数据的最初)

    DWD:数据仓库数据层(去除空值,脏数据,超过极限范围的明细解析等)

    DWS:数据仓库服务层: 宽表-用户行为,轻度聚合,对dwd层的数据在进行处理轻度汇总

    ADS: 做分析处理最后将同步到mysql数据库里边,给其他应用展示

    分布式文件/对象存储系统

    分布式存储系统面向海量数据的存储访问与共享需求,提供基于多存储节点的高性能,高可靠和可伸缩性的数据存储和访问能力,实现分布式存储节点上多用户的访问共享。

    目前业界比较流行的分布式存储系统如下:HDFS、OpenStack Swift、Ceph、GlusterFS、Lustre、AFS、OSS。

    分布式关系型数据库

    随着传统的数据库技术日趋成熟、计算机网络技术的飞速发展和应用范围的扩大,以分布式为主要特征的数据库系统的研究与开发受到人们的注意。关系型数据库也是建立在关系模型基础上的数据库,借助于集合代数等数学概念和方法来处理数据库中的数据。由于集中式关系型数据库系统的不足(性能、扩展性),分布式关系型数据库目前越来越多。

    目前业界比较流行的分布式关系型数据库如下:DRDS、TiDB、GreenPlum、Cobar、Aurora、Mycat。

    分析型数据库

    分析数据库是面向分析应用的数据库,与传统的数据库不同,它可以对数据进行在线统计、数据在 线分析、随即查询等发掘信息数据价值的工作,是数据库产品一个重要的分支。

    目前业界比较流行的分析型数据库如下:Kylin、AnalyticDB、Druid、Clickhouse、Vertica、MonetDB、InfiniDB、LucidDB。

    大数据时代,如何帮助用户从海量信息中快速准确搜索到目标内容,就需要搜索引擎。大数据搜索引擎是一个提供分布式,高性能、高可用、可伸缩的搜索和分析系统。

    目前常见的搜索引擎技术如下:Elasticsearch、Solr、OpenSearch。

    图数据库源起欧拉和图理论,也可称为面向/基于图的数据库,对应的英文是 Graph Database。图形数据库是 NoSQL 数据库的一种类型,它应用图形理论存储实体之间的关系信息。图形数据库是一种非关系型数据库,它应用图形理论存储实体之间的关系信息。最常见例子就是社会网络中人与人之间的关系。图数据库的基本含义是以“图”这种数据结构存储和查询数据,而不是存储图片的数据库。它的数据模型主要是以节点和关系(边)来体现,也可处理键值对。它的优点是快速解决复杂的关系问题。

    目前业界比较流行的图数据库如下:Titan、Neo4J、ArangoDB、OrientDB、MapGraph、ALLEGROGRAPH。

    列存储数据库

    列式数据库是以列相关存储架构进行数据存储的数据库,主要适合于批量数据处理和即时查询。相对应的是行式数据库,数据以行相关的存储体系架构进行空间分配,主要适合于大批量的数据处理,常用于联机事务型数据处理。

    目前业界比较流行的列存储数据库如下:Phoenix、Cassandra、Hbase、Kudu、Hypertable。

    文档数据库

    文档型数据库是 NoSQL 中非常重要的一个分支,它主要用来存储、索引并管理面向文档的数据或者类似的半结构化数据。

    目前业界比较流行的文档型数据库如下:MongoDb、CouchDB、OrientDB、MarkLogic。

    键值存储数据库

    目前业界比较流行的键值存储数据库如下:Redis、Memcached、Tair。

    ------------

    NoSQL数据库的一种类型,它应用图形理论存储实体之间的关系信息。最常见例子就是社会网络中人与人之间的关系。关系型数据库用于存储“关系型”数据的效果并不好,其查询复杂、缓慢、超出预期,而图形数据库的独特设计恰恰弥补了这个缺陷,主要包括ArangoDB、neo4j、OrientDB等等。

    ArangoDB:一个原生多模型数据库,兼有key/value键/值对、graph图和document文档数据模型,提供了涵盖三种数据模型的统一的数据库查询语言,并允许在单个查询中混合使用三种模型

    neo4j:一个高性能的NOSQL图形数据库,它将结构化数据存储在网络上而不是表中。它是一个嵌入式的、基于磁盘的、具备完全的事务特性的Java持久化引擎,但是它将结构化数据存储在网络(从数学角度叫做图)上而不是表中,Neo4j也可以被看作是一个高性能的图引擎,该引擎具有成熟数据库的所有特性

    OrientDB:一个开源的多模型 NoSQL 数据库,支持原生图形、文档全文、响应性、地理空间和面向对象等概念。它使用 Java 编写,速度非常快:在普通硬件上,每秒可存储 220,000 条记录。对于文档数据库,它还支持 ACID 事务处理

    文档数据库

    文档数据库被用来管理文档,在传统的数据库中,信息被分割成离散的数据段,而在文档数据库中,文档是处理信息的基本单位,包括mongoDB、CouchDB、MarkLogic等等。

    mongoDB:一个基于分布式文件存储的数据库。由 C++ 语言编写。旨在为 WEB 应用提供可扩展的高性能数据存储解决方案,它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。Mongo最大的特点是它支持的查询语言非常强大

    CouchDB:一个开源的面向文档的数据库管理系统,可以通过 RESTful JavaScript Object Notation (JSON) API 访问。术语 “Couch” 是 “Cluster Of Unreliable Commodity Hardware” 的首字母缩写,它反映了 CouchDB 的目标具有高度可伸缩性,提供了高可用性和高可靠性,即使运行在容易出现故障的硬件上也是如此

    MarkLogic:一种NoSQL数据库,能同时储存结构化和非结构化数据解决方案,包括JSON、XML、RDF、坐标、二进制数据(PDF、图片、视频)等等,而不仅仅是结构化的数据存储

    时序数据库

    主要用于指处理带时间标签(按照时间的顺序变化,即时间序列化)的数据,带时间标签的数据也称为时间序列数据,主要包括influxdb、TIMESCALE等等。

    influxdb:一个由InfluxData开发的开源时序型数据库。它由Go写成,着力于高性能地查询与存储时序型数据

    TIMESCALE:唯一支持完整SQL的开放源代码时间序列数据库。为快速摄取和复杂查询优化,TimescaleDB易于使用,如传统的关系数据库,但按以前为NoSQL数据库保留的方式进行缩放

    分析型数据库

    面向分析应用的数据库,与传统的数据库不同,它可以对数据进行在线统计、数据在线分析、随即查询等操作,是数据库产品一个重要的分支,主要包括Greenplum、VERTICA、GBASE等等。

    Greenplum:Greenplum DW/BI软件可以在虚拟化x86服务器上运行无分享(shared-nothing)的大规模并行处理MPP架构

    VERTICA:一款基于列存储的MPP (massively parallel processing)架构的数据库

    Clickhouse:一款MPP架构的列式存储数据库,其从OLAP场景需求出发,定制开发了一套全新的高效列式存储引擎,并且实现了数据有序存储、主键索引、稀疏索引、数据Sharding、数据Partitioning、TTL、主备复制等丰富功能。以上功能共同为ClickHouse极速的分析性能奠定了基础

    KV数据库

    是一种以键值对存储数据的一种数据库,类似java中的map。可以将整个数据库理解为一个大的map,每个键都会对应一个唯一的值。key-value分布式存储系统查询速度快、存放数据量大、支持高并发,非常适合通过主键进行查询,但不能进行复杂的条件查询,主要包括redis、TAIR及memcached等等。

    redis:一个开源的使用 ANSI C 语言编写、遵守 BSD 协议、支持网络、可基于内存、分布式、可选持久性的键值对(Key-Value)存储数据库,并提供多种语言的 API

    TAIR:是阿里云数据库Redis企业版,是基于阿里集团内部使用的Tair产品研发的云上托管键值对缓存服务。Tair作为一个高可用、高性能的分布式NoSQL数据库,专注于多数据结构的缓存与高速存储场景,完全兼容Redis协议

    memcached:是一个自由开源的、高性能、分布式内存对象缓存系统。

    文件存储的数据是以一个个文件的形式来管理,操作对象是文件和文件夹,存储协议是NFS、SAMBA(SMB)、POSIX等,它跟传统的文件系统如Ext4是一个类型的,但区别在于分布式文件存储提供了并行化的能力,主要包括HDFS、ceph、GlusterFS等等。

    HDFS:指被设计成适合运行在通用硬件(commodity hardware)上的分布式文件系统(Distributed File System),是一个高度容错性的系统,适合部署在廉价的机器上,能提供高吞吐量的数据访问,非常适合大规模数据集上的应用

    ceph:是一个统一的分布式存储系统,设计初衷是提供较好的性能、可靠性和可扩展性

    GlusterFS:一个可扩展的网络文件系统,相比其他分布式文件系统,GlusterFS具有高扩展性、高可用性、高性能、可横向扩展等特点,并且其没有元数据服务器的设计,让整个服务没有单点故障的隐患

    也称为基于对象的存储,是一种数据存储,其中每个数据单元存储为称为对象的离散单元。对象可以是离散单元,类似于pdf,音频,图像或视频文件。这些对象实际上可以是任何类型的数据和任何大小的数据。对象存储中的所有对象都存储在单个平面地址空间中,而没有文件夹层次结构。一个对象通常包含三个部分:对象的数据、对象的元数据以及一个全局唯一的标识符(即对象的ID),采用分布式架构,容量和处理能力弹性扩展,存储协议是S3、Swift等,主要包括OpenIO、MINIO及Cloudreve等等。

    OpenIO:一个开源的对象存储解决方案,用于大规模面向性能要求的低延迟的存储架构,特别为体积小量大的存储对象,发布容易,添加存储设备无需对数据进行重新分配

    MINIO:GlusterFS创始人之一Anand Babu Periasamy发布新的开源项目。Minio兼容Amason的S3分布式对象存储项目,采用Golang实现,客户端支Java,Python,Javacript, Golang语言。Minio可以做为云存储的解决方案用来保存海量的图片,视频,文档。由于采用Golang实现,服务端可以工作在Windows,Linux, OS X和FreeBSD上

    Cloudreve:一款国人开发的开源免费的网盘系统,借助Cloudreve你能够快速搭建起公私兼备的网盘。Cloudreve支持使用七牛云存储、阿里云OSS、又拍云、Amazon S3等对象存储作为存储后端,也支持本地服务器、远程服务器和OneDrive等作为存储后端,另外也支持aria2离线下载

    --------------------------------------------------------------------

    3、分布式资源管理调度框架

    分布式协调技术主要用来解决分布式环境当中多个进程之间的同步控制,让他们有序的去访问某种临界资源,防止造成"脏数据"的后果,主要包括Zookeeper、eureka、consul等等。

    产品举例:

    Zoomkeeper:一个分布式的,开放源码的分布式应用程序协调服务,是Google的Chubby一个开源的实现,是Hadoop和Hbase的重要组件。它是一个为分布式应用提供一致性服务的软件,提供的功能包括:配置维护、域名服务、分布式同步、组服务等

    eureka:Eureka是Netflix开发的服务发现框架,本身是一个基于REST的服务,主要用于定位运行在AWS域中的中间层服务,以达到负载均衡和中间层服务故障转移的目的

    consul:google开源的一个使用go语言开发的服务发现、配置管理中心服务。内置了服务注册与发现框架、分布一致性协议实现、健康检查、Key/Value存储、多数据中心方案,不再需要依赖其他工具

    1、Yarn是什么

  • Apache Hadoop YARN (Yet Another Resource Negotiator,另一种资源协调者)
  • 一种新的Hadoop资源管理器,一个通用资源管理系统
  • 为上层提供统一的资源管理与任务调度及监控,提高了集群管理效率、资源使用率、数据共享效率
  • 2、Yarn特点

  • 资源管理与计算框架解耦设计,一个集群资源共享给上层各个计算框架,按需分配,大幅度提高资源利用率
  • 运维成本显著下降,只需运维一个集群,同时运行满足多种业务需求的计算框架
  • 集群内数据共享一致,数据不再需要集群间拷贝转移,达到共享互用
  • 避免单点故障、集群资源扩展得到合理解决
  • 3、Yarn架构设计

    YARN总体上仍然是Master/Slave结构,在整个资源管理框架中,ResourceManager为Master,NodeManager为Slave。YARN主要由ResourceManager、NodeManager、ApplicationMaster和Container等几个组件构成。

    3.1概略介绍

  • Master/Slave结构,1个ResourceManager和多个NodeManager
  • Yarn由Client、ResourceManager、NodeManager、ApplicationMaster组成
  • Client向ResourceManager提交启动任务、杀死任务等命令请求
  • ApplicationMaster由对应的计算框架编写的应用程序完成。每个应用程序对应一个ApplicationMaster,ApplicationMaster向ResourceManager申请资源用于在NodeManager上启动相应的Task
  • NodeManager向ResourceManager通过心跳信息汇报NodeManager监控状况、任务执行状况、领取任务等                                                                                                                      3.1 运行流程图:
  • Yarn调度策略
  • Yarn双层调度架构

    为了克服集中式调度器的不足,双层调度器是一种很容易被想到的解决之道,它可看作是一种分而治之的机制或者是策略下放机制:双层调度器仍保留一个精简化的集中式资源调度器,但具体任务相关的调度策略则下放到各个应用程序调度器完成。

  • 将传统的集中式调度器一分为二,即资源调度器(ResourceManager)和应用程序调度器(ApplicationMaster)
  • ResourceManager即简化了的集中式资源调度器,具体作业的资源调度和管理由应用程序调度器ApplicationMaster负责
  • FIFO Scheduler(First In First Out,先进先出)

    默认的调度策略,把用户提交的作业顺序排成一个队列,所有用户共享,是一个先进先出的队列。

    无法控制用户的资源使用,大的应用可能会占用所有集群资源,导致其他应用被阻塞,造成集群的可用性差,所以不适用于共享集群。一般不在生产环境中使用。

    Capacity Scheduler(容器调度器)

    允许多用户共享整个集群,每个用户或组织分配专门的队列,不支持抢占式。队列内部默认使用FIFO,也支持Fair调度。

    Fair Scheduler(公平调度器)

    目标是为所有用户分配公平的资源。也支持多用户共享集群,也可划分多队列。队列内部不是FIFO,而是采用公平分配的方式。

    --------------------------------------------------------------------

    4、数据计算框架

    流式计算(Streaming compute)

    流式计算:利用分布式的思想和方法,对海量“流”式数据进行实时处理。流式计算更加强调计算数据流和低时延。这边所谓的流数据( streaming data)是一种不断增长的,无限的数据集。

    流式计算是否等于实时计算?习惯上实时和流式等价,但其实这种观点并不完全正确。数据的发生的时间和处理时间有可能是不一致的,只能说流式计算是一种低延迟的计算方式。

    注意:本文将微批处理和流处理混在一起。

    业界常见的流式计算框架:Storm、Flink、Yahoo S4、Kafka Stream、Twitter Heron、Apache Samza、Spark Streaming。

    大规模批量计算(batch compute)

    大规模批量计算是对存储的静态数据进行大规模并行批处理的计算。批量计算是一种批量、高时延、主动发起的计算。习惯上我们认为离线和批量等价,但其实是不准确的。离线计算一般是指数据处理的延迟。这里有两方面的含义第一就是数据是有延迟的,第二是是时间处理是延迟。在数据是实时的情况下,假设一种情况:当我们拥有一个非常强大的硬件系统,可以毫秒级的处理 Gb 级别的数据,那么批量计算也可以毫秒级得到统计结果。

    业界常见的大规模批量计算框架:Tez、MapReduce、Hive、Spark、Pig、大数据的编程模型 Apache Beam。

    即席查询分析 (ad-hoc query)

    大数据进行即席查询分析近两年日益成为关注领域。即席查询(Ad Hoc)是用户根据自己的需求,灵活的选择查询条件,系统能够根据条件快速的进行查询分析返回结果。即席查询和分析的计算模式兼具了良好的时效性与灵活性,是对批处理,流计算两大计算模式有力补充。大规模批量计算解决了大数据量批处理的问题,而即席查询分析则解决了适合商业智能分析人员的便捷交互式分析的问题。

    业界常见的框架:Impala、Hawq、Dremel、Drill、Phoenix、Tajo、Presto、Hortonworks Stinger。

    全量计算 & 增量计算

    很多大数据的任务中,数据是一个增量收集和更新的过程,这时候对于数据的处理可以使是全量加上增量计算的方式。增量计算只对部分新增数据进行计算来极大提升计算过程的效率,可应用到数据增量或周期性更新的场合。典型例子就是搜索引擎的周期性索引更新。

    相关基础知识:Lambda 架构、Kappa 架构、IOTA 架构。

    业界常见框架:Microsoft Kineograph、Galaxy、Google Percolator、Druid。

    图计算是一类在实际应用中非常常见的计算类型。许多大数据都是以大规模图或网络的形式呈现,如社交网络、传染病传播途径、交通事故对路网的影响许多非图结构的大数据,也常常会被转换为图模型后进行分析。图数据结构很好地表达了数据之间的关联性。要处理规模巨大的图数据,传统的单机处理方式已经无力处理,必须采用大规模机器集群构成的并行数据库。

    相关基础知识:GAS 编程模型、BSP 模型、节点为中心编程模型、计算范型。

    业界常见框架:Pregel、GraphChi、Spark GraphX、PowerGrah、Apache Giraph、Apache Hama。

    分布式协调系统

    大规模分布式系统中需要解决各种类型的协调需求,例如当当系统中加入一个进程或者物理机,如何自动获取参数和配置,当进程和物理机发生改变如何通知其他进程;单主控服务发生瘫痪,如何能够从备份中选取新的主控服务。分布式协调系统适用于大型的分布式系统,可以提供 统一命名服务、状态同步服务、集群管理、分布式应用配置项的管理等服务。

    业界常见框架:Chubby、阿里 Diamond、阿里 ConfigServer、zookeeper、Eureka、Consul。

    集群资源管理和调度

    资源管理调度的本质是集群、数据中心级别的资源统一管理和分配,以提高效率。其中,多租户、弹性计算、动态分配是资源管理系统要核心解决问题。

    管理调度框架:Omega、Brog、Mesos、Corona、Yarn、Torca。

    管理和监控工具:Ambari、Chukwa、Hue。

    工作流管理引擎

    随着企业的发展,他们的工作流程变得更加复杂,越来越多的有着错综复杂依赖关系的工作流需要增加监控,故障排除。如果没有明确的血缘关系。就可能出现问责问题,对元数据的操作也可能丢失。这就是有向无环图(DAG),数据管道和工作流管理器发挥作用的地方。

    复杂的工作流程可以通过 DAG 来表示。DAG 是一种图结构。信息必须沿特定方向在顶点间传递,但信息无法通过循环返回起点。DAG 的构建是数据管道,或者是一个进程的输入成为下一个进程的输入的顺序进程。

    构建这些管道可能会很棘手,但幸运的是,有几个开源的工作流管理器可用于解决这个问题,允许程序员专注于单个任务和依赖关系。

    业界常见框架:Oozie、Azkaban、Luigi、Airflow。

    离线数据计算
    实时数据计算

    1、流计算

    流计算秉承一个基本理念,即数据的价值随着时间的流逝而降低,如用户点击流。因此,当事件出现时就应该立即进行处理,而不是缓存起来进行批量处理。为了及时处理流数据,就需要一个低延迟、可扩展、高可靠的处理引擎,实时获取来自不同数据源的海量数据,经过实时分析处理,获得有价值的信息,主要的产品为STORM、Spark Streaming及Flink等等。

    产品举例:

    STORM:一个开源的分布式实时计算框架,可以以简单、可靠的方式进行大数据流的处理

    Spark Streaming:接收实时输入的数据流,并将数据拆分为一系列批次,然后进行微批处理,Spark Streaming 能够将数据流进行极小粒度的拆分,使得其能够得到接近于流处理的效果,但其本质上还是批处理

    Flink:一种针对流数据+批数据的计算框架,其把批数据看作流数据的一种特例,延迟性较低(毫秒级),且能够保证消息传输不丢失不重复

    2、批量计算

    批量计算是指对静态数据的批量处理,即当开始计算之前数据已经准备到位,主要用于数据挖掘和验证业务模型,包括MapReduce、spark、hive等等。

    产品举例:

    Hadoop MapReduce:一种编程模型,用于大规模数据集(大于1TB)的并行运算,概念"Map(映射)"和"Reduce(归约)"是它们的主要思想,极大地方便了编程人员在不会分布式并行编程的情况下,将自己的程序运行在分布式系统上

    spark:拥有Hadoop MapReduce所具有的优点,但不同于MapReduce的是Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的场景

    hive:基于Hadoop的一个数据仓库工具,用来进行数据提取、转化、加载,这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制

    3、图计算

    以图作为数据模型来表达问题并予以解决的过程,包括GraphLab、GraphX、Giraph及Gelly等等。

    产品举例:

    GraphLab:由CMU(卡内基梅隆大学)的Select 实验室在2010 年提出的一个基于图像处理模型的开源图计算框架,框架使用C++语言开发实现。该框架是面向机器学习(ML)的流处理并行计算框架,可以运行在多处理机的单机系统、集群或是亚马逊的EC2 等多种环境下。框架的设计目标是像MapReduce一样高度抽象,可以高效执行与机器学习相关的、具有稀疏的计算依赖特性的迭代性算法,并且保证计算过程中数据的高度一致性和高效的并行计算性能

    GraphX:一个分布式图处理框架,它是基于Spark平台提供对图计算和图挖掘简洁易用的而丰富的接口,极大的方便了对分布式图处理的需求

    Giraph:Facebook搞的图计算引擎,基于hadoop,编程模型接近于Pregel,主要卖点是支持大图

    --------------------------------------------------------------------

    5、数据分析技术框架

    --------------------------------------------------------------------

    6、任务调度框架

    --------------------------------------------------------------------

    7、基础框架

    ----------------------------------------------------------------------

    8、数据检索框架

    --------------------------------------------------------------------

    9、集群安装管理框架

    主要负责将集群中的硬件资源以一定的策略分配给不同的计算任务,主要包括Ambori、MESOS、YARN等等。

    产品举例:

    Ambori:一种基于Web的工具,支持Apache Hadoop集群的供应、管理和监控。Ambari已支持大多数Hadoop组件,包括HDFS、MapReduce、Hive、Pig、 Hbase、Zookeeper、Sqoop和Hcatalog等等

    MESOS:可以将整个数据中心的资源(包括CPU、内存、存储、网络等)进行抽象和调度,让应用共享集群资源,并无需关心资源的分布情况

    YARN:一种新的 Hadoop 资源管理器,它是一个通用资源管理系统,可为上层应用提供统一的资源管理和调度,它的引入为集群在利用率、资源统一管理和数据共享等方面带来了巨大好处

    --------------------------------------------------------------------

    10、工作流管理

    工作流含义很广,这里指能对各种数据任务进行灵活编排和调度的工具,包括Airflow、nifi、Oozie等等,很多企业大数据工作流管理都跟自身的数据开发管理平台紧耦合。

    产品举例:

    Airflow:Airbnb 开源的一个用 Python 编写的工作流管理平台,用于编排复杂计算工作流和数据处理流水线。如果您发现自己运行的是执行时间超长的 cron 脚本任务,或者是大数据的批处理任务,Airflow 可能是能帮助您解决目前困境的神器

    nifi:Apache支持下基于可视化流程设计的数据分发平台,是大数据的搬运、提取、推送、转换、聚合、分发的开源软件工具,能够与Hadoop生态系统的大数据存储和各种文件、REST服务、SOAP服务、消息服务等联合使用,构成一体化的数据流服务

    Oozie:起源于雅虎,主要用于管理与组织Hadoop工作流。Oozie的工作流必须是一个有向无环图,实际上Oozie就相当于Hadoop的一个客户端,当用户需要执行多个关联的MR任务时,只需要将MR执行顺序写入workflow.xml,然后使用Oozie提交本次任务,Oozie会托管此任务流

    --------------------------------------------------------------------

    11、数据管理技术

    1、元数据管理

    元数据管理统一管控业务元数据、技术元数据、管理元数据等等,并面向开发人员、最终用户提供元数据服务,对业务系统和数据分析平台的开发、维护过程提供支持,元数据管理软件包括Apache atlas等等,各个行业大多有自己独特的元数据管理软件。

    产品举例:

    Apache atlas:为组织提供开放式元数据管理和治理功能,用以构建其数据资产目录,对这些资产进行分类和管理,并为数据分析师和数据治理团队提供围绕这些数据资产的协作功能

    MetaCube:普元发布的全面支撑自服务的大数据治理平台

    2、数据集成

    数据集成是把不同来源、格式、特点性质的数据在逻辑上或物理上有机地集中,从而为企业提供全面的数据共享。

    产品举例:

    DataX:DataX 是阿里开源的一个异构数据源离线同步工具,致力于实现包括关系型数据库(MySQL、Oracle等)、HDFS、Hive、ODPS、HBase、FTP等各种异构数据源之间稳定高效的数据同步功能

    Kettle:一款国外开源的 ETL 工具,纯 Java 编写,绿色无需安装,数据抽取高效稳定(数据迁移工具)

    3、数据建模

    数据建模指的是对现实世界各类数据的抽象,包括建立数据库实体以及各实体之间的关系等等,主要包括的产品为erwin、PowerDesigner等等。

    产品举例:

    erwin:业界领先的数据建模解决方案,提供一个简单的,可视化界面来管理复杂的数据环境

    PowerDesigner:Sybase的企业建模和设计解决方案,采用模型驱动方法,将业务与IT结合起来,可帮助部署有效的企业体系架构,并为研发生命周期管理提供强大的分析与设计技术

    --------------------------------------------------------------------

    12、数据分析应用技术

    1、BI工具

    BI即商业智能,无需编程的数据可视化工具,是一套完整的解决方案,用来将企业中现有的数据进行有效的整合,快速准确的提供报表并提出决策依据,帮助企业做出明智的业务经营决策,包括tableau、FineBI、Power BI、spagobi、Quick BI、QlikView、 iCharts、Grow、Visme、Datawrapper等等。

    产品举例:

    tableau:人人可用的数据可视化分析工具

    FineBI:帆软新一代自助大数据分析BI工具

    Power BI:微软用于分析数据和共享见解的一套可视化业务分析工具

    spagobi:开源商业智能套件

    Quick BI:阿里轻量级自助BI工具服务平台

    2、数据可视化开发工具

    更为灵活的可视化编程开发工具,包括ECHARTS、D3.js、Plotly、Chart.js、 Google Charts、 Ember Charts、 Chartist.js、Antv等等。

    产品举例:

    ECHARTS:最初由百度团队开源,基于JavaScript的数据可视化图表库,提供直观,生动,可交互,可个性化定制的数据可视化图表

    D3.js:用于数据可视化的开源的JavaScript函数库,被认为是很好的JavaScript可视化框架之一

    Plotly:一个知名的、功能强大的数据可视化框架,可以构建交互式图形和创建丰富多样的图表和地图

    Antv:蚂蚁金服全新一代数据可视化解决方案,致力于提供一套简单方便、专业可靠、无限可能的数据可视化最佳实践

    3、数据挖掘平台

    提供机器学习训练和发布的平台,数据挖掘可视化成为一种趋势,包括Angel、KNIME、Rapid Miner、IBM SPSS Modeler、Oracle Data Mining、SAS Data Mining、Apache Mahout、Spark MLlib、Python/R、PAI等等。

    产品举例:

    Angel:腾讯、香港科技大学等联合研发的使用Java和Scala语言开发,面向机器学习的高性能分布式计算框架

    KNIME:一个用户友好、可理解、全面的开源数据集成、处理、分析和探索平台,它有一个图形用户界面,帮助用户方便地连接节点进行数据处理

    Rapid Miner:一款不需要编程就可以进行数据分析和数据挖掘的软件,简单易学,人机界面也十分友好

    IBM SPSS Modeler:以图形化的界面、简单的拖拽方式来快速构建数据挖掘分析模型著称,,它允许您在不编程的情况下生成各种数据挖掘算法

    Oracle Data Mining:是 Oracle SQL Developer 的一个扩展,数据分析师通过它能够查看数据、构建和评估多个机器学习/数据挖掘模型以及加速模型部署

    SAS Data Mining:提供了一个易于使用的GUI,其描述性和预测性建模提供了更好的理解数据的见解,还包括可升级处理、自动化、强化算法、建模、数据可视化和勘探等先进工具

    Apache Mahout:Apache Software Foundation(ASF) 旗下的一个开源项目,提供一些可扩展的机器学习领域经典算法的实现,旨在帮助开发人员更加方便快捷地创建智能应用程序

    Spark MLlib:是Spark对常用的机器学习算法的实现库,同时包括相关的测试和数据生成器

    Python/R:大家都懂的

    4、深度学习引擎

    提供深度学习训练和发布的平台,包括TensorFlow、PP飞浆、caffe2、Theano、keras、MXNet等等。

    产品举例:

    TensorFlow:一个使用数据流图(data flow graphs)进行数值计算的开源软件库,可以看成是一个嵌入Python的编程语言,你写的TensorFlow代码会被Python编译成一张图,然后由TensorFlow执行引擎运行

    Theano:Theano 是一个比较低层的库,它支持自动的函数梯度计算,带有 Python 接口并集成了 Numpy,这使得它从一开始就成为了通用深度学习领域最常使用的库之一,由于它不支持多 GPU 和水平扩展,已然开始被遗忘

    PyTorch:一个开源的Python机器学习库,本质上是Numpy的替代者,而且支持GPU、带有高级功能,可以用来搭建和训练深度神经网络

    caffe2:PyTorch有优秀的前端,Caffe2有优秀的后端,整合起来以后可以进一步最大化开发者的效率

    keras:一个由Python编写的开源人工神经网络库,是一个非常高层的库,可以作为Tensorflow、Microsoft-CNTK和Theano的高阶应用程序接口,进行深度学习模型的设计、调试、评估、应用和可视化,Keras 强调极简主义——你只需几行代码就能构建一个神经网络

    Deeplearning4j:为Java和Java虚拟机编写的开源深度学习库,是广泛支持各种深度学习算法的运算框架

    PP飞浆:百度一个集深度学习核心框架、工具组件和服务平台为一体的技术先进、功能完备的开源深度学习平台

    MXNet:亚马逊的一款设计为效率和灵活性的深度学习框架。它允许你混合符号编程和命令式编程,从而最大限度提高效率和生产力

    cntk:微软出品的一个开源的深度学习工具包,可以运行在CPU上,也可以运行在GPU上。CNTK的所有API均基于C++设计,因此在速度和可用性上很好

    5、图分析

    图分析使用基于图的方法来分析连接的数据,可以查询图数据,使用基本统计信息,可视化地探索图、展示图,或者将图信息预处理后合并到机器学习任务中,图分析引擎包括Gephi、NodeXL等等。

    产品举例:

    Gephi:是开源免费跨平台基于JVM的复杂网络分析软件, 其主要用于各种网络和复杂系统,因它简单、易学、出图美观而备受青睐

    NodeXL:是一个功能强大且易于使用的交互式网络可视化和分析工具,它以MS Excel(Excel 2007或者Excel 2010)模板的形式,利用MS Excel作为数据展示和分析平台

    Palantir:是一种人和机器的高效结合的平台,它是一个数据分析平台,通过图(graphs)、地图(maps)、统计(statistics)、集合(set theory)论分析结构或非结构化数据

    --------------------------------------------------------------------

    13、数据安全流通技术

    1、隐私计算

    指在保证数据提供方不泄露敏感数据的前提下,对数据进行分析计算并能验证计算结果的信息技术。广义上是指面向隐私保护的计算系统与技术,涵盖数据的产生、存储、计算、应用、销毁等信息流程全过程,想要达成的效果是使数据在各个环节中“可用不可见”,包括Private Join &Compute、crypten、FedAI及FEDLEARNER等等。

    产品举例:

    Private Join Compute:谷歌开源的多方计算 (MPC) 工具 ,以帮助组织机构更好地处理机密数据集,Private Join and Compute 是一种密码协议,可供双方联合用于研究工作,在相互共享数据之前对数据进行加密。该系统确保每一方都不会暴露自己的原始数据,而且所有的标识符以及相关数据仍然是完全加密的而且无法在共享进程中读取。解密和共享的唯一内容以汇总统计信息的形式呈现,然后组织机构可以使用它来发现共性和并收集情报

    crypten:Facebook开源的多方安全计算(MPC)的框架,其底层依赖于深度学习框架PyTorch

    FedAI:联邦学习生态是一个促进 AI 多方建模的技术社区,使用联邦学习技术能够满足用户隐私保护、数据安全、数据保密和政府法规的要求

    FEDLEARNER:字节跳动开源的联邦机器学习平台

    2、数据脱敏

    指对某些敏感信息通过脱敏规则进行数据的变形,实现敏感隐私数据的可靠保护。在涉及客户安全数据或者一些商业性敏感数据的情况下,在不违反系统规则条件下,对真实数据进行改造并提供测试使用,如身份证号、手机号、卡号、客户号等个人信息都需要进行数据脱敏在,主要包括DATPROF、IRI、ShardingSphere等等。

    产品举例:

    DATPROF PRIVACY:提供了一种掩盖和生成用于测试数据库的数据的智能方法,它以一种非常简单且经过验证的方式为子集数据库提供了获得专利的算法

    IRI:IRI是一家成立于1978年的美国ISV,以CoSort快速数据转换,FieldShield数据屏蔽和RowGen测试数据产品而闻名。IRI还将这些捆绑在一起,并将数据发现,集成,迁移,治理和分析整合到一个称为Voracity的大数据管理平台中

    ShardingSphere:Apache ShardingSphere是一套开源的分布式数据库中间件解决方案组成的生态圈,数据脱敏模块属于ShardingSphere分布式治理这一核心功能下的子功能模块。它通过对用户输入的SQL进行解析,并依据用户提供的脱敏配置对SQL进行改写,从而实现对原文数据进行加密,并将原文数据(可选)及密文数据同时存储到底层数据库。在用户查询数据时,它又从数据库中取出密文数据,并对其解密,最终将解密后的原始数据返回给用户

    3、身份认证

    指通过一定的手段,完成对用户身份的确认,身份验证的方法有很多,基本上可分为:基于共享密钥的身份验证、基于生物学特征的身份验证和基于公开密钥加密算法的身份验证,主要包括CAS、KEYCLOAK、Kerberos等等。

    产品举例:

    CAS:统一身份认证CAS(Central Authentication Service)是SSO(单点登录SSO(Single Sign ON),指在多个应用系统中,只需登录一次,即可在多个应用系统之间共享登录)的开源实现,利用CAS实现SSO可以很大程度的降低开发和维护的成本

    KEYCLOAK:一个为浏览器和 RESTful Web 服务提供 SSO 的集成

    Kerberos:一种计算机网络授权协议,用来在非安全网络中,对个人通信以安全的手段进行身份认证

    通过《白皮书》的指引,我们对于整个大数据技术体系会有一个基本了解,当然还会有缺失,比如数据分析应用技术大类中缺少了OLAP、基础技术中缺少了HTAP这种混合数据库等等,但已经比较全面了。

    -------------------------------------------------------------------

    14、Hadoop生态系统

    关键组件及作用如下:

    1. HDFS(Hadoop分布式文件系统):
    HDFS是整个hadoop体系的基础,负责数据的存储与管理。HDFS有着高容错性(fault-tolerant)的特点,并且设计用来部署在低廉的(low-cost)硬件上。而且它提供高吞吐量(high throughput)来访问应用程序的数据,适合那些有着超大数据集(large data set)的应用程序。

    Client:切分文件,访问HDFS,与NameNode交互,获取文件位置信息,与DataNode交互,读取和写入数据。
    NameNode:master节点,在hadoop1.x中只有一个,管理HDFS的名称空间和数据块映射信息,配置副本策略,处理客户端请求。
    DataNode:slave节点,存储实际的数据,汇报存储信息给NameNode。
    Secondary NameNode:辅助NameNode,分担其工作量:定期合并fsimage和fsedits,推送给NameNode;紧急情况下和辅助恢复NameNode,但其并非NameNode的热备。

    2. MapReduce(分布式计算框架):
    MapReduce是一种计算模型,用于处理大数据量的计算。其中Map对应数据集上的独立元素进行指定的操作,生成键-值对形式中间,Reduce则对中间结果中相同的键的所有值进行规约,以得到最终结果。

    Jobtracker:master节点,只有一个,管理所有作业,任务/作业的监控,错误处理等,将任务分解成一系列任务,并分派给Tasktracker。
    Tacktracker:slave节点,运行 Map task和Reduce task;并与Jobtracker交互,汇报任务状态。
    Map task:解析每条数据记录,传递给用户编写的map()函数并执行,将输出结果写入到本地磁盘(如果为map—only作业,则直接写入HDFS)。
    Reduce task:从Map 它深刻地执行结果中,远程读取输入数据,对数据进行排序,将数据分组传递给用户编写的Reduce()函数执行。

    3. HBase(分布式列存数据库):
    HBase是一个建立在HDFS之上,面向列的针对结构化数据的可伸缩、高可靠、高性能、分布式和面向列的动态模式数据库。
    HBase采用了BigTable的数据模型:增强的稀疏排序映射表(Key/Value),其中,键由行关键字、列关键字和时间戳构成。
    HBase提供了对大规模数据的随机、实时读写访问,同时,HBase中保存的数据可以使用MapReduce来处理,它将数据存储和并行计算完美地结合在一起。

    4. ZooKeeper(分布式协作服务):
    ZooKeeper主要目标是解决分布式环境下的数据管理问题:统一命名,状态同步,集群管理,配置同步等。
    Hadoop的许多组件依赖于Zookeeper,它运行在计算机集群上面,用于管理Hadoop操作。

    5. Hive/Impala(基于Hadoop的数据仓库):
    Hive定义了一种类似SQL的查询语言(HQL),将SQL转化为MapReduce任务在Hadoop上执行。通常用于离线分析。
    HQL用于运行存储在Hadoop上的查询语句,Hive让不熟悉MapReduce开发人员也能编写数据查询语句,然后这些语句被翻译为Hadoop上面的MapReduce任务。

    Impala是用于处理存储在Hadoop集群中的大量数据的MPP(大规模并行处理)SQL查询引擎。 它是一个用C ++和Java编写的开源软件。 与Apache Hive不同,Impala不基于MapReduce算法。 它实现了一个基于守护进程的分布式架构,它负责在同一台机器上运行的查询执行的所有方面。因此执行效率高于Apache Hive。

    6. Pig(ad-hoc脚本):
    由yahoo开源,设计动机是提供一种基于MapReduce的ad-hoc(计算在query时发生)数据分析工具。
    Pig定义了一种数据流语言——Pig Latin,他是MapReduce编程的复杂性的抽象,Pig平台包括运行环境和用于分析Hadoop数据集的脚本语言(Pig-Latin)。其编译器将Pig Latin翻译成MapReduce程序设计,将脚本转换为MapReduce任务在Hadoop上执行,通常用于进行离线分析。

    7. Sqoop(数据同步工具):
    是SQL-to-Hadoop的缩写,主要用于传统数据库和Hadoop之前传输数据。数据的导入和导出本质上是Mapreduce程序,充分利用了MR的并行化和容错性。
    Sqoop利用数据库技术描述数据架构,用于在关系数据库、数据仓库和Hadoop之间转移数据。

    8. Flume(日志收集工具):
    Flume是一个可扩展、适合复杂环境的海量日志收集系统。它将数据从产生、传输、处理并最终写入目标的路径的过程抽象为数据流,在具体的数据流中,数据源支持在Flume中定制数据发送方,从而支持收集各种不同协议数据。
    同时,Flume数据流提供对日志数据进行简单处理的能力,如过滤、格式转换等。此外,Flume还具有能够将日志写往各种数据目标(可定制)的能力。总的来说,Flume是一个可扩展、适合复杂环境的海量日志收集系统。
    Flume以Agent为最小的独立运行单位,一个Agent就是一个JVM。单个Agent由Source、Sink和Channel三大组件构成:

    Source:从客户端收集数据,并传递给Channel。
    Channel:缓存区,将Source传输的数据暂时存放。
    Sink:从Channel收集数据,并写入到指定地址。
    Event:日志文件、avro对象等源文件。

    9. Mahout(数据挖掘算法库):
    Mahout的主要目标是创建一些可扩展的机器学习领域经典算法的实现。已经包含了聚类、分类、推荐引擎(协同过滤)和频繁项集等数据挖掘算法。除了算法,Mahout还包含数据的输入/输出工具,与其他存储系统(如数据库、MongoDB等)集成的数据挖掘支持架构。

    10. YARN/Mesos(分布式资源管理器):
    YARN是下一代MapReduce,即MRv2,是在第一代MapReduce基础上演变而来的,主要是为了解决原始Hadoop扩展性较差,不支持多计算框架而提出的。

    Mesos诞生于UC Berkeley的一个研究项目,现已成为Apache项目,当前有一些公司使用Mesos管理集群资源,比如Twitter。与yarn类似,Mesos是一个资源统一管理和调度的平台,同样支持比如MR、steaming等多种运算框架。

    11. Tachyon(超光速粒子):
    是以内存为中心的分布式文件系统,拥有高性能和容错能力,能够为集群框架(Spark、MapReduce)提供可靠的内存级速度的文件共享服务。

    12. Spark(分布式计算框架):
    Spark是一种基于内存的分布式并行计算框架,不同于MapReduce的是——Job中间输出结果可以保存在内存中,从而不再需要读写HDFS,因此Spark能更好地适用于数据挖掘与机器学习等需要迭代的MapReduce的算法。

    Cluster Manager:在standalone模式中即为Master主节点,控制整个集群,监控worker。在YARN模式中为资源管理器
    Worker节点:从节点,负责控制计算节点,启动Executor或者Driver。
    Driver: 运行Application 的main()函数
    Executor:执行器,是为某个Application运行在worker node上的一个进程
    Spark将数据抽象为RDD(弹性分布式数据集),内部提供了大量的库,包括Spark Core、Spark SQL、Spark Streaming、MLlib、GraphX。 开发者可以在同一个应用程序中无缝组合使用这些库。

    Spark Core:包含Spark的基本功能;尤其是定义RDD的API、操作以及这两者上的动作。其他Spark的库都是构建在RDD和Spark Core之上的
    Spark SQL:提供通过Apache Hive的SQL变体Hive查询语言(HiveQL)与Spark进行交互的API。每个数据库表被当做一个RDD,Spark SQL查询被转换为Spark操作。
    Spark Streaming:对实时数据流进行处理和控制。Spark Streaming允许程序能够像普通RDD一样处理实时数据,通过短时批处理实现的伪流处理。
    MLlib:一个常用机器学习算法库,算法被实现为对RDD的Spark操作。这个库包含可扩展的学习算法,比如分类、回归等需要对大量数据集进行迭代的操作。
    GraphX:控制图、并行图操作和计算的一组算法和工具的集合。GraphX扩展了RDD API,包含控制图、创建子图、访问路径上所有顶点的操作。
    13. Kafka(分布式消息队列):
    Kafka是一种高吞吐量的分布式发布订阅消息系统,它可以处理消费者规模的网站中的所有动作流数据。实现了主题、分区及其队列模式以及生产者、消费者架构模式。

    生产者组件和消费者组件均可以连接到KafKa集群,而KafKa被认为是组件通信之间所使用的一种消息中间件。**KafKa内部分为很多Topic(一种高度抽象的数据结构),每个Topic又被分为很多分区(partition),每个分区中的数据按队列模式进行编号存储。被编号的日志数据称为此日志数据块在队列中的偏移量(offest),偏移量越大的数据块越新,即越靠近当前时间。**生产环境中的最佳实践架构是Flume+KafKa+Spark Streaming。

    14. Flink(分布式计算框架):
    Flink是一个基于内存的分布式并行处理框架,类似于Spark,但在部分设计思想有较大出入。对 Flink 而言,其所要处理的主要场景就是流数据,批数据只是流数据的一个极限特例而已。
    Flink VS Spark

    Spark中,RDD在运行时是表现为Java Object,而Flink主要表现为logical plan。所以在Flink中使用的类Dataframe api是被作为第一优先级来优化的。但是相对来说在spark RDD中就没有了这块的优化了。
    Spark中,对于批处理有RDD,对于流式有DStream,不过内部实际还是RDD抽象;在Flink中,对于批处理有DataSet,对于流式我们有DataStreams,但是是同一个公用的引擎之上两个独立的抽象,并且Spark是伪流处理,而Flink是真流处理。
    15. Oozie(工作流调度器):
    Oozie是一个可扩展的工作体系,集成于Hadoop的堆栈,用于协调多个MapReduce作业的执行。它能够管理一个复杂的系统,基于外部事件来执行,外部事件包括数据的定时和数据的出现。
    Oozie工作流是放置在控制依赖DAG(有向无环图 Direct Acyclic Graph)中的一组动作(例如,Hadoop的Map/Reduce作业、Pig作业等),其中指定了动作执行的顺序。
    Oozie使用hPDL(一种XML流程定义语言)来描述这个图。

    16. Apache Phoenix:
    是HBase的SQL驱动(HBase 的SQL接口),Phoenix使用HBase支持通过JDBC的方式进行访问,并将SQL查询转换成HBase的扫描和相应的动作。

    17. Apache Ambari:
    是安装部署配置管理工具,其作用就是创建、管理、监视Hadoop的集群,是为了让Hadoop以及相关的大数据软件更容易使用一个Web工具。

    18. Apache Kylin:
    Apache Kylin™是一个开源的、分布式的分析型数据仓库,提供Hadoop/Spark 之上的 SQL 查询接口及多维分析(OLAP)能力以支持超大规模数据,最初由 eBay 开发并贡献至开源社区。它能在亚秒内查询巨大的表。
    Apache Kylin™ 令使用者仅需三步,即可实现超大数据集上的亚秒级查询。

    定义数据集上的一个星形或雪花形模型
    在定义的数据表上构建cube
    使用标准 SQL 通过 ODBC、JDBC 或 RESTFUL API 进行查询,仅需亚秒级响应时间即可获得查询结果
    Kylin 提供与多种数据可视化工具的整合能力,如 Tableau,PowerBI 等,令用户可以使用 BI 工具对 Hadoop 数据进行分析。

    19、yarn

    作为hadoop的资源分配和调度的基础组件,有哪些相关的参数是和这个组件有关呢?

  • ResourceManager相关
  • yarn.resourcemanager.scheduler.class    #配置调度器,apache yarn默认容量调度器,CDH默认公平调度器
    yarn.resourcemanager.scheduler.client.thread-count    # ResourceManager处理调度器请求的现场数量,默认50
    
  • NodeManager相关
  • yarn.nodemanager.resource.detect-hardware-capabilities    #是否让yarn自己检测硬件进行配置,默认false
    yarn.nodemanager.resource.count-logical-processor-as-cores    #是否将虚拟核数当作CPU核数,默认false
    yarn.nodemanager.resource.pcores-vcores-multiplier    #虚拟核数和物理核数乘数,默认为1.0
    yarn.nodemanager.resource.memory-mb    # NodeManager使用内存,默认8G
    yarn.nodemanager.resource.system-reserved-memory-mb     #NodeManager为系统保留多少内存,以上二个参数配置一个即可
    yarn.nodemanager.resource.cpu-vcores     #NodeManager使用CPU核数,默认8个
    yarn.nodemanager.pmem-check-enabled    #是否开启物流内存检查限制container,默认打开
    yarn.nodemanager.vmem-check-enabled     #是否开启虚拟内存检查限制container,默认代开
    yarn.nodemanager.vmem-pmem-ratio    #虚拟内存物理内存比例,默认2.1
    
  • Container相关
  • yarn.scheduler.minimum-allocation-mb    #容器最小内存,默认1G
    yarn.scheduler.maximum-allocation-mb    #容器最大内存,默认8G
    yarn.scheduler.minimum-allocation-vcores    #容器最小CPU核数,默认1个
    yarn.scheduler.maximum-allocation-vcores    #容器最大CPU核数,默认4个
    

    那在部署环境我们要怎么分配呢?
    eg:3台服务器,每台配置4G内存,4核CPU,4线程,如果我们处理的是1G的文件进行数据的count统计,
    那么就会有 1G/128M=8个MapTask 1个ReduceTask,1个MrAppMaster,平均下来就是每个节点有3个任务,
    那我们按4 3 3 的比例分配10个任务。

    yarn自定义scheduler队列
    yarn支持3种调度器,FIFO,容量,公平调度器。

  • 多队列:每个队列可配置一定的资源量,每个队列采用FIFO调度策略
  • 容器保证:管理员可为每个队列设置资源最低保证和资源使用上限
  • 灵活性:如果一个队列中的资源有剩余,可以暂时共享给需要资源的队列,而一旦该队列有新的应用程序提交,则其他队列借调的资源会归还给该队列。
  • 多租户:支持多用户共享集群和多应用程序同时运行,为了防止同一个用户的作业独占队列中的资源,该调度器会对同一用户提交的作业所占资源量进行限定。
  • --------------------------------------------------------------------

    1、Sqoop是apache旗下的一款 ”Hadoop和关系数据库之间传输数据”的工具
    导入数据:将MySQL,Oracle导入数据到Hadoop的HDFS、HIVE、HBASE等数据存储系统
    导出数据:从Hadoop的文件系统中导出数据到关系数据库

    2、DataX 是阿里巴巴集团内被广泛使用的离线数据同步工具,致力于实现包括:关系型数据库(MySQL、Oracle等)、HDFS、Hive、HBase、ODPS、FTP等各种异构数据源之间稳定高效的数据同步功能。

    DataX目前已经有了比较全面的插件体系,主流的RDBMS数据库、NOSQL、大数据计算系统都已经接入。DataX目前支持数据如下:

    3、Maxwell 是一个能实时读取 MySQL 二进制日志文件binlog,并生成 Json格式的消息,作为生产者发送给 Kafka,Kinesis、RabbitMQ、Redis、
    Google Cloud Pub/Sub、文件或其它平台的应用程序。它的常见应用场景有ETL、维护缓存、收集表级别的dml指标、增量到搜索引擎、数据分区迁移、
    切库binlog回滚方案等。

    支持SELECT * FROM table的方式进行全量数据初始化。
    支持在主库发生failover后,自动恢复binlog位置,实现断点续传。
    可以对数据进行分区,解决数据倾斜问题,发送到Kafka的数据支持库、表、列等级别的数据分区。
    工作方式是伪装为slave接收binlog events,然后根据schema信息拼装,可以接受ddl、xid、row等event。

    4、在一个完整的离线大数据处理系统中,除了hdfs+mapreduce+hive组成分析系统的核心之外,还需要数据采集、结果数据导出、任务调度等不可或缺的辅助系统

  • Flume是一个分布式、可靠、和高可用的海量日志采集、聚合和传输的系统。
  • Flume可以采集文件,socket数据包、文件、文件夹、kafka等各种形式源数据,又可以将采集到的数据(下沉sink)输出到HDFS、hbase、hive、kafka等众多外部存储系统中
  • 一般的采集需求,通过对flume的简单配置即可实现
  • Flume针对特殊场景也具备良好的自定义扩展能力,因此,flume可以适用于大部分的日常数据采集场景
  • 2.1 高可靠性
    去中心化多Master和Worker,自身支持HA功能,采用任务队列来避免过载,不会造成机器卡死
    2.2.简单易用
    DAG监控界面,所有流程定义都是可视化,通过拖拽任务制定DAG
    通过API方式与第三方系统对接,一键部署。
    2.3.丰富的使用场景
    支持暂停、恢复操作,支持多租户,更好的应对大数据的使用场景,支持更多的任务类型,如hive,mr,spark,python
    2.4.高扩展性
    支持自定义任务类型,调度器使用分布式调度,调度能力随集群线性增长,Master和Worker支持动态上下线

    6、Azkaban介绍

  • Azkaban是由Linkedin开源的一个批量工作流任务调度器。用于在一个工作流(work flow)内以一个特定的顺序运行一组工作和流程。
  • Azkaban定义了一种KV格式文件(properties)来建立任务之间的依赖关系,并提供一个易于使用的web用户界面维护和跟踪你的工作流。
  • 它有如下功能特点:
  • 提供功能清晰、简单易用的web UI界面
  • 方便上传工作流
  • 调度工作流
  • 能够杀死并重新启动工作流
  • 工作流和任务的日志记录和审计
  • Hive提供了与HBase的集成,使得能够在HBase表上使用hive sql 语句进行查询、插入操作以及进行Join和Union等复杂查询,同时也可以将hive表中的数据映射到Hbase中

    1 HBase与Hive的对比

    1.1 Hive

  • 数据仓库管理系统
    Hive的本质其实就相当于将HDFS中已经存储的文件在Mysql中做了一个双射关系,以方便使用HQL去管理查询。
  • 用于数据分析、清洗
    Hive适用于离线的数据分析和清洗,延迟较高
  • 基于HDFS、MapReduce(或者其他计算引擎如:Tez、Spark)
    Hive存储的数据依旧在DataNode上,编写的HQL语句终将是转换为MapReduce代码执行。(不要钻不需要执行MapReduce代码的情况的牛角尖)
  • 1.2 HBase

  • 数据库管理系统
    是一种面向列存储的非关系型数据库。
  • 用于存储结构化和非结构话的数据
    适用于单表非关系型数据的存储,不适合做关联查询,类似JOIN等操作。
  • 基于HDFS
    数据持久化存储的体现形式是Hfile,存放于DataNode中,被ResionServer以region的形式进行管理。
  • 延迟较低,接入在线业务使用
    面对大量的企业数据,HBase可以直线单表大量数据的存储,同时提供了高效的数据访问速度。
  • 1.3 总结:Hive与HBase

  • Hive和Hbase是两种基于Hadoop的不同技术,Hive是一种类SQL的引擎,并且运行MapReduce任务,Hbase是一种在Hadoop之上的NoSQL 的Key/vale数据库。
    这两种工具是可以同时使用的。就像用Google来搜索,用FaceBook进行社交一样,Hive可以用来进行统计查询,HBase可以用来进行实时查询,
    数据也可以从Hive写到HBase,或者从HBase写回Hive。
  • 下图显示了HBase的组成结构:

    通过上图我们可以得出Hbase中的每张表都按照一定的范围被分割成多个子表(HRegion),默认一个HRegion超过 256M 就要被分割成两个,由 HRegionServer管理,管理哪些HRegion由HMaster分配。

    现在我们来介绍一下HBase中的一些组成部件以及它们起到的作用:

    Client:包含访问HBase的接口,并维护cache来加快对HBase的访问。

    Zookeeper:HBase依赖Zookeeper,默认情况下HBase管理Zookeeper实例(启动或关闭Zookeeper),Master与RegionServers启动时会向Zookeeper注册。Zookeeper的作用如下:

  • 保证任何时候,集群中只有一个master
  • 存储所有Region的寻址入口
  • 实时监控Region server的上线和下线信息。并实时通知给master
  • 存储HBase的schema和table元数据
  • 问题一:Rowkey是唯一的吗?

    相同的Rowkey在HBase中认为是同一条数据的多个版本,查询时默认返回最新版本的数据,所以通常Rowkey都需要保证唯一,除非用到多版本特性。

    最佳设计示例:Rowkey相当于数据库的主键。Rowkey表示一条记录。Rowkey可以是一个字段也可以是多个字段接起来。Rowkey为[userid]表示每个用户只有一条记录, Rowkey为[userid][orderid]表示每个用户有多条记录。

  • 问题二:满足哪种查询场景?
    Rowkey的设计限制了数据的查询方式,HBase有两种查询方式。
  • 根据完整的Rowkey查询(get方式),例如SELECT * FROM table WHERE Rowkey = ‘abcde’
    说明 get方式需要知道完整的Rowkey,即组成Rowkey所有字段的值都是确定的。
  • 设计md5散列算法:[userId][orderid] => [md5(userid).subStr(0,4)][userId][orderid] 
  • 设计反转:[userId][orderid] => [reverse(userid)][orderid]
  • 设计取模:[timestamp][hostname][log-event] => [bucket][timestamp][hostname][log-event]; long bucket = timestamp % numBuckets
  • 增加随机数:[userId][orderid] => [userId][orderid][random(100)]
  • 问题五:使用scan方式会查询出不需要的数据吗?

    会的。场景举例:table1的Rowkey为column1+ column2+ column3,如果您需要查询column1= host1的所有数据,使用scan 'table1',{startkey=> 'host1',endkey=> 'host2'}语句。如果有一条记录为column1=host12,那么此记录也会查询出来。

    最佳设计示例:
  • 设计字段定长,[column1][column2] => [rpad(column1,'x',20)][column2]
  • 添加分隔符,[column1][column2] => [column1][_][column2]
  • --------------------------------------------------------------------

    9、ClickHouse

    --------------------------------------------------------------------

    10、flink

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    --------------------------------------------------------------------

    大数据培训--大纲

    1volumn容量大

    2variety多样性

    3velocity高速

    4veracity真实

    5valence链接

    6value价值

    二、大数据表现形式

    结构化数据

    半结构化数据

    三、处理方式

    批处理(input processing output)

    流处理(低延迟、高并发、高可用)

    四、分布式

    distributed

    并发行、高容错、横向扩展

    ACID到base(ba基本可用s软状态e最终一致性)cap(一致性、可用性、分区容错性)

    五、数据单位

    b-kb-mb-gb-tb

    pb-eb-zb-yb-bb-nb-db

    六、发展方向

    规模大 多样性 高速性 价值型 

    离线计算 实时计算 机器学习深度学习 批流融合 abc融合

    七、解决存-算

    map-s-sort-=reduce

    数据采集 kafka flume 

    数据存储 hdfs hbase 

    数据计算 strom spark flink

    数据分析 pig hive

    数据应用出口应用

    双十一大屏

    1、爆款商品单开发+数据可视化看板展示

    2、数据仓库定义及演进史

    生产工厂-物流公司-商品仓库-时尚潮流店

    盘库表-聚数据-数仓建模-数据产品

    数据库-ETl-数据仓库(原始表ods+维度建模dwd+汇总数据层dws+应用数据层ads)-可视化看板

    数据分层:操作数据层-明细数据层-汇总数据层-应用数据层。 database到bigdata

    3、数据仓库架构(ipo)

    数据(登陆、点击、操作、交易等等)-数据平台(自动加工+实时数据采集+离线数据采集+hive+hdfs+用户画像)-用户看板

    模型:概念模型(商家+商品+订单)+逻辑模型(字段含义类型)+物理模型(表)clp

    分层:清晰+有序+高效(操作数据层-明细数据层-汇总数据层-应用数据层)

    事实:商品交易(销售量+购买用户+订单交易金额)

    维度:(who+what+where+when)

    4、数据仓库建模(春风到春天+慢就是快)

    第一步:数据调研

    需求调研:排行数据+双十一销售额+财务数据+多少商家+平台的用户量

    业务调研:商家

    数据调研:商家平台+促销活动+广发哦+交易系统+商家购买流程+线上活动+客服售后流程+数据现有表

    第二步:数仓规划

    分析主题+数据分层+数据事实+数据为度

    商品+商家+交易+用户+流量+客服等

    数据分层规划:操作数据层-明细数据层-汇总数据层-应用数据层

    时间+年龄+商家+商品+地域等

    第三步:模型设计

    事实表(数据架构表图:商家表+日期表+用户表+订单表+商品维度表)星型模型

    第四步:模型开发

    真实表构建 (落地各种真实表结构)

    5、大厂案例

    爆款商品分析-双十一看版

    Mc+datawork+quickbi+pai

    6、数据运维+离线数仓+用户画像+实时流式计算+机器学习+数据中台

    实时爆款商品实时销售分析+实时大数据看版

    1、实时计算技术原理知识讲解

    实时广告媒体+实时即未来

    实时计算实现方式:

    微批处理:(水流)水库-取水口-反应堆-过滤-活性炭-清水-配水泵-用户(直饮机)

    流式计算:(车流)定点数车流量(红绿灯)

    数据处理四大概念

    实时计算:快

    流式计算(微批):

    批处理计算:

    离线计算:昨天慢

    核心价值:随着时间的延长数据价值成指数级下降

    场景:实时数仓+无人+实时机器学习

    2、三大实时数据计算框架

    storm+spark+flink

    storm:(流处理)

    实时分析+在线机器学习+持续学习+分布式rpc+etl

    缺陷:吞吐能力不强(TB)+准确性不强

    特点:绝对快

    阿里java重写jstrom

    应用 twitter +微博 吞吐量和准确性不高,但是最快

    业务和技术:技术不能限制业务,业务倒逼技术前进。

    spark:(微批处理-慢)

    吞吐能力+准确

    慢一点,但吞吐能力+准确性提升

    scala语言

    kafka+flume+hdfs+kinesis+twitter到hdfs+database

    flink:(流处理)-最强

    吞吐能力+准确+低延迟+有状态计算+支持状态管理+支持时间乱序

    快速+灵动+支持延迟数据

    logs+iot+clicks

    性能:低延迟(strom)+高吞吐+准确性+操作简单 ----flink(all in)

    3、flink技术原理及特性讲解

    四大根技术

    flinksql

    Streaming

    ML(机器学习)

    Gelly(图计算)

    技术栈:local+cluster+cloud

    sql-table-dataStream-StreamProcessing

    1、容错机制:错误不用重新计算

    2、状态管理:传数据带状态故障可排查(原生状态+托管状态)

    3、时间窗口:每隔多久或数量间隔处理

    4、时间语义:水印标签,解决乱序到达(事件时间+摄入时间+处理时间)

    无界数据流中的有界数据集

    1、数据仓库设计方案

    2、hive理论知识

    3、hivesql学习

    4、数据治理,数据质量讲解

    5、DWD层物理模型开发

    6、dws层物理模型开发

    7、dim层维度表开发

    8、ads应用层指标报表开发

    9、hive-udf讲解

    10、用户画像学习

    11、spark分布式计算框架

    12、clickhouse理论知识

    13、sparkrdd编程

    14、kafka理论知识讲解

    15、flink理论知识

    16、ELK理论知识讲解

    17、python机器学习

    18、numpy学习

    19、pandas使用

    20、sklearn学习

    21、算法模型训练

    22、阿里云数据中台maxcompute

    23、dataworks讲解

    24、可视化quickbi

    25、pai学习

    26、hadoop详解

    27、sqoop数据迁移工具

    28、flume使用

    29、strom使用