大数据场景化解决方案

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 融合数仓

 

posted @ 2021-01-08 22:55  夏日的向日葵  阅读(1459)  评论(0编辑  收藏  举报