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

发布于:2025-08-03 ⋅ 阅读:(13) ⋅ 点赞:(0)

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

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

1. 设置Hadoop集群

首先,你需要有一个运行中的Hadoop集群。以下是基本的安装步骤:
安装Java
Hadoop需要Java环境,确保所有节点上都安装了Java。

sudo apt-get update
sudo apt-get install default-jdk

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

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。

<!-- 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:

../sbin/hdfs namenode -format
../sbin/start-dfs.sh

2. 安装Hive

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

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
复制模板配置文件并进行必要的修改。

cp hive-env.sh.template hive-env.sh
cp hive-default.xml.template hive-site.xml

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

export HADOOP_HOME=/path/to/hadoop-3.3.4

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

<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数据库:

schematool -initSchema -dbType derby

启动Hive CLI:

bin/hive

3. 设计数据仓库架构

Hive数仓通常采用分层架构,常见的分层结构包括ODS(Operational Data Store)、DWD(Data Warehouse Detail)、DWS(Data Warehouse Summary)、ADS(Application Data Service)和DM(Data Mart)。
ODS层
存放原始数据,保持数据原貌,不做任何清洗和转换。

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层的数据进行清洗和标准化处理。

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层的数据进行聚合操作,生成汇总数据。

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层
为特定应用或报告提供数据服务。

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层
为特定业务部门提供定制化的数据分析结果。

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任务。

#!/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 并赋予执行权限:

chmod +x etl_for_hive_script.sh

运行脚本:

./etl_for_hive_script.sh

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


网站公告

今日签到

点亮在社区的每一天
去签到