`
scholers
  • 浏览: 614836 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

一种HADOOP上的通用数据服务开发框架和机制

 
阅读更多
前言
如何快速的将hadoop上海量的数据快速的以可视化的方式展示给用户,很多传统的数据仓库或者OLAP在处理这种场景也是各种方式。我们这里数据平台采用了一种特殊的方式,
大大简化了数据产出的难度,提高了数据开发的成本。

核心模块
下图是常见的离线计算的数据流向图:



这种大数据处理的框架的好处是隔离性好,数据存储在应用的关系型数据库之后,查询性能较好,在关系型数据库上建立索引,就能够很容易满足大部分查询情况。
我们团队在开发数据分析平台的时候,利用MYSQL采用了一种创新型的数据存储方式,并在此基础上形成了一套完整的数据交换,数据存储,以及数据服务。
其整体架构图如下:



其包含三个部分的处理模块:
数据产出单元
这部分是数据ETL的开发,也就是产出数据的脚本,大部分是HIVE SQL,当然也有Map/reduce程序(以JAR包的方式),部署在HADOOP平台上,然后通过任务调度,循环执行产出数据。
这块的功能主要是在hadoop上,这里不详细描述了。

数据交换单元
当用户在HADOOP上产出一份二维表的数据的时候(上面所讲的模块),常见的处理方式如下(左边的表示HADOOP表,右边表示关系型数据库表)




在数据分析平台里面采用的方式是这样的,原始方式表和表的数据对拷,我们的方案变化为:所有的数据变成单表的一个字段




在这里CONTENT字段是利用了MySql的mediumtext字段,最大长度支持16777215个字符,换算出来大概是32M的容量。也就是说如果这个HADOOP上的按照日期的单表总数据容量不超过32M,那么就可以存成一个一个字符串。
其表结构的设计如下:



考虑到通用性以及存储成本,在TXT,XML,JSON三种格式中选择了JSON,这样又可以节省不少存储空间,占用的网络带宽也小。
于是这样一种低成本的数据同步方案就达成了,其好处有:
1. 不需要单独在应用(数据分析平台) 新建任何数据表,只需要按照存储格式进行转换之后存如MYSQL(或者其他关系型数据库)的单表中;
2. 节省开发时间,可以快速建立数据同步和回流;
3. 数据解析的成本较小,采用通用性的JSON格式,可以直接输出成用户想要的格式;

不过这样的缺点也很明显:容易产生OOM;
当需要将数据还原的时候,需要花费大量的计算在解析JSON数据上;
所以我们统一做了一个解析JSON格式的小引擎来完成JSON数据还原为二维表的工作。原先采用JSONLIB格式解析JSON数据,发现性能有问题:当同时有多个用户在浏览大数据时,经常导致OOM。
当多个字符串JSON文本拼凑成一个完成的数据串时,会占用大量的内存,一下子就会撑满内存。典型的场景就是用户在导出/查询超过100W条记录的数据时,内存中都是非格式化的数据;以线上数据库4G内存为例,最多也就能容纳125条记录,也就100W条的数据(以每万条记录最多保存32M为例,实际情况可能根据每个hadoop表字段长短和字段值大小有关系)。

数据解析单元
当数据存储在MYSQL单表数据库中,作为一个大文本字段之后,这些数据需要解析出来变成JAVA对象提供服务。所以需要设计一个解析引擎。



就是将上图3的数据流向变成反向:
  从KV结构转变成标准的二维表结构

遇到的问题
1. 数据量大,解析查询耗时耗力;在采用分布式缓存之后,仍然会存在少量的OOM;
类似全网流量试图数据,每天有800W以上,一次查询仍然会导致OOM;
有张表每天800W的数据,大致会导致数据库每天增加20G左右的容量,导致磁盘空间写满;
下图是线上实际遇到的一个问题,海量的数据将磁盘写满:


2. 不能利用数据库中的索引以及SQL的各种功能,完全依靠查询时解析文本并拼凑数据,故目前只适合后台系统;
存储改进方案
将MYSQL的innodb引擎变成开源的infobright数据仓库引擎,非常方便的将数据LOAD到数据库里面
优点:
  查询性能高:百万、千万、亿级记录数条件下,同等的SELECT查询语句,速度比MyISAM、InnoDB等普通的MySQL存储引擎快5~60倍
  存储数据量大:TB级数据大小,几十亿条记录
  高压缩比:在项目中可以达到10:1到40:1,极大地节省了数据存储空间
  基于列存储:无需建索引,无需分区
  适合复杂的分析性SQL查询:SUM, COUNT, AVG, GROUP BY

InfoBright的字段格式压缩:



  限制:
  不支持数据更新:社区版Infobright只能使用“LOAD DATA INFILE”的方式导入数据,不支持INSERT、UPDATE、DELETE
  不支持高并发:只能支持10多个并发查询;
非常适合这种海量数据的大容量存储与查询。
  • 大小: 34.2 KB
  • 大小: 57 KB
  • 大小: 46.4 KB
  • 大小: 131.5 KB
  • 大小: 16 KB
  • 大小: 30 KB
  • 大小: 25.3 KB
  • 大小: 20.8 KB
分享到:
评论
2 楼 di1984HIT 2014-06-13  
学习了,写的不错啊。
1 楼 dacoolbaby 2013-04-27  
我看到DATAX,楼主肯定是阿里系的人~~

这个方案是用来解决使用Hive对大数据进行AD-HOC的吧?

相关推荐

    新版Hadoop视频教程 段海涛老师Hadoop八天完全攻克Hadoop视频教程 Hadoop开发

    第一天 hadoop的基本概念 伪分布式hadoop集群安装 hdfs mapreduce 演示 01-hadoop职位需求状况.avi 02-hadoop课程安排.avi 03-hadoop应用场景.avi 04-hadoop对海量数据处理的解决思路.avi 05-hadoop版本选择和...

    Uber开源Marmaray:基于Hadoop的通用数据摄取和分散框架

    Marmaray由我们的Hadoop平台团队设计和开发,是一个建立在Hadoop生态系统之上的基于插件的框架。用户可以新增插件以便从任何来源摄取数据,并利用Apache Spark将数据分散到接收器上。Marmaray这个名

    hadoop段海涛老师八天实战视频

    第一天 hadoop的基本概念 伪分布式hadoop集群安装 hdfs mapreduce 演示 01-hadoop职位需求状况.avi 02-hadoop课程安排.avi 03-hadoop应用场景.avi 04-hadoop对海量数据处理的解决思路.avi 05-hadoop版本选择和...

    Spark大型集群上的快速和通用数据处理架构

    Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询...

    Apache Hadoop---Spark.docx

    Spark是一种与Hadoop相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使Spark在某些工作负载方面表现得更加优越,换句话说,Spark启用了内存分布数据集,除了能够提供交互式查询外,它...

    一种大数据智能分析平台的数据分析方法及实现技术.doc

    一种大数据智能分析平台的数据分析方法及实现技术 作者:蓝科 李婧 来源:《数字技术与应用》2017年第03期 摘要:文章介绍了一种用于大数据智能分析平台的数据分析方法及实现技术, 介绍了这种方法的需求和意义;和...

    spark-3.5.1-bin-hadoop3.tgz

    Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询...

    spark-3.4.3-bin-hadoop3.tgz

    Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询...

    Learn-Hadoop-and-Spark:该存储库着重于收集和制作精选列表资源以免费学习Hadoop。

    Hadoop分布式文件系统(HDFS:trade_mark:):一种分布式文件系统,可提供对应用程序数据的高吞吐量访问。 Hadoop YARN:用于作业调度和群集资源管理的框架。 Hadoop MapReduce:基于YARN的系统,

    06hadoop基础架构——好程序

    hadoop是什么 apache hadoop是apache旗下的一套开源的软件平台。 hadoop是一套高可靠的、可扩展的、分布式的计算开源软件。hadoop软件库是一个框架,使用简单的...mapreduce:一种用于并行处理大型数据集的基于YARN的计

    Spark大数据处理:技术、应用与性能优化

    Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询...

    第七章-《大数据导论》大数据处理平台.pdf

    数据复制多份存放不同节点以增加可用性和可靠性 特点:高容错性 + 高扩展性 Apache Hadoop Apache软件基金会下面的一个开源项目 一个分布式系统基础框架 HDFS: Hadoop分布式文件系统,负责数据存储 MapReduce:一种...

    数据统计和分析论文的matlab源代码

    本文介绍了一种由网站运营商自身进行数据统计和分析的解决方案。 由网站运营公司技术部门以网站运营日志为最初数据源,基于公司高层业务需求,将数据经过层层数据清洗、转换和抽取,建立数据仓库,基于数据仓库进行数据...

    spark 2.0 详解

    Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询...

    Spark官方中文文档

    Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询...

    Spark亚太研究院-Spark实战高手之路

    Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询...

    spark Core RDD持久化详解

    Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询...

    1.1.1 Spark基础入门

    Spark 是一种与 Hadoop 相似的开源集群计算环境,但是两者之间还存在一些不同之处,这些有用的不同之处使 Spark 在某些工作负载方面表现得更加优越,换句话说,Spark 启用了内存分布数据集,除了能够提供交互式查询...

    Spark原著中文版

    Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎。Spark是UC Berkeley AMP lab (加州大学伯克利分校的AMP实验室)所开源的类Hadoop MapReduce的通用并行框架,...Spark 是一种与 Hadoop 相似的开源集群计

Global site tag (gtag.js) - Google Analytics