【备赛指南】华为ICT大赛 实践赛 云赛道19

省复赛(大数据)

本人系第九届华为ICT大赛实践赛云赛道选手,曾包揽省赛、中国总决赛及全球总决赛三项一等奖,并持有HCIE-Cloud Service认证。现通过本平台分享备赛经验与参赛心得,供各位同学参考。文中所述内容若有疏漏之处,恳请各位不吝指正,在此先行致谢!(建议首先阅读专栏首篇文章——【备赛指南】华为ICT大赛 实践赛 云赛道01,之后再逐步阅读后续内容)

一、大模型离线处理场景化解决方案

离线处理方案

(1) 离线批处理的概念

离线批处理:对海量历史数据进行处理和分析,生成结果数据,供下一步数据应用使用的过程

离线批处理对数据处理的时延要求不高,但是处理的数据量较大,占用的计算存储资源较多,通过MR作业、Spark作业、HQL作业实现

(2) 离线批处理的流程图

(3) 离线批处理的常用组件

HDFS:分布式文件系统,为各种批处理引提供数据存储,可以存储各种文件格式数据

YARN:资源调度引擎,为各种批处理引擎提供资源调度能力

MapReduce:大数据批处理引擎,用于处理海量数据,但是处理速度较慢

Hive:大数据SQL批处理引擎,用于处理SQL类批处理作业,但是处理速度较慢

Spark:基于内存的数据处理引擎,适合海量数据,处理速度高效

· Spark SQL:Spark处理结构化数据的一个模块

离线处理技术框架介绍

(1) 数据存储HDFS

1. HDFS的概述

①HDFS的特性

(1)高容错性:认为硬件总是不可靠的

(2)高吞吐量:为大量数据访问的应用提供高吞吐量支持

(3)大文件存储:支持存储TB-PB级别的数据

②HDFS适合的应用场景

(1)大文件存储与访问

(2)流式数据访问

③HDFS不适合的应用场景

(1)大量小文件存储

(2)随机写入

(3)低延迟读取

2. HDFS的常用shell命令

hdfs dfs -cat:显示文件内容

hdfs dfs -ls:显示目录列表

hdfs dfs -rm:删除文件

hdfs dfs -put:上传目录/文件到HDFS

hdfs dfs -get:从HDFS下载目录/文件到本地

hdfs dfs -mkdir:创建目录

hdfs dfs -chmod/-chown:改变文件属组

hdfs dfsadmin -safemode:安全模式操作

hdfs dfsadmin -safemode:安全模式操作

hdfs dfsadmin -report:报告服务状态

3. HDFS的回收站机制

在HDFS里,删除文件时不会真正的删除,其实是放入回收站,回收站里的文件可以用来快速恢复误删文件

可以设置一个时间阀值(单位:分钟),当回收站里文件的存放时间超过这个阀值或是回收站被清空时,文件才会被彻底删除,并且释放占用的数据块

Hadoop回收站trash默认是关闭的,若开启需要修改配置文件core-site.xml

(2) 数据仓库Hive

1. Hive的概述

Hive是基于Hadoop的数据仓库软件,可以查询和管理PB级别的分布式数据

Hive的特性:

①灵活方便的ETL(Extract/Transform/Load)

②支持MapReduce、Tez、Spark计算引擎

③可直接访问HDFS文件以及HBase

④易用易编程

2. Hive的内部表和外部表区别

①内部表

(1)CREATE/LOAD:数据移到仓库目录

(2)DROP:元数据和数据会被一起删除

修改外部表tableName为内部表: alter table tableName set tblproperties('EXTERNAL'='FALSE');

②外部表

(1)CREATE/LOAD:数据位置不移动

(2)DROP:只删除元数据

修改内部表tableName为外部表: alter table tableName set tblproperties('EXTERNAL'='TRUE');

③查询表的类型:desc formatted tableName

3. Hive的内置函数

①查看系统函数的用法:hive > show functions;

②显示函数的用法:hive > desc function upper;

③详细显示函数的用法:hive > desc function extended upper;

④常用函数

(1)数学函数,如round()、abs()、rand( )

(2)日期函数,如to_date()、current date()

(3)字符串函数,如trim()、length()、substr()

4. Hive的自定义UDF

当Hive提供的内置函数无法满足业务处理需要时,此时就可以考虑使用用户自定义函数,编写处理代码并在查询中使用

UDF:用于接收单个数据行,并产生一个数据行作为输出

UDAF:用于接收多个数据行,并产生一个数据行作为输出

UDTF:用于接收单个数据行,并产生多个数据行作为输出

UDF开发步骤:

(1)继承"org.apache.hadoop.hive.ql.exec.UDF"

(2)实现一个evaluate()方法,编写要实现的逻辑

(3)打包并上传到HDFS里

(4)Hive创建临时函数

(5)调用该函数

5. Hive的调优

①数据倾斜

数据倾斜:指计算数据的时候,数据的分散度不够,导致大量的数据集中到了一台或者几台机器上计算,这些数据的计算速度远远低于平均计算速度,导致整个计算过程过慢

日常使用过程中,容易造成数据倾斜的原因:

(1)group by

(2)distinct count(distinct xx)

(3)join

②调优参数

set hive.map.aggr=true;:在map中会做部分聚集操作,效率更高但需要更多的内存

set hive.groupby.skewindata=true;:此时生成的查询计划会有两个MRJob,可实现数据倾斜时负载均衡

③map side join

set hive.auto.convert.join=true;:当连接一个较小较大表的时候,把较小的表直接放到内存中去,然后再对较大的表进行map操作

④并行化执行

每个查询会被Hive转化为多个阶段,当有些阶段关联性不大时,可以并行化执行,减少整个任务的执行时间

开启任务并行执行:set hive.exec.parallel=true;

设置同一个sql允许并行任务的最大线程数(例如设置为8个): set hive.exec.parallel.thread.number=8;

6. 数据集市数据仓库的区别

· 数据集市

①数据集市(Data Mart),也叫数据市场,数据集市就是满足特定的部门或者用户的需求按照多维的方式进行存储,包括定义维度、需要计算的指标、维度的层次等,生成面向决策分析需求的数据立方体

· 数据仓库

①为满足各类零散分析的需求,通过数据分层数据模型的方式,并以基于业务和应用的角度将数据进行模块化的存储

②Hive数据仓库

(1)ODS层:原始数据层

(2)DWD层:结构和粒度与原始表保持一致,简单清洗

(3)DWS层:以DWD为基础,进行轻度汇总

(4)ADS层:为各种统计报表提供数据

分层的优点:

· 复杂问题简单化:将任务分解成多个步骤完成,每一层只处理单一的步骤,比较简单,并且方便定位问题

· 减少重复开发:规范数据分层,通过中间层数据,减少最大的重复计算,增加一次计算结果的复用性

· 隔离原始数据:避免数据异常或者数据敏感,使真实数据与统计数据解耦

(3) 离线分析SparkSQL

1. Spark的简介

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

2. Spark的应用场景

数据处理(Data Processing):可以用来快速处理数据,兼具容错性和可扩展性

迭代计算(lterative Computation):支持迭代计算,有效应对复杂的数据处理逻辑

数据挖掘(Data Mining):在海量数据基础上进行复杂的挖掘分析,可支持多种数据挖掘和机器学习算法

流式处理(Streaming Processing):支持秒级延迟的流处理,可支持多种外部数据源

查询分析(Query Analysis):支持SQL的查询分析,同时提供领域特定语言(DSL)以方便操作结构化数据,并支持多种外部数据源

3. Spark与MapReduce的对比

①性能上提升了100倍

②Spark的中间数据放在内存中,对于迭代运算的效率更高;进行批处理时更高效,同时有着更低的延迟

③Spark提供更多的数据集操作类型,编程模型比MapReduce更灵活,开发效率更高

④更高的容错能力(血统机制)

4. Spark的RDD

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

(1)从HDFS输入创建,或从与Hadoop兼容的其他存储系统中输入创建

(2)从父的RDD转换的到新的RDD

(3)从数据集合转换而来,通过编码实现

②RDD的存储

用户可以选择不同的存储级别缓存RDD以便重用

当前RDD默认是存储于内存,但当内存不足时,RDD会溢出到磁盘

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

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

5. Spark的Shuffle

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

· RDD的Transformation函数中,分为窄依赖(narrow dependency)宽依赖(wide dependency)的操作

· 窄依赖宽依赖的区别是是否发生Shuffle(洗牌)

6. Spark的算子

· Transformation

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

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

③变换方法的共同点:

(1)不会马上触发计算

(2)每当调用一次变换方法,都会产生一个新的RDD

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

· Action

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

②Collection -> Transformation -> RDD -> Action -> Result

7. Spark的对象

①SparkConf

(1)SparkConf用来对Spark进行任务参数配置的对象

(2)是通过键值对的形式,设置Spark任务执行时所需要的参数

(3)Spark读取任务参数的优先级是:代码配置>动态参数>配置文件

②SparkContext

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

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

③SparkSession

(1)Spark 2.0中引入了SparkSession的概念,为用户提供一个统一的切入点来使用Spark的各项功能

(2)封装了SparkConfSparkContext对象,方便用户使用Spark的各种API

8. SparkSQL

①SparkSQL的简介

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

SQL语句通过SparkSQL模块解析为RDD执行计划,交给SparkCore执行

②SparkSQL的使用方式

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

JDBC:

应用加载JDBC驱动,然后统一提交到集群的JDBC Server执行

JDBC Server是单点服务,会成为任务执行的瓶颈,不能处理海量数据高并发任务

③SparkSQL的关键概念DataSet

DataSet是一个由特定域的对象组成的强类型集合,可通过功能或关系操作并行转换其中的对象

DataSet以catalyst逻辑执行计划表示,并且数据以编码的二进制形式存储,不需要反序列化就可以执行sort、filter、shuffle等操作

Dataset是“懒惰”的,只在执行action操作时触发计算。当执行action操作时,Spark用查询优化程序来优化逻辑计划,并生成一个高效的并行分布式的物理计

④SparkSQL的使用场景

· 适合场景

(1)结构化数据处理

(2)对数据处理的实时性要求不高的场景

(3)需要处理PB级的大容量数据

· 不适合场景

(1)实时数据查询

⑤SparkSQL的简单查询

(1)查询:df.select("id","name").show()

(2)带条件的查询:df.select($"id",$"name").where($"name" === "bbb").show()

(3)排序查询

· df.select($"id",$"name").orderBy($"name".desc).show

· df.select($"id",$"name").sort($"name".desc).show

(4) 数据采集工具

由于大数据的数据源各种各样,由此对数据采集的挑战变的尤为突出。这里介绍几款常用数据采集工具

1. Sqoop

①Sqoop的简介

Sqoop是开源的工具,主要用于在Hadoop(Hive)传统的数据库(MySQL、PostgreSQL)间进行数据的传递,可以将一个关系型数据库(例如:MySQL,Oracle,PostgreSQL等)中的数据导进到Hadoop的HDFS中,也可以将HDFS的数据导进到关系型数据库中

②Sqoop的应用

③Sqoop的原理

· Sqoop Import原理

(1)Sqoop在import时,需要指定split-by参数。Sqoop根据不同的split-by参数值来进行切分然后将切分出来的区域分配到不同map

(2)每个map中再处理数据库中获取的一行一行的值,写入到HDFS

(3)同时split-by根据不同的参数类型有不同的切分方法,如比较简单的int型,Sqoop会取最大和最小split-by字段值,然后根据传入的num-mappers来确定划分几个区域

· Sqoop export原理

(1)获取导出表的schema、meta信息、和Hadoop中的字段match

(2)并行导入数据:将Hadoop上文件划分成若干个分片,每个分片由一个Map Task进行数据导入

2. Loader

①Loader的简介

Loader是实现 Fusionnsight关系型数据库文件系统之间交换数据和文件的数据加载工具

(1)提供可视化向导式的作业配置管理界面

(2)提供定时调度任务,周期性执行Loader作业

(3)在界面中可指定多种不同的数据源、配置数据的清洗和转换步骤、配置集群存储系统等

②Loader的应用场景

③Loader的特点

(1)图形化:提供图形化配置、管理界面,操作简便

(2)高性能:利用MapReduce并行处理数据

(3)高可靠:Loader Server采用主备双机。作业通过MapReduce执行,支持失败重试。作业失败后,不会残留数据

(4)安全:Kerberos认证作业权限管理。

离线批处理实战

(1) 场景说明

某公司拥有一个购物网站,用户在登录网站、点击商品、收藏商品、购买商品时都会产生行为日志,该公司希望结合业务数据库中的数据和日志数据,进行大数据分析,得到分析结果作为公司决策依据

(2) 客户需求

网站产生的日志包含如下特点:

(1)数据量大

(2)价值密度低

(3)数据的业务种类多

客户希望通过数据分层,让底层数据和指标数据分层,最终得到相关业务指标的数据

(3) 数据源

数据来自于网站,网站通过在网页内代码埋点,用户每一次操作,都会将相关信息传到日志服务器,日志采集工具采集日志服务器上的数据,然后会对数据进行简单的处理过滤,最后将数据按照日期存到HDFS

(4) 设计分析

数据源:网站产生的日志

存储数据:HDFS上的不同目录下的数据

构建数据仓库:根据业务数据分层

分析数据:相关指标,GMV,活跃度等

结果的展示:网页版报表显示

(5) 方案架构-组件选取

数据导入导出:Loader

数据存储:HDFS、MySQL

数据计算:Hive

(6) 方案架构-方案流程

华为ICT实践赛道全球题目是一个刺激和具有挑战性的题。该题要求参队伍利用华为平台和ICT技术,解决现实生活中的一些问题,并加以实施和验证。 首先,参队伍需要选择一个具体的应用场景或问题。可以选择的场景非常广泛,例如智慧城市、工业物联网、智能农业、智能交通等等。 其次,参队伍需要通过研究和分析,利用华为平台和ICT技术为所选择的应用场景或问题设计合适的解决方案。例如,可以利用大数据分析和人工智能技术来提高城市管理效率,可以利用计算和物联网技术来优化工业生产流程,可以利用区块链和物联网技术来提高农业生产效率等等。 然后,参队伍需要实施他们设计的解决方案,并进行验证。这可能涉及到软件开发、系统集成、网络连接等等技术工作。参队伍需要充分运用他们的技术和创新能力,确保他们的解决方案能够在实际应用中正常运行并取得预期的效果。 最后,参队伍需要提交他们的解决方案和实施结果,并进行评估和评判。评委将根据解决方案的创新性、可行性和实施效果等方面进行评分,确定最终的获胜队伍。 通过华为ICT实践赛道全球,参队伍可以充分发挥他们的技术优势和创新能力,并为现实生活中的问题提供有效的解决方案。这不仅对参队伍本身来说是一次难得的学习和锻炼机会,也有助于推动ICT技术在各个领域的应用与发展。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值