目录

维度表和事实表

hive on spark配置

测试hive


维度表和事实表

维度表:一般是对事实的描述信息。每一张维表对应现实世界中的一个对象或者概念。    例如:用户、商品、日期、地区等。

维表的特征:

  • 维表的范围很宽(具有多个属性、列比较多)
  • 跟事实表相比,行数相对较小:通常< 10万条
  • 内容相对固定:编码表

事实表中的每行数据代表一个业务事件(下单、支付、退款、评价等)。“事实”这个术语表示的是业务事件的度量值(可统计次数、个数、金额等)

每一个事实表的行包括:具有可加性的数值型的度量值、与维表相连接的外键,通常具有两个和两个以上的外键。

事实表的特征:

  • 非常的大
  • 内容相对的窄:列数较少(主要是外键id和度量值)
  • 经常发生变化,每天会新增加很多。

事务型事实表

每个事务或事件为单位

一旦事务被提交,事实表数据被插入,数据就不再进行更改,其更新方式为增量更新。

适用于不发生变化的项目中。

周期型快照事实表

周期型快照事实表中不会保留所有数据只保留固定时间间隔的数据,例如每天或者每月的销售额,或每月的账户余额等。

累积型快照事实表

累计快照事实表用于跟踪业务事实的变化。例如,数据仓库中可能需要累积或者存储订单从下订单开始,到订单商品被打包、运输、和签收的各个业务阶段的时间点数据来跟踪订单声明周期的进展情况。当这个业务过程进行时,事实表的记录也要不断更新。

hive on spark配置

进入hive,查看环境

[doudou@hadoop102 lib]$ hive
hive (default)> show databases;
OK
database_name
default
Time taken: 0.913 seconds, Fetched: 1 row(s)

在Hive所在节点部署Spark

下载spark

-rw-r--r--. 1 doudou doudou 224453229 9月   1 07:33 spark-3.0.0-bin-hadoop3.2.tgz
-rw-r--r--. 1 doudou doudou 156791324 9月   1 07:33 spark-3.0.0-bin-without-hadoop.tgz
[doudou@hadoop102 software]$ tar -zxvf spark-3.0.0-bin-hadoop3.2.tgz -C /opt/module/
[doudou@hadoop102 module]$ mv spark-3.0.0-bin-hadoop3.2/ spark

配置SPARK_HOME环境变量

[doudou@hadoop102 module]$ sudo vim /etc/profile.d/my_env.sh
# SPARK_HOME
export SPARK_HOME=/opt/module/spark
export PATH=$PATH:$SPARK_HOME/bin

source 使其生效

[doudou@hadoop102 module]$ source /etc/profile.d/my_env.sh

在hive中创建spark配置文件

[doudou@hadoop102 module]$ vim /opt/module/hive/conf/spark-defaults.conf
spark.master                               yarn
spark.eventLog.enabled                   true
spark.eventLog.dir                        hdfs://hadoop102:8020/spark-history
spark.executor.memory                    1g
spark.driver.memory					   1g

在HDFS创建如下路径,用于存储历史日志

[doudou@hadoop102 module]$ hadoop fs -mkdir /spark-history

向HDFS上传Spark纯净版jar

创建目录

[doudou@hadoop102 module]$  hadoop fs -mkdir /spark-jars
[doudou@hadoop102 jars]$ hadoop fs -put ./* /spark-jars

修改hive-site.xml文件

[doudou@hadoop102 conf]$ vim hive-site.xml
<!--Spark依赖位置(注意:端口号8020必须和namenode的端口号一致)-->
<property>
    <name>spark.yarn.jars</name>
    <value>hdfs://hadoop102:8020/spark-jars/*</value>
</property>
  
<!--Hive执行引擎-->
<property>
    <name>hive.execution.engine</name>
    <value>spark</value>
</property>

测试hive

[doudou@hadoop102 conf]$ hive

创建一张测试表

hive (default)> create table student(id int, name string);
OK
Time taken: 1.77 seconds

通过insert测试效果

hive (default)> insert into table student values(1,'abc');
Query ID = doudou_20220901075440_96281170-dedc-49d8-8db3-0ed6f8f24a67
Total jobs = 1
Launching Job 1 out of 1
In order to change the average load for a reducer (in bytes):
  set hive.exec.reducers.bytes.per.reducer=<number>
In order to limit the maximum number of reducers:
  set hive.exec.reducers.max=<number>
In order to set a constant number of reducers:
  set mapreduce.job.reduces=<number>
Running with YARN Application = application_1662042333949_0001
Kill Command = /opt/module/hadoop-3.1.3/bin/yarn application -kill application_1662042333949_0001
Hive on Spark Session Web UI URL: http://hadoop104:35963

Query Hive on Spark job[0] stages: [0, 1]
Spark job[0] status = RUNNING
--------------------------------------------------------------------------------------
          STAGES   ATTEMPT        STATUS  TOTAL  COMPLETED  RUNNING  PENDING  FAILED  
--------------------------------------------------------------------------------------
Stage-0 ........         0      FINISHED      1          1        0        0       0  
Stage-1 ........         0      FINISHED      1          1        0        0       0  
--------------------------------------------------------------------------------------
STAGES: 02/02    [==========================>>] 100%  ELAPSED TIME: 14.26 s    
--------------------------------------------------------------------------------------
Spark job[0] finished successfully in 15.27 second(s)
Loading data to table default.student
OK
col1	col2
Time taken: 68.37 seconds