千亿级数仓项目第01天讲义

课程目标

  • 了解大数据离线数仓架构
  • 了解项目部署环境(数据规模和集群规模)
  • 掌握ETL工具 Kettle常用组件的使用
  • 能够掌握kettle作业与转换区别以及linux部署

1. 电商行业简介

电商行业分析

近年来,中国的电子商务快速发展,交易额连创新高,电子商务在各领域的应用不断拓展和深化、相关服务业蓬勃发展、支撑体系不断健全完善、创新的动力和能力 不断增强。电子商务正在与实体经济深度融合,进入规模性发展阶段,对经济社会生活的影响不断增大,正成为我国经济发展的新引擎。

中国电子商务研究中心数据显示,截止到 2012 年底,中国电子商务市场交易规模达 7.85万亿人民币,同比增长 30.83%。其中,B2B 电子商务交易额 达 6.25 万亿,同比增长 27%。而 2011 年全年,中国电子商务市场交易额达 6 万亿人民币,同比增长 33%,占 GDP 比重上升到 13%;2012 年,电子商务占 GDP 的比重已经高达 15%。

双十一交易额

电商行业技术特点

  • 技术新

  • 技术范围广

  • 分布式

  • 高并发、集群、负载均衡(Nginx)、高可用(备机)

  • 海量数据

  • 业务复杂

  • 系统安全

电商业务系统简介

品优购网上商城是一个综合性的 B2B2C 平台,类似京东商城、天猫商城。网站采用商家入驻的模式,商家入驻平台提交申请,有平台进行资质审核,审核通过后,商家拥有独立的管理后台录入商品信息。商品经过平台审核后即可发布。

品优购网上商城主要分为

  • 网站前台
  • 运营商后台
  • 商家管理后台

网站前台

主要包括

  • 网站首页
  • 商家首页
  • 商品详细页
  • 搜索页
  • 会员中心
  • 订单与支付相关页面
  • 秒杀频道等。
前台

运营商后台

是运营商的运营人员的管理后台。 主要包括商家审核、品牌管理、规格管理、模板管理、商品分类管理、商品审核、广告类型管理、广告管理、订单查询、商家结算等。

后台

商家管理后台

入驻的商家进行管理的后台,主要功能是对商品的管理以及订单查询统计、资金结算等功能。

商家管理后台

大数据数仓项目简介

业务流程

本次数仓业务流程主要分为两类,

  • 一类是用户下单、提交订单、支付、退款这一条线,
  • 另一类是我们收集用户的页面行为数据:用户搜索商品、添加购物车 、提交订单、支付订单 的日志数据,分析电商网站常见的PV,UV,GMV,

GMV (Gross Merchandise Volume):主要是指网站的成交金额,而这里的成交金额包括:付款金额和未付款。

千亿级数仓模仿阿里巴巴双十一的大屏显示功能实现的互联网电商指标的离线分析,同时也模仿了阿里巴巴大数据平台上面数据仓库的设计思想和理念。大家通过学习这个项目,能够掌握以下三个核心技能:

1、数据仓库的概念和建设过程

2、离线数据仓库的功能、使用场景和常用的技术栈

大数据离线数仓项目架构

离线项目架构图

项目具体技术简介

  • Kettle
  • 缓慢变化维(拉链表):时间维度,脚本生成,时间维度生成之后不会变化,SCD问题我们使用拉链表来解决;
  • Hive
  • kettle:导出数据的工具
  • Spark SQL:计算引擎
  • Kylin:计算引擎,进行预计算之后的多维统计分析可以达到亚秒级别。

项目环境介绍

  • 业务数据量

    • 用户数:300W
    • 每日订单量:10W
    • 每日交易额:700W
    • 商家数:5W
    • 商品数:45W
    • PV:500W
    • UV:50W
  • 数据在hdfs中平均每天 40G左右的速度增长,存储3份,每天增长大概120G,存储hive表时

    会说过parquet格式+snappy压缩

  • 硬件资源

    • 数量:30台

    • CPU资源:24核

    • 内存:128G

    • 硬盘:4T

可视化ETL工具-Kettle入门

Kettle介绍

对于企业或行业应用来说,经常会遇到各种数据的处理,转换,迁移,掌握一种etl工具的使用,必不可少,这里要学习的ETL工具是——Kettle,现在已经更名为PDI

  • Kettle是一款国外开源的ETL工具,纯java编写,可以在Window、Linux、Unix上运行,绿色无需安装

  • Kettle 中文名称叫水壶,该项目的主程序员MATT 希望把各种数据放到一个壶里,然后以一种指定的格式流出

  • Kettle允许管理来自不同数据库的数据,提供一个图形化的用户环境来描述想做什么,无需关心怎么做

大数据岗位需求

Kettle安装、配置

环境要求:

  • 安装、配置好JDK

1、下载Kettle

  • 资料\安装包\pdi-ce-8.2.0.0-342.zip

2、解压Kettle

解压后目录

3、双击spoon.bat 启动spoon

启动脚本
启动后结果如图

Kettle入门案例

需求:

  • 把数据从CSV文件(ketttle测试数据\用户数据源\user.csv)抽取到Excel文件

数据源:

id name age gender province city region phone birthday hobby 注册时间
392456197008193000 张三 20 0 北京市 昌平区 回龙观 18589407692 1970-08-19 美食;篮球;足球 2018-08-06 09:44:43
267456198006210000 李四 25 1 河南省 郑州市 郑东新区 18681109672 1980-06-21 音乐;阅读;旅游 2017-04-07 09:14:13
892456199007203000 王五 24 1 湖北省 武汉市 汉阳区 18798009102 1990-07-20 写代码;读代码;算法 2016-06-08 07:34:23
492456198712198000 赵六 26 2 陕西省 西安市 莲湖区 18189189195 1987-12-19 购物;旅游 2016-01-09 19:15:53
392456197008193000 张三 20 0 北京市 昌平区 回龙观 18589407692 1970-08-19 美食;篮球;足球 2018-08-06 09:44:43
392456197008193000 张三 20 0 北京市 昌平区 回龙观 18589407692 1970-08-19 美食;篮球;足球 2018-08-06 09:44:43

实现步骤:

1、在Kettle中新建转换

2、拖拽一个CSV输入组件、一个Excel输出组件、并按住Shift拖动鼠标连接两个组件

3、配置CSV输入组件、Excel输出组件

具体实现:

1、新建转换

新建转换

2、拖拽一个CSV输入组件、一个Excel输出组件、并按住Shift拖动鼠标连接两个组件

组件架构图

3、配置CSV输入组件

  • 选择要进行导入的CSV数据源
  • 点击 「获取字段」,读取CSV中的列
  • 点击 「预览」,浏览CSV中的数据

4、配置Excel组件

指定输出Excel文件的位置

5、点击 三角形 箭头执行

执行

Kettle数据流结构图

kettle数据流结构图

Kettle输入/输出组件

输入组件

JSON数据文件输入

需求:

  • 资料\kettle测试数据\用户数据源\user.json 数据文件,通过Kettle,抽取到Excel中

    json数据格式

操作步骤:

1、新建转换

2、拽入 JSON input组件、Microsoft Excel输出组件、并连接两个组件

组件架构图

3、配置 JSON input 组件

① 指定JSON文件数据源
② 选择 JSON 字段
3、配置 Excel 输出 组件

5、启动执行

表输入

需求:

  • 将MySQL数据库中的 user 表中的数据抽取到Excel文件中

环境准备:

一、Kettle整合MySQL数据库

1、将资料中的 MySQL jdbc 驱动包导入到 pdi-ce-8.2.0.0-342\data-integration\lib 中

2、重启 Kettle

二、MySQL建库

1、导入 资料\kettle测试数据\用户数据源\test_t_user.sql 到 MySQL数据库中

准备测试数据源

实现步骤:

1、拉动 输入/表输入 、输出/Excel输出 组件、连接两个组件

2、配置表输入

3、配置Excel输出组件

具体操作:

1、拉动 输入/表输入 、输出/Excel输出 组件、连接两个组件

2、配置表输入

2.1 新建数据库连接

kettle新建数据库连接

2.2 选择 t_user 表,并获取SQL查询语句

编写sql语句

2.3 预览数据

预览数据

注意:创建一个共享的数据库连接操作步骤

主对象树–》DB连接
新建连接
设置连接共享

鼠标右键–》共享;字体变粗后该连接可以全局使用!

3、配置Excel输出组件

  • 指定Excel输出位置

    指定excel输出位置

生成记录

数据仓库中绝大多数的数据都是业务系统生成的动态数据,但是其中一部分维度数据不是动态的,比如:日期维度。静态维度数据就可以提前生成。

需求:

  • 往 Excel 文件中插入1000条记录:id为1,name为itheima,age为18

操作步骤:

1、拖入 输入/生成记录 组件、输出/Excel输出 组件、连接两个组件

2、配置生成记录组件

3、配置Excel输出

具体实现:

1、拖入 输入/生成记录 组件、输出/Excel输出 组件、连接两个组件

组件配置图

2、配置生成记录组件

生成记录组件

输出组件

文本文件输出

需求:

  • 从mysql数据库的test库的t_user表 抽取数据到文本文件中

步骤:

1、拖入 一个 输入/表输入、一个 输出/文本文件输出、并连接两个组件

组件配置图

2、指定 从哪个表中获取数据

3、指定表中的数据输出到哪个文件

表输出

  • 表输出就是把数据写入指定的表

需求:

  • 资料\kettle测试数据\用户数据源\user.json中读取id, name, age字段的数据,
  • 装载到mysql数据库的 t_user_1 表中

操作步骤:

1、拖动 输入/JSON Input组件 ,输出/表输出,连接两个组件

2、JSON输入配置

3、表输出配置

具体操作:

1、拖动 输入/JSON Input组件 ,输出/表输出,连接两个组件

组件配置图

2、JSON输入配置

json输入配置图

3、表输出配置

表输出配置

插入更新

  • 插入更新就是把数据库已经存在的记录与数据流里面的记录进行比对

    • 如果不同就进行更新
    • 如果记录不存在,则会插入数据

需求:

  • 资料\kettle测试数据\user_new.json 中读数据,并插入或更新到mysql数据库的 t_user_1 表中

操作步骤:

1、拖入一个 输入/JSON输入组件,一个 输出/插入更新组件、连接两个组件

2、配置 JSON输入组件

3、配置 插入更新 组件

4、启动执行

具体实现:

1、拖入一个 输入/JSON输入组件,一个 输出/插入更新组件、连接两个组件

组件配置图

2、配置 JSON输入组件

json输入组件

3、配置 插入更新 组件

插入更新组件

4、启动执行

删除

需求:

  • 从mysql数据库 t_user_1 表中删除指定id为 492456198712198000 的数据

操作步骤:

1、拖入一个 输入/自定义常量数据、输出/删除 组件

2、连接两个组件

组件图

3、配置自定义常量数据组件

自定义常量组件

4、配置删除组件

配置删除组件

Kettle整合大数据平台

Kettle整合Hadoop

Hadoop环境准备

1、查看hadoop的文件系统

  • 通过浏览器访问
http://node1:50070/
  • 通过终端访问
hadoop fs -ls / # 查看文件

2、在hadoop文件系统中创建/hadoop/test目录

hadoop fs -mkdir -p /hadoop/test

3、在本地创建1.txt

  • vim 1.txt
id,name
1,itheima
2,itcast

4、上传1.txt到hadoop文件系统的/hadoop/test目录

hadoop fs -put 1.txt /hadoop/test

kettle与hahoop环境整合

1、确保Hadoop的环境变量设置好HADOOP_USER_NAME为root

2、从hadoop下载核心配置文件

sz /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/hdfs-site.xml
sz /export/servers/hadoop-2.6.0-cdh5.14.0/etc/hadoop/core-site.xml

文件会被下载到windows的下载目录

sz命令设置下载到windows的目录:

linux下载文件到windows

3、把hadoop核心配置文件(hdfs-site.xml和core-site.xml)放入kettle目录

data-integration\plugins\pentaho-big-data-plugin\hadoop-configurations\cdh514

4、修改 data-integration\plugins\pentaho-big-data-plugin\plugin.properties文件

  • 修改plugin.properties
active.hadoop.configuration=cdh514
plugin.propeties

5、 创建Hadoop clusters

具体步骤如下:

创建hadoop cluster

点击测试结果如图片右侧展示效果说明整合hadoop环境没有问题!!点击确定保存以上操作即可!!

查看链接是否保存:

hadoop连接保存

如果与hadoop链接没有保存后续是无法操作hadoop集群!!

Hadoop file input组件

Kettle在Big data分类中提供了一个Hadoop file input 组件用来从hdfs文件系统中读取数据。

hadoop file input

需求:

  • 从Hadoop文件系统读取/hadoop/test/1.txt文件,把数据输入到Excel中。

实习步骤:

1、拖入以下组件

2、配置Hadoop File Input组件

指定hdfs的目标路径:

hadoop file input

指定文件内容格式:

指定文件内容格式

点击字段查看获取字段是否正确:

获取字段

配置excel输出组件:

excel输出组件配置

点击excel输出组件获取字段查看字段是否正确:

获取字段

启动转换任务:

执行任务
执行结果

Hadoop file output组件

Kettle在Big data分类中提供了一个Hadoop file output 组件用来向hdfs文件系统中保存数据

hadoop file output组件

需求:

  • 读取 user.json 把数据写入到hdfs文件系统的的/hadoop/test/2.txt中。

实现步骤:

1、拖入以下组件

组件配置

2、配置 JSON 输入组件

指定json文件的路径
配置json input组件读取的字段

3、配置Hadoop file output组件

指定hdfs目标路径
指定源文件的属性信息:
  • 问题

错误:用户没有权限

解决:

# 修改权限hadoop fs -chmod -R 777  /

Kettle整合Hive

初始化数据

1、连接hive

beeline连接hive

2、创建并切换数据库

create database test;
use test;

3、创建表

create table a(a int,b int
)
row format delimited fields terminated by ',' stored as TEXTFILE;
show tables;

4、创建数据文件

vim a.txt
1,11
2,22
3,33

5、 从文件加载数据到表

load data local inpath '/root/a.txt' into table a;

6、查询表

select * from a;

kettle与Hive整合

1、从虚拟机下载Hadoop的jar包

sz /export/servers/hadoop-2.6.0-cdh5.14.0/share/hadoop/common/hadoop-common-2.6.0-cdh5.14.0.jar

2、把jar包放置在\data-integration\lib目录下

上传到lib目录下

3、重启kettle,重新加载生效

关掉之前打开的kettle重新启动!!

从hive中读取数据

  • hive数据库是通过jdbc来进行连接,可以通过表输入控件来获取数据。

需求:

  • 从hive数据库的test库的a表中获取数据,并把数据保存到Excel中。

实现步骤:

1、设计一下kettle组件结构

选择输入文件夹内的表输入组件:

表输入组件

2、配置表输入组件

新建hivejdbc连接:
配置excel输出组件

把数据保存到hive数据库

hive数据库是通过jdbc来进行连接,可以通过表输出控件来保存数据。

需求:

  • 从Excel资料\02.kettle测试数据\01.用户数据源\file_user.xls中读取数据,把数据保存在hive数据库的test数据库的t_user表。

实现步骤:

1、设计如下kettle组件结构

组件配置图

2、配置 Excel输入组件

excele输入组件
查看excel解析字段是否正确

2、配置表输出组件

表输出组件
获取流中的字段
验证

执行Hive的HiveSQL语句

Kettle中可以执行Hive的HiveSQL语句,使用作业的SQL脚本。

需求:

  • 聚合查询weblogs表(以IP和年月分组统计的PV数据),同时建立一个新表保存查询数据。

准备hive表

在hive的test数据库下创建weblogs表:

 CREATE TABLE `weblogs`(                           `client_ip` string,                              `full_request_date` string,                      `day` string,                                    `month` string,                                  `month_num` int,                                 `year` string,                                   `hour` string,                                   `minute` string,                                 `second` string,                                 `timezone` string,                               `http_verb` string,                              `uri` string,                                    `http_status_code` string,                       `bytes_returned` string,                         `referrer` string,                               `user_agent` string) row format delimited fields terminated by '\t' stored as textfile;

导入资料\资料\02.kettle测试数据\hive-weblogs\下的数据

load data local inpath '/root/weblogs_parse.txt' into table weblogs;

验证数据

select * from test.weblogs limit 5;

实现步骤:

1、设计如下作业组件结构

设计如下作业组件结构

2、配置SQL组件

配置sql组件

3、测试数据是否生成

验证数据

kettle常用其它组件

Kettle转换组件

  • 转换是ETL的T,T就是Transform清洗、转换

  • ETL三个部分中,T花费时间最长,是“一般情况下这部分工作量是整个ETL的2/3

    kettle转换组件

值映射

  • 值映射就是把字段的一个值映射成其他的值
  • 在数据质量规范上使用非常多,比如很多系统对应性别gender字段的定义不同
    • 系统1:1 男、2女
    • 系统2:f 男、m 女
    • 数据仓库统一为:male 男、female女

需求:

  • 从user.json 中读取数据,并把gender列

    • 0 -> 男
    • 1 -> 女
    • 2 -> 保密
  • 写入到Excel文件

实现步骤:

1、拖入一个 JSON输入组件、一个值映射转换组件、一个Excel输出组件,连接三个组件

2、配置JSON输入组件

3、配置值映射转换组件

4、配置Excel输出组件

具体实现:

1、拖入一个 JSON输入组件、一个值映射转换组件、一个Excel输出组件,连接三个组件

组件配置图

2、配置JSON输入组件

3、配置值映射转换组件

值映射组件

4、配置Excel输出组件

增加序列

  • 增加序列就是给数据流增加一个序列字段

    增加序列

需求:

  • 从 user.json 读取数据,并添加序列,把数据保存到Excel

实现步骤:

1、拖入JSON输入组件、增加序列组件、Excel输出组件,并连接三个组件

组件配置图

2、配置JSON Input组件

3、配置增加序列组件

配置增加序列

4、配置Excel输出组件

字段选择

  • 字段选择是从数据流中选择字段、改变名称、修改数据类型

需求:

  • 从 user.json 中读取数据
  • 移除birthday和register_date
  • 把phone列名改为telephone,id列名改为key,gender列名改为sex
  • 输出到Excel文件中

实现步骤:
1、拖入 JSON输入 组件、字段选择组件、Excel输出组件

组件配置图

2、配置输入、字段选择、输出组件

配置输入,字段选择,输出组件

Kettle流程控件

  • 流程主要用来控制数据流程和数据流向

switch case

  • switch/case组件让数据流从一路到多路。

    switch case

需求:

  • 从 user.json 输入读取数据,按sex进行数据分类,把女性、男性、保密分别保存不同的Excel文件里面。

    • 0表示男性
    • 1表示女性
    • 2表示保密

实现步骤:

1、拖入 JSON输入组件,switch/case组件,三个Excel输出组件

组件配置图

2、配置 switch/case 组件

配置 switch/case 组件

过滤记录

过滤记录让数据流从一路到两路。

过滤记录

需求:

  • 从 user.json 读取数据,分离出 年龄 大于等于25,小于25的数据,分别保存到不同的Excel文件

实现步骤:

1、拖入 JSON输入组件、过滤记录组件、两个Excel组件,并连接各个组件

组件配置图

2、配置过滤记录组件

配置过滤组件

Kettle连接控件

笛卡尔积

笛卡尔积

需求:

  • 从Excel读取两位和三位数,完成两位数和三位数的组合(笛卡尔积),把结果保存在Excel

实现步骤:

1、设计转换结构

转换结构图

2、配置记录关联(笛卡尔积组件)

配置记录关联

记录集连接

  • 记录集连接类似数据库的左连接、右连接、内连接、外连接。
  • 在进行记录集连接之前,应该要对记录集进行排序

需求:

  • 从Excel中读取employees和departments数据,进行内关联,左关联,右关联,全关联,把数据保存到Excel

实现步骤:

1、设计以下组件图

组件转换图

2、配置记录集连接组件

配置记录集连接组件

Kettle作业和参数

Job(作业)

大多数ETL项目都需要完成各种各样的操作,例如:

  • 如何传送文件
  • 验证数据库表是否存在,等等

而这些操作都是按照一定顺序完成,Kettle中的作业可以串行执行转换来处理这些操作。

配置作业

Job Item(作业项)

作业项是作业的基本构成部分。如同转换的组件,作业项也可以用图标的方式展示。

作业展示图
  • 作业顺序执行作业项,必须定义一个起点
  • 有一个「start」的作业项专门用来定义起点
  • 一个作业只能定一个开始作业项

Job Hop(作业跳)

Job Hop是作业项之间的连接线,定义了作业的执行路径,作业里每个作业项的不同运行结果决定了作业的不同执行路径。以下为 Job Hop的几种执行方式:

1、无条件执行

  • 不论上一个作业项执行成功还是失败,下一个作业项都会执行

  • 蓝色的连接线,上面有一个锁的图标

    无条件执行

2、当运行结果为真时执行

  • 当上一个作业项的执行结果为真时,执行下一个作业项

  • 通常在需要无错误执行的情况下使用

  • 绿色的连接线,上面有一个对钩号的图标。

    结果为真执行

3、当运行结果为假时执行

  • 当上一个作业项的执行结果为假或者没有成功执行时,执行下一个作业项
  • 红色的连接线,上面有一个红色的停止图标
当结果为假时执行

作业示例

需求:

  • 先从 资料\作业数据源\01Excel输入.xlsx读取数据,保存到Excel
  • 再从 资料\作业数据源\01文本文件输入.txt 文本文件中读取数据,保存到Excel
  • 启动作业执行
    • 执行错误,显示执行错误消息框
    • 执行成功,显示执行成功消息框

实现步骤:

1、设计转换结构1(从Excel读取数据,保存到Excel)

从Excel读取数据,保存到Excel
从文本文件中读取数据,保存到Excel

3、设计作业结构(先执行转换结构1、再执行转换结构2)

作业结构图

4、运行测试

5、错误测试

将第一个转换结构直接终止,并配置抛出一个错误

2 参数

参数的使用

对于ETL参数传递是一个很重要的环节,因为参数的传递会涉及到业务数据是如何抽取

转换命名参数

  • 转换命名参数就是在转换内部定义的变量,作用范围是在转换内部

  • 在转换的空白处双击左键,在转换属性中能看到

  • 可以在表输入 SQL语句中使用 ${变量名} 或者 %%变量名%% 直接引用

    转换命名参数

需求:

  • 设置转换命名参数 default_province = 北京市
  • 从t_user表中获取数据,满足条件 province=default_province,后续不要执行任何操作

实现步骤:

1、设计以下转换组件结构图

转换结构图

2、配置转换命名参数

设置转换命名参数

3、配置表输入组件

配置表输入组件

4、执行转换

执行转焕

Kettle Linux部署

kettle linux部署

Linux安装Kettle

1、用File Zilla将kettle上传到Linux服务器,并解压缩

2、在命令行执行

./pan.sh -version
./kitchen.sh -version

3、如果能够看到以下输出,表示kettle可以正确运行

2019/10/09 08:49:09 - Pan - Kettle version 8.2.0.0-342, build 8.2.0.0-342, build date : 2018-11-14 10.30.55
2019/10/09 08:49:09 - Pan - Start of run.
ERROR: No repository provided, can't load transformation.
2019/10/09 08:13:21 - Kitchen - Kettle version 8.2.0.0-342, build 8.2.0.0-342, build date : 2018-11-14 10.30.55
2019/10/09 08:13:21 - Kitchen - Start of run.
ERROR: Kitchen can't continue because the job couldn't be loaded.

4、配置环境变量

# KETTLE
export KETTLE=/export/softwares/data-integration
export PATH=${KETTLE}:$PATH

Pan——转换执行引擎

pan.sh可以用来在服务器中执行一个转换

pan.sh的命令行参数:

-version:显示版本信息
-file: 指定要运行的转换文件(XML文件)
-level: 设置日志级别(Basic,Detailed,Debug,Rowlevel,Error,Nothing)
-log: 指定日志文件
-param:key=value (该参数可以指定多个)覆盖之前指定的默认的命名参数

需求:

  • 在Linux中,将 /root/kettle/user.json 数据抽取到 /root/kettle/user.xls 表格中

实现步骤:

1、在 windows 中开发转换,将 json数据抽取装载到 user.xls文件中

2、抽取路径参数,通过命令行指定 json数据文件路径,指定 user.xls 文件路径

设置转换命名参数

3、将数据文件上传到 /root/kettle 目录

4、上传转换文件、json数据文件到Linux服务器

5、使用 pan.sh 执行转换

pan.sh -file 8.transform_param.ktr -level Basic -param:input=/root/kettle/user.json -param:output=/root/kettle/output_user

Kitchen——作业执行引擎

在Linux中,可以使用 kitchen.sh 来执行作业

需求:

  • 执行JSON数据抽取到Excel中

实现步骤:

1、在windows中开发作业

作业配置图

2、配置转换组件

引入之前定义好的转换任务

3 windows本地测试执行

4 、修改转换中的路径参数改为用变量来接收

windows测试

5、配置作业命名参数

作业的命名参数

6、启动测试执行

6、上传JOB文件到Linux服务器的/root/kettle/目录

7、使用kitchen.sh执行作业

kitchen.sh -file job_transform.kjb -level Basic -param:input=/root/kettle/user.json -param:output=/root/kettle/output_user

课堂笔记

千亿级数据仓库项目(离线部分,实时部分)

业务:电商行业,订单数据,用户的点击行为数据(点击流日志分析项目以hive为主)

技术:

  • 离线部分核心技术全部升级为spark,spark sql,

  • kylin(麒麟),中国人第一个开源的apache 顶级项目;kylin是一个交互式查询工具,查询速度快!!

项目中的重点和难点:

1、 缓慢变化维的问题:

数仓从业务系统同步数据的时候,T+1同步,每日同步昨日全量数据,这种适合的是数据不会发生改变的情况,

引入技术点:拉链表技术。

2、 spark的数据倾斜问题

面试题一般不会直接简单问,你项目中遇到了哪些倾斜问题?以及怎么解决的?

点击流日志分析项目中,pageview模型,visit模型,

生成pageview模型的时候,生成sessionid的概念,如果日志数据产生了倾斜(比如某个用户产生了大量的数据)。重点!!

3 kylin的优化

kylin的碎片管理,cube优化,强制维度,层级维度,组合维度等

day01笔记

目标:

1、 了解千亿级数仓的整体技术架构和数据流转图(面试必问)

2 、项目的部署环境(数据量的角度,集群的规模)(面试必问)

3、可视化的ETL工具kettle,拖拽就可以实现ETL任务(大家课下多练习)

电商业务系统介绍

1、电商前台页面

2、运营管理后台:审核店铺资质,促销运营活动,

3、店铺管理后台:店主来管理自己的店铺

后台管理系统会有一些指标性的需求:pv,uv,日成交额,转化率等指标

大数据的技术来实现这些指标的统计,

数仓项目的业务

对开发人员来说,业务你可以理解为是非技术性的东西,电商中:买卖东西,

负责订单业务:负责生成订单数据,把订单数据插入mysql订单表中,用户更新订单状态你要去表中修改数据状态。

两条业务线:

1、 用户下单,支付,收货,退货,主要关注该流程,

2、用户前台点击流数据分析,用户进入系统之后,点击动作,会话轨迹,统计pv,uv等

整体技术架构(数据流转图)

自己要能边画图边讲解。

项目的部署环境

数据量:40G增量数据!!

集群规模:

hadoop 归档技术,可以把归档之后的数据从hdfs集群导出(相当于从hdfs集群删除),

需要使用时直接导入hdfs集群即可使用。

很多公司不需要查询3,5年前数据的。

服务器配置信息参考:https://www.ucloud.cn/site/product/uhadoop.html

可视化ETL工具–kettle

1、 kettle最大的特点

对于我们采集任务,ETL任务都可以实现拖拽式的页面开发,不用再编写shell脚本。

java程序运行需要:jvm,

安装kettle的环境:必须有jdk环境

kettle是一个java编写的开源的可视化的ETL工具!!

2、kettle的安装和部署

1、 java环境准备好,

2 、安装包

3 、直接解压pdi的压缩包

注意:解压之后的路径是一个非中文非空格的目录。

4 、启动kettle

启动后的页面

kettle的入门案例

把csv文件中的数据采集到一个excel文件中,

自己编写程序可以实现该需求,

kettle的优势:不用编写代码直接拖拽即可实现目的。

新建转换

组合多个组件

配置csv输入组件

配置excel输出组件

启动任务

启动结果如图:

使用kettle时要分清楚输入和输出的区别,

读取数据对于kettle来说都是输入组件,

写出数据对月kettle来说是输出组件,

输入组件

1 json输入组件

确定输入组件:读取一个user.json文件,找一个可以读取json文件的输入组件,

确定输出组件:写到excel,excel输出组件

json输入组件配置:

2 表输入组件

1、确定 需求中对应的kettle的输入和输出组件是什么

2、kettle中组合这两个组件然后配置最终启动验证即可。

读取表中数据:

输入–》表输入组件

输出 excel

输出–》excel输出组件

使用表输入组件注意事项:

一定要把mysql驱动jar放入data-intergration的lib目录中。

表输入组件配置

生成记录组件

该组件就是可以从无到有产生数据,

关于日期维度数据的生成?使用脚本生成。

后续我们项目中的日期维度数据就使用kettle的生成记录组件完成!!

输入:生成记录组件

输出:excel输出组件

生成记录组件的配置

输出组件

文本文件输出

输入:表输入

输出:文本文件输出

创建一个共享的数据库连接操作步骤

1 主对象树找到DB连接

2 、新建连接

3 、 设置连接共享

字体变粗后就是共享了。

表输入配置

文本文件输出配置

表输出

输入:json input组件

输出:表输出

使用kettle自动生成的建表语句,字段类型有的时候kettle判断的不准确,需要我们手动调整下。

报错信息:数据超过表中字段的长度约束!!

插入和更新

什么时候直接插入?

什么时候需要更新操作?

主键相同的我们就进行更新,主键不同我们任务是新的数据则插入。

插入更新的配置:

通过插入更新组件我们可以决定数据是该插入还是更新到表中!!

删除组件

输入:自定义常量

输出:删除组件

删除组件配置:

kettle整合大数据平台

1 整合hadoop

1 设置环境变量hadoop_user_name为root,设置的目的是为了告诉hdfs我们kettle所使用的用户信息是root,

有关权限校验的问题,关闭hdfs的权限校验,chmod -R 777 /

2 下载linux文件到windows

如果没有sz,rz命令需要安装下:

 yum install -y lrzsz

rz,sz的windows默认路径。

5 创建hadoop cluster

大数据 组件

hadoop file input组件

输入:hadoop file input

输出:excel输出

hadoop file input的配置:

注意:

hadoop file input就是从hdfs集群读取数据的组件,需要设置hadoopcluster的连接还有指定你要读取的文件路径!!

hadoop file output组件

写数据到hdfs中,

输入:json input组件

输出:hadoop file output组件

hadoop file output组件

spark为什么对列式存储支持比较好?

列式存储在查询时会有更好的性能,存储时会有更好的压缩比。

整合hive

本项目中数仓的主题(数据分析平台)是使用hive来构建(hive的库分层,以表来存储数据)

kettle从mysql中采集业务数据之后如何把数据传送到hive表中?

kettle整合hive

1、需要下载hadoop-cmmon.jar包

2 、把jar包放入data-intergretion中的lib目录下

3、 重启kettle,让jar被kettle加载生效。

案例1

从hive中读取数据写入excel

输入:表输入组件

输出:excel输出

如果操作hive用什么连接?使用jdbc方式

  • 表输入配置

    • hive连接信息:

扩展

canal是不是通过jdbc方式查询mysql?不是,是通过解析二进制日志文件获取数据。

kettle hive表输出

如何保存数据到hive表中?

1 、load data inpath

load操作本质是把文件迁移到hive表指定的路径下;

如果我们准备一个数据文件,列分隔符与hive表保持一致,然后把这个文件放到hive表对应的hdfs路径下,

hive表能否识别到这些数据?

  • 普通表(非分区表):上面这种情况是可以识别到数据
  • 分区表:这种直接操作需要执行修复分区命令,(msck repair table tablename)

2 、 insert :类似mysql insert into,底层是要翻译成mr程序,

3 、 create table as select :根据后面语句建表同时保存数据。

4、 insert overwrite xxx select 语句

向hive中插入数据是不能使用表输出组件,而是可以考虑使用hadoop fileoutput组件(向hdfs上传文件而已);

使用hadoop output这种方式,只是把文件数据上传到hdfs,如果是分区表需要执行一个hql语句,借助kettle执行sql脚本的组件。

kettle执行hivesql语句

新建作业

脚本–》sql

sql语句中 group by查询时,前面查询的字段一定是后面分组的字段或者是聚合函数操作的字段。

mysql 中非分组字段进行非聚合函数处理的字段是否能查询?(验证下)

create table weblogs_35 as select count(*) as pv,year,month  from weblogs group by year,month ;

可以帮助我们执行hive修复分区的命令!!

ETL–》T transferom:转换

kettle的转换组件

1 值映射

就是把数据流中的某个字段的值映射为其它值。

A:性别:female,male

B:性别:0,1

我们使用kettle采集来自这两个系统的数据会发现对于同个字段编码方式不一样,

借助值映射把数据进行归一化。

输入组件:json input

输出组件:excel 输出组件

转换组件:值映射

增加序列组件

对数据流中的数据打上一个行号,序号。

输入组件:json input

输出组件:excel输出

转换组件:增加序列组件

增加序列组件配置

字段选择组件

输入:json input

输出:excel输出

转换:字段选择组件

484786)]

hadoop file input就是从hdfs集群读取数据的组件,需要设置hadoopcluster的连接还有指定你要读取的文件路径!!

hadoop file output组件

写数据到hdfs中,

输入:json input组件

输出:hadoop file output组件

hadoop file output组件

[外链图片转存中…(img-0foh7AZd-1651115484788)]

[外链图片转存中…(img-Hbx6TiZW-1651115484791)]

spark为什么对列式存储支持比较好?

列式存储在查询时会有更好的性能,存储时会有更好的压缩比。

整合hive

本项目中数仓的主题(数据分析平台)是使用hive来构建(hive的库分层,以表来存储数据)

kettle从mysql中采集业务数据之后如何把数据传送到hive表中?

kettle整合hive

1、需要下载hadoop-cmmon.jar包

2 、把jar包放入data-intergretion中的lib目录下

3、 重启kettle,让jar被kettle加载生效。

案例1

从hive中读取数据写入excel

输入:表输入组件

输出:excel输出

如果操作hive用什么连接?使用jdbc方式

  • 表输入配置

    • hive连接信息:

[外链图片转存中…(img-FazRA8Pj-1651115484799)]

[外链图片转存中…(img-KhB9sNXZ-1651115484805)]

扩展

canal是不是通过jdbc方式查询mysql?不是,是通过解析二进制日志文件获取数据。

kettle hive表输出

如何保存数据到hive表中?

1 、load data inpath

load操作本质是把文件迁移到hive表指定的路径下;

如果我们准备一个数据文件,列分隔符与hive表保持一致,然后把这个文件放到hive表对应的hdfs路径下,

hive表能否识别到这些数据?

  • 普通表(非分区表):上面这种情况是可以识别到数据
  • 分区表:这种直接操作需要执行修复分区命令,(msck repair table tablename)

2 、 insert :类似mysql insert into,底层是要翻译成mr程序,

3 、 create table as select :根据后面语句建表同时保存数据。

4、 insert overwrite xxx select 语句

向hive中插入数据是不能使用表输出组件,而是可以考虑使用hadoop fileoutput组件(向hdfs上传文件而已);

使用hadoop output这种方式,只是把文件数据上传到hdfs,如果是分区表需要执行一个hql语句,借助kettle执行sql脚本的组件。

kettle执行hivesql语句

新建作业

[外链图片转存中…(img-P2POu7da-1651115484808)]

脚本–》sql

[外链图片转存中…(img-UV22Kq2H-1651115484810)]

sql语句中 group by查询时,前面查询的字段一定是后面分组的字段或者是聚合函数操作的字段。

mysql 中非分组字段进行非聚合函数处理的字段是否能查询?(验证下)

create table weblogs_35 as select count(*) as pv,year,month  from weblogs group by year,month ;

可以帮助我们执行hive修复分区的命令!!

ETL–》T transferom:转换

kettle的转换组件

1 值映射

就是把数据流中的某个字段的值映射为其它值。

A:性别:female,male

B:性别:0,1

我们使用kettle采集来自这两个系统的数据会发现对于同个字段编码方式不一样,

借助值映射把数据进行归一化。

输入组件:json input

输出组件:excel 输出组件

转换组件:值映射

[外链图片转存中…(img-U0iBT02Y-1651115484812)]

增加序列组件

对数据流中的数据打上一个行号,序号。

输入组件:json input

输出组件:excel输出

转换组件:增加序列组件

增加序列组件配置

[外链图片转存中…(img-sUVd4lbQ-1651115484816)]

[外链图片转存中…(img-tyV21yrx-1651115484817)]

字段选择组件

输入:json input

输出:excel输出

转换:字段选择组件

大数据千亿级离线数仓项目第一天 环境部署和etl相关推荐

  1. 大数据千亿级离线数仓项目第五天 指标统计/导出和工作流调度

    千亿级数仓第05天讲义 课程目标 掌握常见指标PV.UV的开发统计 掌握流量常见指标分类 掌握指标数据导出 理解工作流调度流程 模块开发–数据入库 创建ODS层数据表 原始日志数据表 drop tab ...

  2. 电商离线数仓项目实战(下)

    电商离线数仓项目实战(下) 电商分析--核心交易 文章目录 电商离线数仓项目实战(下) 电商分析--核心交易 一.业务需求 二.业务数据库表结构 1. 数据库表之间的联系 img 2. 业务数据库-- ...

  3. 大数据电商离线数仓项目-上篇

    下一篇:电商数仓项目-下篇 文章目录 第1章 数仓分层 1.1 为什么要分层 1.2 数据集市与数据仓库概念 1.3 数仓命名规范 1.3.1 表命名 1.3.2 脚本命名 1.3.3 表字段类型 第 ...

  4. 大数据演进简史:从数仓到数据中台,谈技术选型最优解

    大家好,今天分享的议题主要包括几大内容: 带大家回顾一下大数据在国内的发展,从传统数仓到当前数据中台的演进过程: 我个人认为数据中台的核心组成,以及一些技术选型参考: 数据研发是数据中台很重要的一环, ...

  5. CDH数仓项目(一) —— CDH安装部署搭建详细流程

    0 说明 本文以CDH搭建数据仓库,基于三台阿里云服务器从零开始搭建CDH集群,节点配置信息如下: 节点 内存 安装服务角色 chen102 16G cloudera-scm-server chen1 ...

  6. 大数据电商离线数仓项目-下篇

    上一篇:电商数仓系统1 文章目录 第5章 数仓搭建-DWS层 5.1 业务术语 5.2 系统函数 5.2.1 nvl函数 5.2.2 日期处理函数 5.2.3 复杂数据类型定义 5.3 DWS层 5. ...

  7. 大数据实战之用户画像概念、项目概述及环境搭建

    下面跟着我一起来学习大数据获取用户画像: 项目Profile课程安排 : 用户画像概念 1.用户画像概述 1.1.产生背景 早期的用户画像起源于交互设计之父Alan Cooper提出的"Pe ...

  8. 大数据之离线数仓项目搭建(一)

    数据仓库搭建 文章目录 数据仓库搭建 1.开启hadoop的权限验证 2.在hive中创建数据库 3.在hdfs中创建5个目录 4.在linux中创建5个用户 5.将目录权限赋值给不同用户 6.修改h ...

  9. 大数据-案例-离线数仓-电商:【MySQL(业务)-ETL(Kettle)】+【前端JS埋点->日志->Flume->HDFS->ETL(SparkRDD)】->Hive数仓->MySQL->可视化

    一.电商行业简介 1.电商行业分析 近年来,中国的电子商务快速发展,交易额连创新高,电子商务在各领域的应用不断拓展和深化.相关服务业蓬勃发展.支撑体系不断健全完善.创新的动力和能力 不断增强.电子商务 ...

最新文章

  1. 使用 .NET 框架轻松开发完美的 Web 窗体控件
  2. c++中的void指针和const指针
  3. LeetCode 386. 字典序排数(DFS循环)
  4. 数据库 | MySQL安装与配置
  5. [obc学习日记]3.10
  6. 加密货币的天堂何在?
  7. some formulas for bloging
  8. 使用HTML5,CSS3和jQuery增强网站用户体验
  9. 小孩学计算机编程好吗,小孩子学编程到底有没有用
  10. 某知名大学学生毕业设计, Java学好了就是厉害
  11. 攻城狮还是产品运营?
  12. 计算机关机界面卡住,win7关机卡死在正在关机界面
  13. 扩展欧几里得___追风少年的坐骑(2016swust信息院赛)
  14. 【大数据离线开发】1、大数据准备环境之Linux配置
  15. 3个基于 Spring Boot 的图片识别处理系统
  16. 设计模式之六个创建型模式的相关知识,简单易懂。
  17. CodeForces - 1324D Pair of Topics(二分或双指针)
  18. wxpython 下拉列表的实现
  19. 使用python抓取并分析数据—链家网(requests+BeautifulSoup)(转)
  20. “联想笔记本电脑的电池显示0%,充不进电” 解决方案

热门文章

  1. MOGRT替换视频,图像,照片及LOGO?如何替换PR动态图形模板中的图片视频素材
  2. linux网卡ip自动丢失,重启电脑IP设定丢失的故障处理
  3. html 编辑器编码漏洞,某富文本编辑器文件上传漏洞(小论如何控制IsPostBack的值) | CN-SEC 中文网...
  4. SpringBoot整合Apollo配置中心快速使用
  5. 脉冲神经网络克服了类脑计算的硬件障碍,让AI更节能
  6. the Graph子图部署(使用Hosted Service)
  7. 创始人面对投资人做Pitch十二禁
  8. ucloud中的udisk错误“Read-only file system”修复指南
  9. faceless 开源_Big Faceless Java报表生成器
  10. 将开发板的usb配置为ncm网口(qnx系统)