数据仓库ods层设计_数据仓库建模的流程有几个

数据仓库ods层设计_数据仓库建模的流程有几个当我们的数据采集到hdfs层上之后,我们就开开始对数据进行建模以便后来分析,那么我们整体的架构先放在每个建模层级的最前面所以项目1的将行为数据和业务数据导入到hdfs中我们已经完成了,现在需要的是将hdfs的数据通过ODS层数据建模,初步的分析以及改变,那么我们首先介绍下ODS层的作用因为我们的数据刚落到hdfs上,他还只是单纯的数据,并没有能让我们直接操作。所以我们需要将这些数据放入到能够对数据进行操作的框架中,如我们这个项目采取了使用hive的方法。所以我们此次在ODS层需要做到的就是将hdfs

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

当我们的数据采集到hdfs层上之后,我们就开开始对数据进行建模以便后来分析,那么我们整体的架构先放在每个建模层级的最前面
在这里插入图片描述
在这里插入图片描述

所以项目1的将行为数据和业务数据导入到hdfs中我们已经完成了,现在需要的是将hdfs的数据通过ODS层数据建模,初步的分析以及改变,那么我们首先介绍下ODS层的作用
因为我们的数据刚落到hdfs上,他还只是单纯的数据,并没有能让我们直接操作。所以我们需要将这些数据放入到能够对数据进行操作的框架中,如我们这个项目采取了使用hive的方法。所以我们此次在ODS层需要做到的就是将hdfs上的数据在不丢失数据内容的情况下原封不动的放到hive中。
针对HDFS上的用户行为数据和业务数据,我们如何规划处理?
(1)保持数据原貌不做任何修改,起到备份数据的作用。
(2)数据采用压缩,减少磁盘存储空间(例如:原始数据100G,可以压缩到10G左右)
(3)创建分区表,防止后续的全表扫描
(4)创建外部表。在企业开发中,除了自己用的临时表,创建内部表外,绝大多数场景都是创建外部表。

数仓搭建-ODS层

hive准备

在安装好hive后,我们将hive的运算引擎改为spark,注意这是hive on spark而不是spark on hive,要注意hive和spark的版本兼容问题。然后要安装好有spark
一切没问题后,我们去hive的conf目录内添加关于spark的配置文件,添加后我们hive的运算引擎就变成spark
在这里插入图片描述
在这里插入图片描述
然后为了能看spark运行效果,还需要在hdfs中给一个路径,用于存储历史日志
在这里插入图片描述
然后又因为在安装spark时,安装的spark中就自带hadoop的jar包(因为某些spark运行需要hadoop依赖),并不是纯净版的spark的jar包,且这个自带的hadoop的jar包还自带一些hive的jar包;直接使用会和安装的Hive3.1.2出现兼容性问题。所以采用Spark纯净版jar包,不包含hadoop和hive相关依赖,避免冲突。
这里展示下怎么在官网下载纯净版spark,进入官网后点击Downloads
在这里插入图片描述
选择需要用户提供hadoop依赖的这个版本,可以看到底下有一个没hadoop依赖的jar包
在这里插入图片描述
解压后将这个没hadoop依赖的spark包下的jars包传给hive,那么怎么能传给hive让它使用呢。因为Hive任务最终由Spark来执行,Spark任务资源分配由Yarn来调度,该任务有可能被分配到集群的任何一个节点。所以需要将Spark的依赖上传到HDFS集群路径,这样集群中任何一个节点都能获取到。并且在hive的配置文件中设置路径为这个依赖。
首先在hdfs中创建目录
在这里插入图片描述
然后将纯净的spark的jars依赖上传到hdfs上的spark-jars
在这里插入图片描述
然后检查下是否导入成功
在这里插入图片描述
可以看见有146条,但是我们在linux中可以通过wc -l可以检查条数发现是147条
在这里插入图片描述
这是因为我们通过ll显示时,会在最上面自动添加一条信息总容量
在这里插入图片描述
所以纯净版spark依赖顺利导入到hdfs
然后我们要修改hive的依赖文件,确保hive能找到纯净版spark依赖
在这里插入图片描述

然后我们在hive中随便创建个表,插入一条数据,让它跑一下运算引擎,测试一下是否是spark
在这里插入图片描述
在这里插入图片描述
因为是第一次使用spark引擎,会建立spark session,所以用的时间会比较长;之后在使用就会很快了
在这里插入图片描述
这个时候我们上yarn看一眼,可以看到hive on spark,且这个任务只要hive不关就一直占住yarn的队列,一直是running的状态,说明配置成功
在这里插入图片描述
这个时候我们如果在跑一个hadoop提交MR的任务就会发现任务卡住;MR任务同样未指定队列,所以其默认也提交到了default队列,由于容量调度器单个队列的并行度为1。故后提交的MR任务会一直等待,不能开始执行。
在这里插入图片描述
容量调度器default队列中,同一时间只有一个任务执行,并发度低,如何解决呢?

yarn多队列问题

方案一:增加ApplicationMaster资源比例,进而提高运行app数量。
方案二:创建多队列,比如增加一个hive队列。
首先我们要明白的问题是,yarn默认的是容量调度器,也就是可以多队列调度,每个队列用的是FIFO。但是我们默认的是只有一个队列,就是FIFO。当我们的MR任务跑起来的时候,其实已经被调度了,但是没有ApplicationMaster资源去让其运行,并不是它没有被调度。一条队列即使是FIFO也能跑多个任务。

方案一:在hadoop102的/opt/module/hadoop-3.1.3/etc/Hadoop/capacity-scheduler.xml文件中修改如下参数值

yarn.scheduler.capacity.maximum-am-resource-percent
0.5

方案二:创建多队列,也可以增加容量调度器的并发度。(见ppt)

连接hive并建表

hive的配置已经没问题了,我们开始用hive连接工具,连接hive并建表。这里我们使用DataGrip这个软件连接,注意的是一个Console相当一一个客户端,在这个Console里设置的参数只在这个Console有效
这里提一个小问题

关于hive中的中文注释乱码问题解决

当我们创建hive表的时候,使用中文注释的话,通过desc查看表的信息时,会发现表的注释全是问号
在这里插入图片描述
这是因为我们hive配置表的元数据放到mysql中存储,mysql中默认表被创建的时候用的是默认的字符集(latin1),所以会出现中文乱码
解决方案:
(1)在Hive元数据存储的Mysql数据库(MetaStore)中,执行以下SQL:

#修改字段注释字符集
alter table COLUMNS_V2 modify column COMMENT varchar(256) character set utf8;
#修改表注释字符集
alter table TABLE_PARAMS modify column PARAM_VALUE varchar(20000) character set utf8;
#修改分区参数,支持分区建用中文表示
alter table PARTITION_PARAMS modify column PARAM_VALUE varchar(20000) character set utf8;
alter table PARTITION_KEYS modify column PKEY_COMMENT varchar(20000) character set utf8;
#修改索引名注释,支持中文表示
alter table INDEX_PARAMS modify column PARAM_VALUE varchar(4000) character set utf8;
#修改视图,支持视图中文
ALTER TABLE TBLS modify COLUMN VIEW_EXPANDED_TEXT mediumtext CHARACTER SET utf8;
ALTER TABLE TBLS modify COLUMN VIEW_ORIGINAL_TEXT mediumtext CHARACTER SET utf8;

(2)修改hive-site.xml中Hive读取元数据的编码,在原来的配置上修改

<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://hadoop102:3306/metastore?useSSL=false&amp;useUnicode=true&amp;characterEncoding=UTF-8</value>
</property>

注意的是,之前创建的表的元数据已经损坏了,所以无法恢复中文乱码,只能重新创建表
在这里插入图片描述

创建行为日志表ods_log

首先我们要通过创表语句创建hive的表为数据到来做准备,而log数据都是json文件,那么我们就放一个String字段,这个字段直接放整个json。并且使用时间分区表创建

drop table if exists ods_log;
CREATE EXTERNAL TABLE ods_log (`line` string)
PARTITIONED BY (`dt` string) -- 按照时间创建分区
STORED AS -- 指定存储方式,读数据采用LzoTextInputFormat
  INPUTFORMAT 'com.hadoop.mapred.DeprecatedLzoTextInputFormat'
  OUTPUTFORMAT 'org.apache.hadoop.hive.ql.io.HiveIgnoreKeyTextOutputFormat'
LOCATION '/warehouse/gmall/ods/ods_log' --指定数据在hdfs上的存储位置
;

解析:
(1)使用external创建外部表,保护数据
(2)PARTITIONED BY (dt string),创建时间分区表
(3)STORED AS,设定这个表load是读数据的inputformat格式和存储数据格式
(4)LOCATION 指定数据在hdfs上的存储位置

关于第三点解析:
我们可以通过 show create table 表明来查看某个表的详细数据
在这里插入图片描述
可以看见它的读取和储存数据都是text格式,也就是我们直接能读懂的方法。
但是我们在上传log数据时,使用了lzo压缩,那么怎么更改INPUTFORMAT呢?可以上官网找一下,直接搜hive lzo
在这里插入图片描述
第一个便是然后我们看它怎么解决的
在这里插入图片描述
照抄即可,于是我们建好了ods_log表。
在这里插入图片描述
然后我们将原本在hdfs上的log数据加载进这个hive表中

load data inpath '/origin_data/gmall/log/topic_log/2020-06-14' into table ods_log partition(dt='2020-06-14');

注意:时间格式都配置成YYYY-MM-DD格式,这是Hive默认支持的时间格式
然后为lzo压缩文件创建索引
hadoop jar /opt/module/hadoop-3.1.3/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer -Dmapreduce.job.queuename=hive /warehouse/gmall/ods/ods_log/dt=2020-06-14

那么ods层的行为数据就完事了,接下来时业务数据

创建业务数据表

首先因为我们mysql中导出的数据,所以他已经是表的格式了,那么我们再创建hive表的时候可以借鉴它的mysql表的格式,我们可以通过mysql连接工具的sql导出,来转储sql,得到它的sql建表语句
在这里插入图片描述
在这里插入图片描述
所以这就是mysql中对这个表的建表语句,完全可以借鉴到hive建表语句中

具体建表语句看ppt
然后再通过脚本将数据load上去就完成了ODS层的数仓搭建

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

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/188506.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • adfs是什么_培训与开发的概念

    adfs是什么_培训与开发的概念(如您转载本文,必须标明本文作者及出处。如有任何疑问请与我联系me@nap7.com)ADFS相关开发技术的中文资料相对匮乏,之前在弄这个东西的时候搞的比较辛苦,因此总结此文档,以解后人之忧。本文会首先介绍与联合身份验证有关的概念及相关的系统设计意图,随后会对ADFS联合身份验证的配置过程、结构及处理流程进行阐述。然后会基于已有的系统提出一个支持多ADFS联合身份验证的改进实例…

    2022年10月27日
    0
  • Linux文件操作高频使用命令

    Linux文件操作高频使用命令文章目录0.新建操作:1.查看操作2.删除操作3.复制操作4.移动操作:5.重命名操作:6.解压压缩操作0.新建操作:mkdirabc#新建一个文件夹touchabc.sh#新建一个文件1.查看操作查看目录:ll#显示目录文件详细信息查看文件内容:cat|head|tail命令catabc.txt#查看abc的内容head-5abc.txt#…

    2022年5月1日
    52
  • 绘制图形的视图方式为_三角函数图象的平移变换

    绘制图形的视图方式为_三角函数图象的平移变换iOS Programming – Views(视图 – 基本绘制,变换,平移,旋转,反转,倾斜)

    2022年4月21日
    54
  • 有赞和腾讯云、阿里云一同摘得“中国企业云科技服务商50强”[通俗易懂]

    有赞和腾讯云、阿里云一同摘得“中国企业云科技服务商50强”[通俗易懂]互联网时代的每一次技术变革都带来新的机会,而云计算这一诞生于2006年的新技术正在引领新的科技浪潮。正是从2006年开始,众多云计算公司借助云计算的东风,成长为数十亿、上百亿甚至超千亿美元市值的科技公司。亚马逊就是在2006年转向云计算之后,用十年时间成长为一家万亿美元市值的公司。在亚马逊之后,Salesforce也稳稳站上了千亿美元市值。而ServiceNow、Workday、Veeva、Shopify则在向500亿美元关口冲刺。紧随其后的是大量数十亿美元市值的云计算公司,它们分布在企业服务的…

    2022年6月15日
    48
  • PHP OpenSSL扩展 – 对称加密

    PHP OpenSSL扩展 – 对称加密

    2022年2月14日
    34
  • mysql5.7安装及配置超详细教程_mysql安装教程 linux

    mysql5.7安装及配置超详细教程_mysql安装教程 linuxMySQL5.7.35安装教程下载工具官网下载下载在下图中选择你自己需要的版本即可第二种下载方式如下图所示下载下载完成后对工具包进行解压,我解压的在D盘解压好过后在里面新建my.ini文件(如果你不知道怎么创建my.ini文件请看)右击新建文本文档创建文本文档过后进行重命名讲文本文档的后缀名改为ini如图操作再将新建的文本文档改名为my.ini编辑my.ini文件将下面的代码复制进去记得更改里面【basedir】【datadir】的路径为你自己的安装路径[mysqld]#

    2022年8月22日
    11

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号