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数仓的设计和部署的基本流程。根据你的具体需求,可能还需要进一步调整和优化每个步骤。希望这个指南对你有所帮助!

相关推荐
没见过西瓜嘛3 小时前
数据仓库、数据湖与湖仓一体技术笔记
数据仓库·笔记
非极限码农4 小时前
Hive SQL (HQL) 编辑指南
hive·hadoop·sql
cici158749 小时前
linux中HADOOP_HOME和JAVA_HOME删除后依然指向旧目录
java·linux·hadoop
lifallen12 小时前
hadoop.yarn 带时间的LRU 延迟删除
java·大数据·数据结构·hadoop·分布式·算法
哈哈很哈哈1 天前
Hadoop JMX 配置的完整文档
大数据·hadoop·分布式
Dragon online1 天前
数据仓库深度探索系列:架构选择与体系构建
大数据·数据仓库·分布式·架构·spark·大数据架构·数仓架构
数据要素X1 天前
【数据架构08】数字化转型架构篇
大数据·数据库·数据仓库·架构·数据库架构
jzy37111 天前
国产化适配鲲鹏arm环境:hive on tez 单节点部署实践总结
linux·hadoop·apache hive
zhangjin12222 天前
kettle插件-kettle http client plus插件,轻松解决https接口无法调用&文件流下载问题
大数据·http·https·etl·kettle·kettle教程·kettle插件