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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/web/91811.shtml
繁体地址,请注明出处:http://hk.pswp.cn/web/91811.shtml
英文地址,请注明出处:http://en.pswp.cn/web/91811.shtml

如若内容造成侵权/违法违规/事实不符,请联系英文站点网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深入 Go 底层原理(六):垃圾回收(GC)

1. 引言Go 语言自带垃圾回收&#xff08;Garbage Collection, GC&#xff09;&#xff0c;让开发者从手动管理内存的繁重任务中解脱出来。Go 的 GC 以其低延迟和并发性而闻名&#xff0c;其目标是在不长时间暂停&#xff08;Stop The World, STW&#xff09;整个程序的情况下完…

专网内网IP攻击防御:从应急响应到架构加固

内网IP攻击防御&#xff1a;从应急响应到架构加固内网IP攻击的隐蔽性远超外网威胁&#xff0c;其本质是信任边界内的权限滥用。应对需遵循"识别-隔离-溯源-加固"四步法则&#xff0c;兼顾应急止损与长效防御。应急处置&#xff1a;30分钟响应窗口1. 流量阻断&#xf…

Git、Gitee、GitHub、GitLab完整讲解:从基础到进阶

第一部分&#xff1a;Git是什么&#xff1f; &#x1f4da;比喻&#xff1a;Git就像是一本"时光日记本" ✅ 每一段代码的改动&#xff0c;Git都会帮你记录下来&#xff0c;像是在写日记。 ✅ 如果出现问题或者想查看之前的版本&#xff0c;Git可以带你"穿越回…

WinForm之CheckBox 控件

CheckBox&#xff08;复选框&#xff09;是 WinForm 中用于实现 “多项选择” 的控件&#xff0c;允许用户从一组选项中选择任意数量的项&#xff08;包括零项、一项或多项&#xff09;&#xff0c;适用于需要同时选择多个选项的场景&#xff08;如爱好、权限设置、功能开关等&…

鲸鱼优化算法(Whale Optimization Algorithm, WOA)是一种受座头鲸捕食行为启发的群体智能优化算法,由Seyedali Mirjalili于2016年提出

鲸鱼优化算法(Whale Optimization Algorithm, WOA)是一种受座头鲸捕食行为启发的群体智能优化算法,由Seyedali Mirjalili于2016年提出。 它通过模拟鲸鱼的狩猎策略(特别是“气泡网捕食”行为)来解决优化问题,广泛应用于函数优化、工程设计、机器学习参数优化等领域。以下…

信息量,惊奇度,熵、KL散度(相对熵),交叉熵、最大似然估计MLE与最小化交叉熵的等价证明、

一&#xff1a; 一些基本概念 1.1 信息量:特定事件所携带的信息多少信息量衡量的是特定事件所携带的信息多少&#xff0c;其数学定义为&#xff1a;其中p(x)是事件x发生的概率。核心思想&#xff1a;越罕见的事件&#xff0c;其携带的信息量越大&#xff1b;越常见的事件&#…

VBA 64位API声明语句第012讲

跟我学VBA&#xff0c;我这里专注VBA, 授人以渔。我98年开始&#xff0c;从源码接触VBA已经20余年了&#xff0c;随着年龄的增长&#xff0c;越来越觉得有必要把这项技能传递给需要这项技术的职场人员。希望职场和数据打交道的朋友&#xff0c;都来学习VBA,利用VBA,起码可以提高…

深入理解Java中String.intern()方法:从原理到并发控制实践

深入理解 Java 中 String.intern () 方法&#xff1a;从原理到并发控制实践 在 Java 开发中&#xff0c;String.intern()方法是一个看似简单却蕴含深意的 API。它在字符串常量池管理、内存优化以及并发控制等场景中有着关键作用。本文将从底层原理出发&#xff0c;结合实际案例…

在Linux中创建LVGL应用

在Linux中创建LVGL应用 简介 上一篇文章介绍了在imx6上开发UI的流程 . 这篇接上文&#xff0c; 介绍具体的开发步骤。 1. 创建项目主目录 mkdir my_lvgl_project cd my_lvgl_project2. 初始化 Git 仓库 (可选但推荐) git init echo "# My Project with Dependencies&…

大模型对比评测:Qwen2.5 VS Gemini 2.0谁更能打?

一、背景与选型关键 在 AI 应用落地的时代&#xff0c;“AI大模型选型对比”成为关键环节。选择合适的模型要综合考量性能、上下文长度、推理能力、中文/编程支持、成本等多维度指标。 本文重点比较 Gemini2.0Flash-Lite &#xff08;Preview&#xff09;、Gemini2.0Flash &a…

转置卷积解释与示例计算

文章目录转置卷积的三种等价实现方法&#xff1a;原理、公式与等价性分析数学定义与核心公式方法一&#xff1a;零填充翻转核卷积&#xff08;数学定义方法&#xff09;原理与公式等价性说明方法二&#xff1a;直接位置映射&#xff08;pytorch框架高效实现&#xff09;原理与公…

关于车位引导及汽车乘梯解决方案的专业性、系统性、可落地性强的综合设计方案与技术实现说明,旨在为现代智慧停车楼提供高效、安全、智能的停车体验。

一、系统概述随着城市土地资源日益紧张&#xff0c;立体停车、自动化停车成为发展趋势。本方案围绕“车位引导系统 汽车乘梯系统”构建智慧停车核心体系&#xff0c;结合地磁/视频/超声波检测、AI识别、语音交互、电梯自动调度等先进技术&#xff0c;实现车辆入场、引导、停泊…

【相机】曝光时间长-->拖影

曝光时间长 → 运动目标在快门开启期间持续移动 → 同一像素记录多个位置的能量 → 图像出现“拖影”&#xff08;运动模糊&#xff09;。&#x1f50d; 具体原因卷帘快门&#xff08;Rolling Shutter&#xff09;效应 RealSense 的 RGB 传感器&#xff08;如 IMX 系列&#xf…

day36 力扣1049.最后一块石头的重量II 力扣494.目标和 力扣474.一和零

最后一块石头的重量II有一堆石头&#xff0c;用整数数组 stones 表示。其中 stones[i] 表示第 i 块石头的重量。每一回合&#xff0c;从中选出任意两块石头&#xff0c;然后将它们一起粉碎。假设石头的重量分别为 x 和 y&#xff0c;且 x < y。那么粉碎的可能结果如下&#…

Java内存模型(Java Memory Model,JMM)

​​ JMM​​ 是Java虚拟机&#xff08;JVM&#xff09;规范中定义的一组规则和规范&#xff0c;用于描述多线程环境下&#xff0c;Java程序中变量的访问和修改行为&#xff0c;尤其是在并发编程中如何保证内存可见性、原子性和有序性。JMM 是 Java 并发编程的基石&…

【swoole Windows 开发(swoole-cli 开发 hyperf)】

先前swoole在Windows平台的开发体验极差&#xff0c;如果在Windows开发swoole的东西可以用docker或者虚拟机&#xff0c;远程开发&#xff0c;体验比较好的是直接Mac或者Linux系统开发。但是作为window平台的钉子户表示我穷。swoole之前已经推出了cygwin64编译成winwods版本的方…

兴达餐饮 酒店 进销存管理系统软件

兴达餐饮 酒店 进销存管理系统软件

Seal Report:一款免费开源的报表工具

Seal Report 是一款基于 C# 语言开发的开源报表工具&#xff0c;可以从各种数据库或 NoSQL 数据源中生成日常报告&#xff0c;并且执行复杂的计划任务。 功能特性 免费开源&#xff1a;源代码托管在 GitHub 上&#xff0c;用户可以自由使用、修改、甚至集成到自己的系统中&…

WebRTC 多媒体 SDP 示例与解析

webRTC中的SDP的Bundlle可能包含一个或者多个媒体块&#xff08;媒体描述, 源码对应类ContentInfo&#xff09;&#xff0c;从 m 开始到下一个 m 行&#xff08;或 SDP 结束&#xff09;之间的所有属性&#xff08;包括 a&#xff09;都属于同一个媒体块&#xff08;media sect…

SpringBoot 启动富文本文字更改

正常来说 SpringBoot启动时候&#xff0c;展示的文字是这个 、 主播这边想要换一个样式&#xff0c;换一个自己自定义的文字 这边换成了自己的博客名字 具体实现操作如下 在项目目录 resources下创建一个名字为banner.txt的文本&#xff0c;这是SpringBoot启动的时候寻找的…