数据仓库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层的数仓搭建

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

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

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • 一分钟解决Chrome浏览器主页被hao123、360和2345篡改简单有效方法[通俗易懂]

    一分钟解决Chrome浏览器主页被hao123、360和2345篡改简单有效方法[通俗易懂]当你打开浏览器看到各种首页跳转的页面,对于强迫症的我是不能接受的!各种情况都碰到了,现在给出解决方法。按照下面的方式去排查就可以一定能解决你的问题,如果不行的话你来打我呀–!。如果问题解决了希望你能推荐给其他人。方式一   查看chrom浏览器的快捷方式后面是否有小尾巴,去掉就可以。如下:方式二   查找到源程序位置,修改源文件的文件名。然后删除旧的快捷方式,重新将改名后

  • intellij idea激活码2021(JetBrains全家桶)「建议收藏」

    (intellij idea激活码2021)好多小伙伴总是说激活码老是失效,太麻烦,关注/收藏全栈君太难教程,2021永久激活的方法等着你。IntelliJ2021最新激活注册码,破解教程可免费永久激活,亲测有效,下面是详细链接哦~https://javaforall.cn/100143.html41MD9IQHZL-eyJsaWNlbnNlSWQi…

  • 织梦中data文件夹是存放什么内容的

    织梦中data文件夹是存放什么内容的

  • Mac新手使用技巧——Mac如何强制关机

    Mac新手使用技巧——Mac如何强制关机一般情况下,Mac电脑是非常稳定的,但是偶尔也会碰到应用程序没有响应或死机的情况,那么我们需要强制关机,Mac如何强制关机呢?一起来看看吧!1.如果是电脑打开了太多的应用程序造成了没有响应,可以按Command+Q来强制退出。2.如果还是没有反应,很多人喜欢像windows电脑那样按电源键5秒进行强制关机。(这其实是有损坏系统文件的风险)3.如果要采用这种强制切断电源的方法,最好是同时按住control+command+电源键,这样也可以强制关闭电脑,并且不会损坏系统。4.一般关机都是点

  • visio2010最新密钥

    2V3PD-3YMPX-FJG7R-4W49V-M92KH截止2011年6月22日16点,此KEY还有最后110 次可激活。MKBGD-BWJMW-TJQR6-J8DH6-Q8M6B截止2011年6月22日16点,此KEY还有最后 131 次可激活。 892K6-6VDJR-67BCX-V26YV-K2T2K截止2011年6月22日16点,此KEY还有最后 4328 次可激

  • Linux rsync同步操作和inotify实时同步 、 Cobbler装机平台 (SERVICE06—-DAY21)[通俗易懂]

    Linux rsync同步操作和inotify实时同步 、 Cobbler装机平台 (SERVICE06—-DAY21)[通俗易懂]rsync同步操作•命令用法–rsync[选项…]源目录目标目录•同步与复制的差异–复制:完全拷贝源到目标–同步:增量拷贝,只传输变化过的数据同步控制•rsync操作选项–-n:测试同步过程,不做实际修改––delete:删除目标文件夹内多余的文档–-a:归档模式,相当于-rlptgoD–-v:显示详细操作信息–-z:传输过程中启用压缩/解…

发表回复

您的电子邮箱地址不会被公开。

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