大数据场景化解决方案
1.大数据的概念
维基百科的定义: 大数据是指利用常用软件工具捕获、管理和处理数据所耗时间超过可容忍时间的数据集。
2.大数据主流技术
数据采集:
- 使用Flume,可进行流式日志数据的收集。
- 使用Sqoop可以交互关系型数据库,进行导入导出数据。
- 使用爬虫技术,可在网上爬取海量网页数据。
数据存储与管理:
大数据利用分布式文件系统HDFS、HBase、Hive,实现对结构化、半结构化和非结构化数据的存储和管理。
数据处理与分析:
利用分布式并行编程模型和计算框架,结合机器学习和数据挖掘算法,实现对海量数据的处理和分析。
3.场景化解决方案
在面对不同的场景时,会使用不同的大数据组件去解决处理,主要有如下大数据场景化解决方案。
- 离线批处理
- 实时检索
- 实时流处理
- 融合数仓
3.1 离线批处理
离线批处理,是指对海量历史数据进处理和分析,生成结果数据,供下一步数据应用使用的过程。离线批处理对数据处理的时延要求不高,但是处理的数据量较大,占用的计算存储资源较多,通常通过MR作业、Spark作业或者HQL作业实现。
离线批处理的特点:
- 处理时间要求不高
- 处理数据量巨大
- 处理数据格式多样
- 占用计算存储资源多
离线处理常用的组件:
- HDFS:分布式文件系统,为各种批处理引擎提供数据存储,可以存储各种文件格式数据。
- YARN:资源调度引擎,为各种批处理引擎提供资源调度能力。
- MapReduce:大数据批处理引擎,用于处理海量数据,但是处理速度较慢。
- Hive:大数据SQL批处理引擎,用于处理SQL类批处理作业,但是处理速度较慢。
- Spark:基于内存的数据处理引擎,适合海量数据,处理速度高效。
- Spark SQL:Spark处理结构化数据的一个模块。
HDFS介绍
HDFS(Hadoop Distributed File System)基于Google发布的GFS论文设计开发。 其除具备其它分布式文件系统相同特性外,HDFS还有自己特有的特性:
- 高容错性:认为硬件总是不可靠的。
- 高吞吐量:为大量数据访问的应用提供高吞吐量支持。
- 大文件存储:支持存储TB-PB级别的数据。
HDFS适合:大文件存储与访问 流式数据访问
HDFS不适合:大量小文件存储 随机写入 低延迟读取
HDFS回收站机制:
- 在HDFS里,删除文件时,不会真正的删除,其实是放入回收站,回收站里的文件可以用来快速恢复误删文件。
- 可以设置一个时间阀值(单位:分钟),当回收站里文件的存放时间超过这个阀值或是回收站被清空时,文件才会被彻底删除,并且释放占用的数据块。
- Hadoop回收站trash,默认是关闭的,若开启需要修改配置文件core-site.xml。
Hive概述
Hive是基于Hadoop的数据仓库软件,可以查询和管理PB级别的分布式数据。
Hive特性:
- 灵活方便的ETL (Extract/Transform/Load)。
- 支持MapReduce、Tez、Spark多种计算引擎。
- 可直接访问HDFS文件以及HBase。
- 易用易编程。
Hive函数:
查看系统函数的用法:show functions;
显示函数的用法:desc function upper;
详细显示函数的用法:desc function extended upper;
当Hive提供的内置函数无法满足业务处理需要时,此时就可以考虑使用用户自定义函数,编写处理代码并在查询中使用。
- UDF(User-Defined-Function) 用于接收单个数据行,并产生一个数据行作为输出。
- UDAF(User-Defined Aggregation Function) 用于接收多个数据行,并产生一个数据行作为输出。
- UDTF(User-Defined Table-Generating Functions) 用于接收单个数据行,并产生多个数据行作为输出。
Hive调优
数据倾斜
数据倾斜指计算数据的时候,数据的分散度不够,导致大量的数据集中到了一台或者几台机器上计算,这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢。
日常使用过程中,容易造成数据倾斜的原因可以归纳为如下几点:
- group by
- distinct count(distinct xx)
- join
调优参数:
在map中会做部分聚集操作,效率更高但需要更多的内存。
set hive.map.aggr=true;
此时生成的查询计划会有两个MRJob,可实现数据倾斜时负载均衡。
set hive.groupby.skewindata=true;
当连接一个较小和较大表的时候,把较小的表直接放到内存中去,然后再对较大的表进行map操作。
set hive.auto.convert.join=true;
每个查询会被Hive转化为多个阶段,当有些阶段关联性不大时,可以并行化执行,减少整个任务的执行时间。
开启任务并行执行:
set hive.exec.parallel=true;
设置同一个sql允许并行任务的最大线程数(例如设置为8个):
set hive.exec.parallel.thread.number=8;
数据集市和数据仓库的区别:
数据集市
数据集市(Data Mart) ,也叫数据市场,数据集市就是满足特定的部门或者用户的需求,按照多维的方式进行存储,包括定义维度、需要计算的指标、维度的层次等,生成面向决策分析需求的数据立方体。
数据仓库
为满足各类零散分析的需求,通过数据分层和数据模型的方式,并以基于业务和应用的角度将数据进行模块化的存储。
数据仓库分层:
- ODS层:原始数据层。
- DWD层:结构和粒度与原始表保持一致,简单清洗。
- DWS层:以DWD为基础,进行轻度汇总。
- ADS层:为各种统计报表提供数据。
分层的优点:
- 复杂问题简单化,将任务分解成多个步骤完成,每一层只处理单一的步骤,比较简单,并且方便定位问题。
- 减少重复开发,规范数据分层,通过中间层数据,减少最大的重复计算,增加一次计算结果的复用性。
- 隔离原始数据,避免数据异常或者数据敏感,使真实数据与统计数据解耦。
3.2 实时检索
实时检索简而言之就是对系统内的一些信息根据关键词进行即时、快速搜索,实现即搜即得的效果。强调的是实时低延迟。
实时检索的特点:
- 检索性能要求高,基于主键的检索需要在1秒内响应,基于非主键的检索需要在3秒内响应,不承担复杂查询和统计类查询
- 高并发查询,通常有大于100的并发查询
- 数据量大,PB级数据量,集群规模在1000节点以上。对图数据库的场景,点个数在10亿以上,边个数在100亿以上
- 支持结构化和非结构化,需要同时保存结构化数据和非结构化数据,经常用来对图片等小文件进行检索
- 高效的数据加载,数据加载要求高,每小时可以加载TB级数据
- 支持图检索,支持检索图数据,支持图标准查询接口
3.3 实时流处理
实时流处理,通常是指对实时数据源进行快速分析,迅速触发下一步动作的场景。实时数据对分析处理速度要求极高,数据处理规模巨大,对CPU和内存要求很高,但是通常数据不落地,对存储量要求不高。实时处理,通常通过Structured Streaming或者Flink任务实现。
实时流处理的特点:
- 处理速度快:端到端处理需要达到秒级,流处理平台负责的数据采集和数据处理要在1秒内完成。如风控项目要求单条数据处理时间达到秒级,单节点TPS大于2000。
- 吞吐量高:需在短时内接收并处理大量数据记录,吞吐量需要达到数十兆/秒/节点。
- 抗震性强:为应对数据源端业务数据产生速度会突然出现峰值的情形,需提供数据缓存机制。
- 可靠性高:网络、软件等故障发生时,需保证每条数据不丢失,数据处理不遗漏、不重复。
- 水平扩展:当系统处理能力出现瓶颈后,可通过节点的水平扩展提升处理性能。
- 多数据源支持:支持网络流、文件、数据库表、IOT等格式的数据源。对于文件数据源,可以处理增量数据的加载。
- 数据权限和资源隔离:消息处理、流处理需要有数据权限控制,不同的作业、用户可以访问、处理不同的消息和数据。多种流处理应用之间要进行资源控制和隔离,防止发生资源争抢。
- 第三方工具对接:支持与第三方规则引擎、决策系统、实时推荐系统等对接。
3.4 融合数仓