华为云大数据分析7天训练营(七)使用DGC实现每日动态发布电影排行榜

举报
花溪 发表于 2021/08/06 12:52:11 2021/08/06
【摘要】 根据《使用DGC实现每日动态发布电影排行榜》操作指导内容完成项目实践;操作类作业若未领取到免费资源或未领取到代金券请勿操作,创建服务作业或实例的区域需与领取套餐区域保持一致;建议操作时间1-2小时,结束后立即删除有关服务实例、作业、资源,避免扣费!!! 如:a.删除OBS相关资源;b.删除DLI作业与队列、数据库资源;c.删除消息通知服务;d.删除DGC作业与脚本资源等;本实践通过数据开发和...

根据《使用DGC实现每日动态发布电影排行榜》操作指导内容完成项目实践;

操作类作业若未领取到免费资源或未领取到代金券请勿操作,创建服务作业或实例的区域需与领取套餐区域保持一致;

建议操作时间1-2小时,结束后立即删除有关服务实例、作业、资源,避免扣费!!! 

如:

a.删除OBS相关资源;

b.删除DLI作业与队列、数据库资源;

c.删除消息通知服务;

d.删除DGC作业与脚本资源等;

本实践通过数据开发和数据湖探索(DLI)服务对电影评分原始数据进行分析,输出评分最高和最活跃Top20电影。用户可以学习到数据开发模块脚本编辑、作业编辑、作业调度等功能,以及DLI的SQL基本语法。

操作流程如下:

  1. 准备工作,包括环境准备数据源准备数据湖准备认证数据准备
  2. 创建数据迁移作业,OBS数据迁移到DLI
  3. 创建DLI SQL脚本,用于计算评分最高的Top20电影和最活跃的Top20电影。
  4. 开发并调度作业,通过编排作业和配置作业调度策略,定期执行迁移作业和DLI SQL脚本,使得用户可以每天获取到最新的Top20电影结果。

环境准备:

  • 已开通DGC实例,并已具备CDM集群。
  • 已开通对象存储服务(OBS),区域和DGC实例相同。
  • 已开通数据湖探索服务(DLI),区域和DGC实例相同。

数据源准备:

在OBS中新建OBS桶“dgc-dli”,将movies.csv、ratings.csv两个原始数据上传至桶中,后续通过数据集成模块将数据集成到DLI中进行处理。

原始数据说明如下:

  • movies.csv

    保存电影的基本信息,包含电影ID、名称、类型。详细见附件

  • ratings.csv

    保存电影评分,包含用户ID、电影ID、评分(0~5)、评分时间。详细见附件

服务列表找到存储obs

打开obs 在obs中新建dgc-dli桶

确定新建信息后点击确认进行创建

等待创建成功

创建成功后将movies.csv、ratings.csv两个原始数据上传至桶中

数据湖准备:

在本示例中,选择数据湖探索(DLI)服务作为数据湖。
首先您需要在DLI中新建SQL队列。在数据迁移作业中需要用到DLI队列,而DLI的default队列无法在迁移作业中使用。


其次您需要准备数据库,后续的数据集成与开发操作均针对数据库和数据表进行。您可以通过DLF或DLI的编辑器执行SQL来创建数据表,本文以使用DLF编辑器为例。
操作步骤如下:
步骤1 进入DGC数据开发主页面,选择“连接管理 -> 新建数据连接”。 

步骤2 创建一个到DLI的连接,数据连接名称为“dli”。

步骤3 在DLI连接上右键单击,创建一个数据库用于存放数据表,数据库名称为“movies”。

步骤4 创建一个DLI SQL脚本,通过SQL语句来创建数据表。
其中,movies_item、rating_item为OBS迁移到DLI的表,两张表用于存放原始数据。top_rating_movie、top_active_movie为DLI表,两张表用于存放分析结果。 

在脚本开发页面下,新建DLI SQL脚本create_dli_table。输入参数与SQL语句后,点击“保存并提交版本”,最后运行脚本。


关键参数说明:
● 数据连接:步骤2中创建的DLI数据连接。
● 数据库:步骤3中创建的数据库。
● 资源队列:使用DLI提供的默认资源队列“default”。
● SQL语句:如下所示。 

DROP TABLE IF EXISTS `movies_item`;
DROP TABLE IF EXISTS `ratings_item`;
DROP TABLE IF EXISTS `top_rating_movie`;
DROP TABLE IF EXISTS `top_active_movie`;

CREATE TABLE IF NOT EXISTS movies_item(  
  `movieId` INT COMMENT '',
  `movieTitle` STRING COMMENT '',
  `videoReleaseDate` STRING COMMENT '',
  `IMDbURL` STRING COMMENT '',
  `unknown` INT COMMENT '',
  `Action` INT COMMENT '',
  `Adventure` INT COMMENT '',
  `Animation` INT COMMENT '',
  `Childrens` INT COMMENT '',
  `Comedy` INT COMMENT '',
  `Crime` INT COMMENT '',
  `Documentary` INT COMMENT '',
  `Drama` INT COMMENT '',
  `Fantasy` INT COMMENT '',
  `Film-Noir` INT COMMENT '',
  `Horror` INT COMMENT '',
  `Musical` INT COMMENT '',
  `Mystery` INT COMMENT '',
  `Romance` INT COMMENT '',
  `Sci-Fi` INT COMMENT '',
  `Thriller` INT COMMENT '',
  `War` INT COMMENT '',
  `Western` INT COMMENT ''
);


CREATE TABLE IF NOT EXISTS ratings_item(  
  `userId` INT COMMENT '',
  `movieId` STRING COMMENT '',
  `rating` INT COMMENT '',
  `timestamp` STRING COMMENT ''
);


CREATE TABLE IF NOT EXISTS top_rating_movie(
  `movieTitle` STRING COMMENT '',
  `avg_rating` float COMMENT '',
  `rating_user_number` int COMMENT ''
); 

CREATE TABLE IF NOT EXISTS top_active_movie(
  `movieTitle` STRING COMMENT '',
  `avg_rating` float COMMENT '',
  `rating_user_number` int COMMENT ''
); 

认证数据准备:

创建访问密钥(AK和SK)。

用户通过客户端或API、SDK等方式访问OBS时,需要通过AK/SK认证方式进行认证鉴权,因此,我们必须先创建访问密钥(AK和SK)。
  • Access Key Id(AK):访问密钥ID。与私有访问密钥关联的唯一标识符;访问密钥ID和私有访问密钥一起使用,对请求进行加密签名。
  • Secret Access Key(SK):与访问密钥ID结合使用的密钥,对请求进行加密签名,可标识发送方,并防止请求被修改。

在创建访问密钥前,请确保登录控制台的帐号已通过实名认证。创建访问密钥(AK和SK)操作步骤如下:

  1. 登录华为云控制台,鼠标移动至右上角用户名,在弹出菜单中单击“我的凭证”
  2. 在左侧导航树单击“访问密钥”。在访问密钥列表中,可以查看已有的访问密钥ID(即Access Key ID),但是,Secret Access Key只有在新增访问密钥时所下载的密钥文件中才可以获取到。
  3. 单击“新增访问密钥”,然后单击“确定”保存密钥文件。每个用户最多可创建两个有效的访问密钥,如果当前已存在2个访问密钥,只能先删除现有的访问密钥,然后再重新创建。

    4.打开下载下来的“credentials.csv”文件即可获取到访问密钥(Access Key ID和Secret Access Key)。

OBS数据迁移到DLI

  1. 进入DGC数据集成主页面,选择“作业管理”。

2.新建CDM到OBS的连接,数据连接名称为“obs_link”

名称

连接的名称,根据连接的数据源类型,用户可自定义便于记忆、区分的连接名。

obs_link

OBS终端节点

Endpoint可从终端节点及区域说明获取。

这里支持用户输入桶级别的域名,则在查询OBS桶的时候,只能查询到这个桶。

obs.cn-north-1.myhuaweicloud.com

端口

数据传输协议端口,https是443,http是80。

443

OBS桶类型

用户下拉选择即可。

-

访问标识(AK)

登录OBS服务器的访问标识。

您需要先创建当前账号的访问密钥,并获得对应的AK和SK。

具体操作请参见(可选)获取认证信息进行创建。

-

密钥(SK)

登录OBS服务器的密钥。

您需要先创建当前账号的访问密钥,并获得对应的AK和SK。

具体操作请参见(可选)获取认证信息进行创建。

-


3.新建CDM到DLI的连接,数据连接名称为“dli_link”

DLI连接参数

参数名

说明

取值样例

名称

连接的名称,根据连接的数据源类型,用户可自定义便于记忆、区分的连接名。

dli_link

访问标识(AK)

访问DLI数据库时鉴权所需的AK。

您需要先创建当前账号的访问密钥,并获得对应的AK和SK。如果尚未创建创建访问密钥,请参见(可选)获取认证信息进行创建。

-

密钥(SK)

访问DLI数据库时鉴权所需的SK。关于如何获取SK,请参见参数“访问标识(AK)”的描述。

-

项目ID

DLI服务所在区域的项目ID。

-

4.CDM到OBS和DLI的连接创建成功后,单击“表/文件迁移”,再单击“新建作业”

5.按照如下步骤完成作业参数的配置。

  • 1.配置作业名为movies_obs2dli,配置源端作业参数,然后配置目的端作业参数

  • 2.在源端作业配置区域,单击“显示高级属性”,在“高级属性”中,系统提供了默认值,请根据实际业务数据的格式设置各项参数。
例如,所示,根据数据源准备中的样例数据格式,需注意以下参数的设置,其他参数经过一一确认均保留默认值即可。
  • 字段分隔符:默认值为逗号,本示例需要保留默认值。
  • 使用包围符:由于IMDbURL有的原始数据中包含“,”,需要修改默认值为“是”
  • 首行为标题行:默认值为“否”,本示例首行是标题行,修改默认值为“是”
  • 编码类型:默认值为UTF-8,本示例保留默认值即可。

  • 3.单击“下一步”后,请参考以下说明配置字段映射,所示,配置完成后,单击“下一步”

     字段映射:在本示例中,由于数据迁移的目标表字段顺序和原始数据的字段顺序是一样的,因此这里不需要调整字段映射的顺序。

     如果目标表字段顺序和原始数据不一致,请一一将源字段指向含义相同的目的字段。请将鼠标移至某一个字段的箭头起点,当光标显示为“+”的形状时,按住鼠标,将箭头指向相同含义的目的字段,然后松开鼠标。

  • 4.根据需要配置任务的重试和定时执行。在本示例中保持默认即可。

  • 5.单击“显示高级属性”,可配置“抽取并发数”以及“是否写入脏数据”,所示。

  • 抽取并发数:您可以根据业务量进行配置。数据源端如果是文件类型,当有多个文件时,增大并发数可以提升抽取速率。
  • 是否写入脏数据:建议配置为“是”,然后参考配置相关参数。脏数据是指与目的端字段不匹的数据,该数据可以被记录到指定的OBS桶中。用户配置脏数据归档后,正常数据可以写入目的端,迁移作业不会因脏数据中断。在本示例中,“OBS桶”配置为在数据源准备中创建的桶“dgc-dli”,您需要前往OBS控制台,在桶中创建一个目录,例如err_data,然后再将中的“脏数据目录”配置为该目录。

  • 6.单击“保存并运行”完成作业的创建。返回“表/文件迁移”页面后,可在作业列表中查看到新建的作业。

  • 7.再新建名为ratings_obs2dli的迁移作业,将ratings.csv数据迁移到DLI的ratings_item表中。待作业运行成功后,数据迁移结束。

开发DLI SQL脚本

  1. 创建DLI SQL脚本top_rating_movie,用于存放评分最高的Top20电影。

    评分最高Top20电影的计算方法是:先计算出每部电影的总评分和参与评分的用户数,过滤掉参与评分的用户数小于100的记录,返回电影名称、平均评分和参与评分用户数。

    在数据开发-脚本开发页面下,新建DLI SQL脚本top_rating_movie。从movies_item和ratings_item表中计算出评分最高的Top20电影,将结果存放到top_rating_movie表。

输入参数与SQL语句后,点击“保存并提交版本”,最后运行脚本。

关键参数说明:

  • 数据连接:2中创建的DLI数据连接。
  • 数据库:3中创建的数据库。
  • 资源队列:使用DLI提供的默认资源队列“default”
  • SQL语句:如下所示。
insert overwrite table top_rating_movie
select
a.movieTitle,
b.ratings / b.rating_user_number as avg_rating,
b.rating_user_number

from
movies_item a,
(
select
movieId,
sum(rating) ratings,
count(1) as rating_user_number

from
ratings_item
group by
movieId
) b
where
rating_user_number > 100
and a.movieId = b.movieId
order by
avg_rating desc
limit
20

2.创建DLI SQL脚本top_active_movie,用于存放最活跃的Top20电影。

最活跃Top20电影的计算方法是:平均评分大于3.5中用户评分数最多的20部电影。

在数据开发-脚本开发页面下,新建DLI SQL脚本top_active_movie。从movies_item和ratings_item表中计算出最活跃的Top20电影,将结果存放到top_active_movie表。
脚本(分析最活跃Top20电影)

输入参数与SQL语句后,点击“保存并提交版本”,最后运行脚本(该脚本由于数据较多,运行时间稍长)。

关键参数说明:

  • 数据连接:2中创建的DLI数据连接。
  • 数据库:3中创建的数据库。
  • 资源队列:使用DLI提供的默认资源队列“default”
  • SQL语句:如下所示。
insert overwrite table top_active_movie   
select * from 
(
select 
  a.movieTitle, 
  b.ratingSum / b.rating_user_number as avg_rating, 
  b.rating_user_number 
from 
  movies_item a, 
  ( 
    select 
      movieId, 
      sum(rating) ratingSum, 
      count(1) as rating_user_number 
    from 
      ratings_item 
    group by 
      movieId 
  ) b 
where  
  a.movieId = b.movieId 
  ) t
  where 
  t.avg_rating > 3.5 
order by 
  rating_user_number desc 
limit 
  20

开发并调度作业

假设“movie”“rating”csv表是每天变动的,我们希望每天更新Top20电影,那么这里可以使用DLF作业编排和作业调度功能。

  1. 在数据开发-作业开发页面下,新建批处理作业,名称为“topmovie”

2.在作业开发页面,拖动两个CDM Job节点、两个Dummy节点和两个DLI SQL节点到画布中,选中连线图标并拖动

关键说明:

  • movies_obs2dli(CDM Job节点):在节点属性中,关联CDM作业“movies_obs2dli”
  • ratings_obs2dli(CDM Job节点):在节点属性中,关联CDM作业“ratings_obs2dli”
  • 等待(Dummy节点):不执行任何操作,作为等待CDM作业结束的标识。
  • top_rating_movie(DLI SQL节点):在节点属性中,关联DLI SQL脚本“top_rating_movie”
  • top_active_movie(DLI SQL节点):在节点属性中,关联DLI SQL脚本“top_active_movie”
  • 结束(Dummy节点):不执行任何操作,作为作业结束的标识。

4.如果作业运行正常,单击画布空白处,在右侧的“调度配置”页面,配置作业的调度策略。

说明:

  • 2021/07/24至2021/07/31,每天0点30分执行一次作业。
  • 跨周期依赖为不依赖,即上一次运行失败不影响下一次调度。

5.最后保存并提交版本(单击),执行调度作业(单击)。实现作业每天自动运行,Top20电影的结果自动保存到“top_active_movie”“top_rating_movie”表。

6.您如果需要及时了解作业的执行结果是成功还是失败,可以通过数据开发的运维调度界面进行查看。数据开发还支持配置通知管理,可以选择配置当作业运行异常/失败后,进行短信、邮件、控制台等多种方式提醒,此处不再展开描述。介绍如何进入监控界面查看执行结果。

作业完成

a.删除OBS相关资源;

b.删除DLI作业与队列、数据库资源;

c.删除消息通知服务;

d.删除DGC作业与脚本资源等;


【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。