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