Hive数仓部署/分层/ETL脚本基础指南

部署Hive数仓及分层基础指南

部署和构建一个Hive数仓涉及多个步骤,包括设置Hadoop集群、配置Hive、设计数据仓库架构以及实现ETL(Extract, Transform, Load)过程。下面是一个详细的指南,帮助你完成这些步骤。

1. 设置Hadoop集群

首先,你需要有一个运行中的Hadoop集群。以下是基本的安装步骤:

安装Java

Hadoop需要Java环境,确保所有节点上都安装了Java。

bash 复制代码
sudo apt-get update
sudo apt-get install default-jdk

下载并解压Hadoop

从Apache官方网站下载Hadoop,并解压到合适的位置。

bash 复制代码
wget https://downloads.apache.org/hadoop/common/hadoop-3.3.4/hadoop-3.3.4.tar.gz
tar -xzvf hadoop-3.3.4.tar.gz
cd hadoop-3.3.4/etc/hadoop

配置Hadoop

编辑 core-site.xmlhdfs-site.xml 文件来配置Hadoop。

xml 复制代码
<!-- core-site.xml -->
<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>
</configuration>

<!-- hdfs-site.xml -->
<configuration>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
</configuration>

启动HDFS:

bash 复制代码
../sbin/hdfs namenode -format
../sbin/start-dfs.sh

2. 安装Hive

下载并解压Hive

从Apache官方网站下载Hive,并解压到合适的位置。

bash 复制代码
wget https://downloads.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz
tar -xzvf apache-hive-3.1.3-bin.tar.gz
cd apache-hive-3.1.3-bin/conf

配置Hive

复制模板配置文件并进行必要的修改。

bash 复制代码
cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml

编辑 hive-env.sh 来设置HADOOP_HOME:

bash 复制代码
export HADOOP_HOME=/path/to/hadoop-3.3.4

编辑 hive-site.xml 来配置元存储数据库。这里假设使用Derby作为嵌入式数据库。

xml 复制代码
<configuration>
    <property>
        <name>javax.jdo.option.ConnectionURL</name>
        <value>jdbc:derby:;databaseName=metastore_db;create=true</value>
    </property>
    <property>
        <name>javax.jdo.option.ConnectionDriverName</name>
        <value>org.apache.derby.jdbc.EmbeddedDriver</value>
    </property>
</configuration>

初始化Metastore数据库:

bash 复制代码
schematool -initSchema -dbType derby

启动Hive CLI:

bash 复制代码
bin/hive

3. 设计数据仓库架构

Hive数仓通常采用分层架构,常见的分层结构包括ODS(Operational Data Store)、DWD(Data Warehouse Detail)、DWS(Data Warehouse Summary)、ADS(Application Data Service)和DM(Data Mart)。

ODS层

存放原始数据,保持数据原貌,不做任何清洗和转换。

sql 复制代码
CREATE DATABASE IF NOT EXISTS ods;
USE ods;
CREATE EXTERNAL TABLE raw_logs (
    log_id STRING,
    user_id STRING,
    event_time TIMESTAMP,
    action STRING
)
ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t'
STORED AS TEXTFILE
LOCATION '/user/hive/warehouse/ods/raw_logs';

DWD层

对ODS层的数据进行清洗和标准化处理。

sql 复制代码
CREATE DATABASE IF NOT EXISTS dwd;
USE dwd;
CREATE TABLE cleaned_logs (
    log_id STRING,
    user_id STRING,
    event_time TIMESTAMP,
    action STRING
);
INSERT INTO TABLE cleaned_logs
SELECT 
    log_id, 
    user_id, 
    event_time, 
    action
FROM 
    ods.raw_logs
WHERE 
    user_id IS NOT NULL AND action IS NOT NULL;

DWS层

对DWD层的数据进行聚合操作,生成汇总数据。

sql 复制代码
CREATE DATABASE IF NOT EXISTS dws;
USE dws;
CREATE TABLE daily_user_actions (
    user_id STRING,
    event_date DATE,
    total_actions INT
);
INSERT INTO TABLE daily_user_actions
SELECT 
    user_id, 
    DATE(event_time) AS event_date, 
    COUNT(*) AS total_actions
FROM 
    dwd.cleaned_logs
GROUP BY 
    user_id, 
    DATE(event_time);

ADS层

为特定应用或报告提供数据服务。

sql 复制代码
CREATE DATABASE IF NOT EXISTS ads;
USE ads;
CREATE TABLE top_users_by_actions (
    user_id STRING,
    total_actions INT
);
INSERT INTO TABLE top_users_by_actions
SELECT 
    user_id, 
    SUM(total_actions) AS total_actions
FROM 
    dws.daily_user_actions
GROUP BY 
    user_id
ORDER BY 
    total_actions DESC
LIMIT 100;

DM层

为特定业务部门提供定制化的数据分析结果。

sql 复制代码
CREATE DATABASE IF NOT EXISTS dm;
USE dm;
CREATE TABLE marketing_user_engagement (
    user_id STRING,
    first_event_date DATE,
    last_event_date DATE,
    total_events INT
);
INSERT INTO TABLE marketing_user_engagement
SELECT 
    user_id, 
    MIN(event_date) AS first_event_date, 
    MAX(event_date) AS last_event_date, 
    SUM(total_actions) AS total_events
FROM 
    dws.daily_user_actions
GROUP BY 
    user_id;

4. 实现ETL过程

ETL过程可以通过脚本自动化,例如使用Shell脚本调用HiveQL命令。

示例ETL脚本

创建一个Shell脚本来执行ETL任务。

bash 复制代码
#!/bin/bash
清洗日志数据
hive -e "
USE dwd;
INSERT OVERWRITE TABLE cleaned_logs
SELECT 
    log_id, 
    user_id, 
    event_time, 
    action
FROM 
    ods.raw_logs
WHERE 
    user_id IS NOT NULL AND action IS NOT NULL;
"
聚合每日用户动作
hive -e "
USE dws;
INSERT OVERWRITE TABLE daily_user_actions
SELECT 
    user_id, 
    DATE(event_time) AS event_date, 
    COUNT(*) AS total_actions
FROM 
    dwd.cleaned_logs
GROUP BY 
    user_id, 
    DATE(event_time);
"
计算顶级用户
hive -e "
USE ads;
INSERT OVERWRITE TABLE top_users_by_actions
SELECT 
    user_id, 
    SUM(total_actions) AS total_actions
FROM 
    dws.daily_user_actions
GROUP BY 
    user_id
ORDER BY 
    total_actions DESC
LIMIT 100;
"

保存上述脚本为 etl_for_hive_script.sh 并赋予执行权限:

bash 复制代码
chmod +x etl_for_hive_script.sh

运行脚本:

bash 复制代码
./etl_for_hive_script.sh

总结

以上步骤涵盖了从Hadoop集群安装到Hive数仓的设计和部署的基本流程。根据你的具体需求,可能还需要进一步调整和优化每个步骤。希望这个指南对你有所帮助!

相关推荐
B站计算机毕业设计超人5 天前
计算机毕业设计Django+Vue.js高考推荐系统 高考可视化 大数据毕业设计(源码+LW文档+PPT+详细讲解)
大数据·vue.js·hadoop·django·毕业设计·课程设计·推荐算法
B站计算机毕业设计超人5 天前
计算机毕业设计Django+Vue.js音乐推荐系统 音乐可视化 大数据毕业设计 (源码+文档+PPT+讲解)
大数据·vue.js·hadoop·python·spark·django·课程设计
十月南城5 天前
数据湖技术对比——Iceberg、Hudi、Delta的表格格式与维护策略
大数据·数据库·数据仓库·hive·hadoop·spark
王九思5 天前
Hive Thrift Server 介绍
数据仓库·hive·hadoop
土拨鼠烧电路5 天前
笔记11:数据中台:不是数据仓库,是业务能力复用的引擎
数据仓库·笔记
Asher05095 天前
Hive核心知识:从基础到实战全解析
数据仓库·hive·hadoop
xhaoDream5 天前
Hive3.1.3 配置 Tez 引擎
大数据·hive·tez
yumgpkpm5 天前
AI视频生成:Wan 2.2(阿里通义万相)在华为昇腾下的部署?
人工智能·hadoop·elasticsearch·zookeeper·flink·kafka·cloudera
Asher05095 天前
Hadoop核心技术与实战指南
大数据·hadoop·分布式