当我们的数据采集到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条