企业发展到一定规模都会搭建单独的BI平台来做数据分析,即OLAP(联机分析处理),一般都是基于数据库技术来构建,基本都是单机产品。除了业务数据的相关分析外,互联网企业还会对用户行为进行分析,进一步挖掘潜在价值,这时数据就会膨胀得很厉害,一天的数据量可能会成千万或上亿,对基于数据库的传统数据分析平台的数据存储和分析计算带来了很大挑战。

为了应对随着数据量的增长、数据处理性能的可扩展性,许多企业纷纷转向Hadoop平台来搭建数据分析平台。Hadoop平台具有分布式存储及并行计算的特性,因此可轻松扩展存储结点和计算结点,解决数据增长带来的性能瓶颈。

随着越来越多的企业开始使用Hadoop平台,也为Hadoop平台引入了许多的技术,如Hive、Spark SQL、Kafka等,丰富的组件使得用Hadoop构建数据分析平台代替传统数据分析平台成为可能。

数据分析平台架构原理


从概念上讲,我们可以把数据分析平台分为接入层(Landing)、整合层(Integration)、表现层(Persentation)、语义层(Semantic)、终端用户应用(End-user applications)、元数据(Metadata)。基于Hadoop和数据库的分析平台基本概念和逻辑架构是通用的,只是技术选型的不同:

接入层(Landing):以和源系统相同的结构暂存原始数据,有时被称为“贴源层”或ODS;
整合层(Integration):持久存储整合后的企业数据,针对企业信息实体和业务事件建模,代表组织的“唯一真相来源”,有时被称为“数据仓库”;
表现层(Presentation):为满足最终用户的需求提供可消费的数据,针对商业智能和查询性能建模,有时被称为“数据集市”;
语义层(Semantic):提供数据的呈现形式和访问控制,例如某种报表工具;
终端用户应用(End-user applications):使用语义层的工具,将表现层数据最终呈现给用户,包括仪表板、报表、图表等多种形式;
元数据(Metadata):记录各层数据项的定义(Definitions)、血缘(Genealogy)、处理过程(Processing)。

来自不同数据源的“生”数据(接入层),和经过中间处理之后得到的整合层、表现层的数据模型,都会存储在数据湖里备用。

数据湖的实现通常建立在Hadoop生态上,可能直接存储在HDFS上,也可能存储在HBase或Hive上,也有用关系型数据库作为数据湖存储的可能性存在。

下图说明了数据分析平台的数据处理流程:

数据分析基本都是单独的系统,会将其他数据源的数据(即外部数据)同步到数据平台的存储体系来(即数据湖),一般数据先进入到接入层,这一层只简单的将外部数据同步到数据分析平台,没有做其他处理,这样同步出错后重试即可,有定时同步和流式同步两种:

定时同步即我们设定在指定时间触发同步动作;
流式同步即外部数据通过Kafka或MQ发送数据修改通知及内容。

数据分析平台执行对应操作修改数据。

接入层数据需要经过ETL处理步骤才会进入数据仓库,数据分析人员都是基于数据仓库的数据来做分析计算,数据仓库可以看作数据分析的唯一来源,ETL会将接入层的数据做数据清洗、转换,再加载到数据仓库,过滤或处理不合法、不完整的数据,并使用统一的维度来表示数据状态。有的系统会在这一层就将数据仓库构建成数据立方体、将维度信息构建成雪花或星型模式;也有的系统这一层只是统一了所有数据信息,没有做数据立方体,留在数据集市做。

数据集市是基于数据仓库数据对业务关心的信息做计算提取后得到的进一步信息,是业务人员直接面对的信息,是数据仓库的进一步计算和深入分析的结果,一般都会构建数据立方体。系统开发人员一般会开发页面来向用户展示数据集市的数据。

基于Hadoop构建数据分析平台

基于Hadoop构建的数据分析平台建构理论与数据处理流程与前面讲的相同。传统分析平台使用数据库套件构建,这里我们使用Hadoop平台的组件。

上面这张图是我们使用到的Hadoop平台的组件,数据从下到上流动,数据处理流程和上面说的一致。

任务调度负责将数据处理的流程串联起来,这里我选择使用的是Oozie,也有很多其它选择。

1、数据存储

基于Hadoop的数据湖主要用到了HDFS、Hive和HBase,HDFS是Hadoop平台的文件存储系统,我们直接操纵文件是比较复杂的,所以可以使用分布式数据库Hive或HBase用来做数据湖,存储接入层、数据仓库、数据集市的数据。

Hive和HBase各有优势:HBase是一个NoSQL数据库,随机查询性能和可扩展性都比较好;而Hive是一个基于HDFS的数据库,数据文件都以HDFS文件(夹)形式存放,存储了表的存储位置(即在HDFS中的位置)、存储格式等元数据,Hive支持SQL查询,可将查询解析成Map/Reduce执行,这对传统的数据分析平台开发人员更友好。

Hive数据格式可选择文本格式或二进制格式,文本格式有csv、json或自定义分隔,二进制格式有orc或parquet,他们都基于行列式存储,在查询时性能更好。同时可选择分区(partition),这样在查询时可通过条件过滤进一步减少数据量。接入层一般选择csv或json等文本格式,也不做分区,以尽量简化数据同步。数据仓库则选择orc或parquet,以提升数据离线计算性能。

数据集市这块可以选择将数据灌回传统数据库(RDBMS),也可以停留在数据分析平台,使用NoSQL提供数据查询或用Apache Kylin来构建数据立方体,提供SQL查询接口。

2、数据同步

我们通过数据同步功能使得数据到达接入层,使用到了Sqoop和Kafka。数据同步可以分为全量同步和增量同步,对于小表可以采用全量同步,对于大表全量同步是比较耗时的,一般都采用增量同步,将变动同步到数据平台执行,以达到两边数据一致的目的。

全量同步使用Sqoop来完成,增量同步如果考虑定时执行,也可以用Sqoop来完成。或者,也可以通过Kafka等MQ流式同步数据,前提是外部数据源会将变动发送到MQ。

3、ETL及离线计算

我们使用Yarn来统一管理和调度计算资源。相较Map/Reduce,Spark SQL及Spark RDD对开发人员更友好,基于内存计算效率也更高,所以我们使用Spark on Yarn作为分析平台的计算选型。

ETL可以通过Spark SQL或Hive SQL来完成,Hive在2.0以后支持存储过程,使用起来更方便。当然,出于性能考虑Saprk SQL还是不错的选择。

原文发布时间为:2018-06-19

本文作者:郑治明

本文来自云栖社区合作伙伴“中生代技术”,了解相关信息可以关注“中生代技术”。

基于Hadoop的数据分析平台搭建相关推荐

  1. 大数据开发:基于Hadoop的数据分析平台

    互联网的发展,带来了各种数据的爆发式增长,所以接入互联网的相关操作行为,都化为虚拟的数据被记录了下来.大数据时代的带来,一个明显的变化就是全样本数据分析,面对TB/PB级及以上的数据规模,Hadoop ...

  2. 大数据基础——Hadoop大数据平台搭建

    文章目录 前言 Hadoop大数据平台搭建 一.Hadoop原理和功能介绍 二.Hadoop安装部署 三.Hadoop常用操作 总结 前言 分布式机器学习为什么需求大数据呢?随着海量用户数据的积累,单 ...

  3. Superset 数据分析平台搭建及使用 1

    Superset 数据分析平台搭建 一.实验介绍 1.1 实验内容 Superset 是 Airbnb 开源的数据分析与可视化平台,同时也是由 Python 语言构建的轻量级 BI 系统.Supers ...

  4. 基于认证的代理平台搭建配置squid-20130730

    基于认证的代理平台搭建配置squid-20130730 功能:通过squid代理实现 (1)基于用户名密码认证的出口ip路由选择 (2)基于client源ip的出口ip路由选择 (3)基于连接本机ip ...

  5. 大数据分析平台搭建方式有哪些

    随着大数据时代的到来,数据价值的概念逐渐深入人心,许多企业开始搭建自己的大数据分析平台,以便在数据洪流中把握行业未来的发展方向.做任何事情之前,首先要设定目标和思路,然后根据确定的目标.思路和实际情况 ...

  6. 基于OpenStack的云计算平台搭建

    文章目录 1.硬件需求(所有节点) 1.1.配置需求 1.2.IP&主机&配置 2.安装基础环境&服务(控制节点) 2.1.安装 NTP 时间同步服务 - - 目录 基于Ope ...

  7. 基于Tempo大数据分析平台的智慧博物馆大数据中心

    一. 项目背景 广义上来说,博物馆包括博物馆.文化馆.图书馆.美术馆.科技馆等各种公共服务场馆.随着"文化自信""文化强国"的国策,公共文化服务成为一个城市的综 ...

  8. Re.从零开始--基于UbuntuServer 20.04-OpenStack平台搭建_

    基于UbuntuServer 20.04-OpenStack平台搭建_ 前言: 本文档基于ubuntu-server20.04版本和OpenStack Victoria搭建openstack环境 部署 ...

  9. 基于hisilicon的arm平台搭建gdb+gdbserver调试环境

    这段时间搭建了一个基于hisilicon的arm平台搭建gdb+gdbserver调试环境,网上对hisilicon平台的搭建资料不多,基本上是arm-linux-gdb的,而没有arm-uclibc ...

最新文章

  1. 黄聪:BackGroundWorker解决“线程间操作无效: 从不是创建控件的线程访问它” (C# VS2008)...
  2. 最短路径问题经典题目汇总
  3. python 写入excel_实用小工具python数组快速写入excel表格
  4. gtest 测试java_LangTest
  5. C++:二维数组和二维向量的长度
  6. [Re] ABC: Always Be Coding
  7. 个图标当十个用—多功能系统级图标制作攻略
  8. Atitit  补充说明 sql知识图谱与线路图attilax总结补充说明
  9. 【快学springboot】使用springboot发送邮件
  10. 《自己动手写操作系统》 第一章总结
  11. 网页上的即时聊天--nodejs学习笔记
  12. visual studio 提高速度的选项
  13. Eureka No active profile set, falling back to default profiles: default
  14. 利用XML文件以及集合方法设计简单超市管理系统的Java程序
  15. openstack 单元测试助手tox
  16. 京东JDK在大数据平台的探索与研究
  17. Occupancy Grid Map(OGM:占用栅格地图)
  18. 视频相关十大开源项目
  19. 三星 S6 屏幕快照
  20. IDEA集成Docker插件实现项目打包镜像一键部署与Docker CA加密认证

热门文章

  1. c#图片base64去转义字符_C# 将图片转成Base64字符串,再将字符串转成图片,然后将图片存储到服务器文件夹中,求代码。感激不尽...
  2. 整型和浮点型的区别_C的基础内容:常量之数值型常量,适合新手的学习
  3. 计算机知识浩瀚,计算机视觉基础
  4. vba调用计算机,如何实现跨工作表自动引用数据? 求:EXCEL公式(函数)或VBA宏程序...
  5. java哈希map 删除_HashMap1.8之节点删除分析
  6. linux网络批量安装上限,linux基于网络的批量安装
  7. java swing 页面布局方式_javaswing酷炫界面
  8. 步进电机红外遥控C语言程序,单片机红外遥控+步进电机+1602液晶显示c语言源程序...
  9. 使用ansible来调度cron作业
  10. RDMA技术详解(三):理解RDMA Scatter Gather List