微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

大数据应用开发

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提供的内置函数无法满足业务处理需要时,此时就可以考虑使用用户自定义函数,编写处理代码并在查询中使用。

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层:为各种统计报表提供数据。

分层的优点:

  • 复杂问题简单化,将任务分解成多个步骤完成,每一层只处理单一的步骤,比较简单,并且方便定位问题。
  • 减少重复开发,规范数据分层,通过中间层数据,减少最大的重复计算,增加一次计算结果的复用性。
  • 隔离原始数据,避免数据异常或者数据敏感,使真实数据与统计数据解耦。

Spark简介

    Spark是基于内存的分布式批处理系统,它把任务拆分,然后分配到多个的cpu上进行处理,处理数据时产生的中间产物(计算结果)存放在内存中,减少了对磁盘的I/O操作,大大的提升了数据的处理速度,在数据处理和数据挖掘方面比较占优势。

Spark应用场景

  • 数据处理(Data Processing):可以用来快速处理数据,兼具容错性和可扩展性。
  • 迭代计算(Iterative computation):支持迭代计算,有效应对复杂的数据处理逻辑。
  • 数据挖掘(Data Mining):在海量数据基础上进行复杂的挖掘分析,可支持多种数据挖掘和机器学习算法。
  • 流式处理(Streaming Processing):支持秒级延迟的流处理,可支持多种外部数据源。
  • 查询分析(Query Analysis):支持sql查询分析,同时提供领域特定语言(DSL)以方便操作结构化数据,并支持多种外部数据源。

Spark对比MapReduce

  • 性能上提升了100倍。
  • Spark的中间数据放在内存中,对于迭代运算的效率更高;进行批处理时更高效,同时有着更低的延迟。
  • Spark提供更多的数据集操作类型,编程模型比MapReduce更灵活,开发效率更高。
  • 更高的容错能力(血统机制)。

RDD

RDD是分布式弹性数据集,可以理解一个存储数据的数据结构。Spark会把所要操作的数据,加载到RDD上,即RDD所有操作都是基于RDD来进行的。RDD是只读和可分区。要想对RDD进行操作,只能重新生成一个新的RDD。

  • 从HDFS输入创建,或从与Hadoop兼容的其他存储系统中输入创建。
  • 从父的RDD转换的到新的RDD。
  • 从数据集合转换而来,通过编码实现。

RDD的存储:

  • 用户可以选择不同的存储级别缓存RDD以便重用。
  • 当前RDD认是存储于内存,但当内存不足时,RDD会溢出到磁盘中。

Shuffle

Shuffle 是划分 DAG 中 stage 的标识,同时影响 Spark 执行速度的关键步骤

  • RDD 的 Transformation 函数中,分为窄依赖(narrow dependency)和宽依赖(wide dependency)的操作.
  • 窄依赖跟宽依赖的区别是是否发生Shuffle(洗牌) 操作。

窄依赖

窄依赖是指父RDD的每个分区只被子RDD的一个分区所使用。 表现为: 一个父RDD的每一个分区对应于一个子RDD分区。

宽依赖

宽依赖是指父RDD的每个分区都可能被多个子RDD分区所使用。 表现为: 父RDD的每个分区都被多个子RDD分区使用

Transformation

Transformation是RDD的算子类型,它的返回值还是一个RDD。

Transformation操作属于懒操作(算子),不会真正触发RDD的处理计算。

变换方法的共同点:

  • 不会马上触发计算。
  • 每当调用一次变换方法,都会产生一个新的RDD。

例如:map(func),flatMap(func)

Action

Action是RDD的算子,它的返回值不是一个RDD。Action操作是返回结果或者将结果写入存储的操作。Action是Spark应用启动执行的触发动作,得到RDD的相关计算结果或将RDD保存到文件系统中。

SparkConf

SparkConf是用来对Spark进行任务参数配置的对象。 是通过键值对的形式,设置Spark任务执行时所需要的参数。 Spark读取任务参数的优先级是: 代码配置>动态参数>配置文件

SparkContext

SparkContext是Spark的入口,相当于应用程序的main函数

SparkContext表示与Spark集群的连接,可用于在该集群上创建RDD,记录计算结果和环境配置等信息。

SparkSession

Spark2.0中引入了SparkSession的概念,为用户提供了一个统一的切入点来使用Spark的各项功能

封装了SparkConf和SparkContext对象,方便用户使用Spark的各种API。

Sparksql简介

Sparksql是Spark用来处理结构化数据的一个模块,可以在Spark应用中直接使用sql语句对数据进行操作。

sql语句通过Sparksql模块解析为RDD执行计划,交给SparkCore执行。

通过SparkSession提交sql语句。任务像普通Spark应用一样,提交到集群中分布式运行。

JDBC:

  • 应用加载JDBC驱动,然后统一提交到集群的JDBCServer执行。
  • JDBCServer是单点服务,会成为任务执行的瓶颈,不能处理海量数据和高并发任务。

DataSet:

  • DataSet是一个由特定域的对象组成的强类型集合,可通过功能或关系操作并行转换其中的对象
  • DataSet以Catalyst逻辑执行计划表示,并且数据以编码的二进制形式存储,不需要反序列化就可以执行sort、filter、shuffle等操作。
  • Dataset是“懒惰”的,只在执行action操作时触发计算。当执行action操作时,Spark用查询优化程序来优化逻辑计划,并生成一个高效的并行分布式的物理计

Sparksql使用场景

适合: 结构化数据处理。 对数据处理的实时性要求不高的场景 需要处理PB级的大容量数据。

不适合: 实时数据查询

 

3.2 实时检索

      实时检索简而言之就是对系统内的一些信息根据关键词进行即时、快速搜索,实现即搜即得的效果。强调的是实时低延迟。

实时检索的特点:

  • 检索性能要求高,基于主键的检索需要在1秒内响应,基于非主键的检索需要在3秒内响应,不承担复杂查询统计查询
  • 高并发查询,通常有大于100的并发查询
  • 数据量大,PB级数据量,集群规模在1000节点以上。对图数据库的场景,点个数在10亿以上,边个数在100亿以上
  • 支持结构化和非结构化,需要同时保存结构化数据和非结构化数据,经常用来对图片等小文件进行检索
  • 高效的数据加载,数据加载要求高,每小时可以加载TB级数据
  • 支持图检索,支持检索图数据,支持图标准查询接口

 

 3.3 实时流处理

      实时流处理,通常是指对实时数据源进行快速分析,迅速触发下一步动作的场景。实时数据对分析处理速度要求极高,数据处理规模巨大,对cpu和内存要求很高,但是通常数据不落地,对存储量要求不高。实时处理,通常通过Structured Streaming或者Flink任务实现。

实时流处理的特点:

  • 处理速度快:端到端处理需要达到秒级,流处理平台负责的数据采集和数据处理要在1秒内完成。如风控项目要求单条数据处理时间达到秒级,单节点TPS大于2000。
  • 吞吐量高:需在短时内接收并处理大量数据记录,吞吐量需要达到数十兆/秒/节点。
  • 抗震性强:为应对数据源端业务数据产生速度会突然出现峰值的情形,需提供数据缓存机制。
  • 可靠性高:网络、软件等故障发生时,需保证每条数据不丢失,数据处理不遗漏、不重复。
  • 水平扩展:当系统处理能力出现瓶颈后,可通过节点的水平扩展提升处理性能
  • 多数据源支持支持网络流、文件数据库表、IOT等格式的数据源。对于文件数据源,可以处理增量数据的加载。
  • 数据权限和资源隔离:消息处理、流处理需要有数据权限控制,不同的作业、用户可以访问、处理不同的消息和数据。多种流处理应用之间要进行资源控制和隔离,防止发生资源争抢。
  • 第三方工具对接:支持与第三方规则引擎、决策系统、实时推荐系统等对接。

 

 3.4 融合数仓

 

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。

相关推荐