基于Hadoop、hive的数仓搭建实践
文章目录
- 架构图
- Hadoop搭建
- Hive 搭建
- MySQL搭建
- 官网文档
- 下载
- 配置
- 配置hive环境变量
- 配置日志文件
- 配置hive-site
- 复制mysql 驱动包
- 删除日志包
- 初始化元数据
- 启动metastore服务
- 使用hive CLI
- 启动hiveServer2
- 访问hiveserver2
- 客户端连接
- beeline shell连接
- Dbeaver连接
- 经验
基于HDFS + Hive+mysql搭建离线数仓,最终效果能够通过可视化界面访问数仓数据
架构图
其中,
1 hive 服务包括 metastore元数据 服务和 hiveserver2服务
2 启动metastore元数据服务,metastore元数据存储在MySQL中
3 在metastore服务基础上再启动hiveserver2服务,即可通过代码、客户端、beeline shell去链接hive
4 建的库表存储到hdfs中
Hadoop搭建
由于资源不足,搭建伪分布式,利用Hadoop的HDFS分布式存储功能,可以查看搭建教程
由于资源限制 hadoop环境搭建使用的是 hadoop 用户。
参见Hadoop3.2.1安装-单机模式和伪分布式模式
Hive 搭建
Hive是一个分布式的、支持容错的数仓系统,用于大量数据分析。HMS提供了一个元数据仓库,可以很容易进行数据分析和数据驱动决策。是很多数据湖架构使用的重要的组件。Hive是基于Hadoop,可以利用HDFS存储。支持用户通过SQL语言管理数据。
MySQL搭建
搭建数仓,需要先搭建MySQL,这里不再赘述。
官网文档
https://hive.apache.org/development/gettingstarted/
下载
https://archive.apache.org/dist/hive/
这里选择的是Hive4.0版本
下载bin.tar.gz包,解压
配置
配置hive环境变量
vi /etc/profile
增加如下代码
# Hive
export HIVE_HOME=/home/datahouse/hive-4.0.0
export PATH=$PATH:$HIVE_HOME/bin
保存后,执行刷新命令
source /etc/profile
配置日志文件
# 进入配置文件目录
cd /home/datahouse/hive-4.0.0/conf
将hive-log4j2.properties.template 配置文件复制成 hive-log4j2.properties
并修改配置文件:
#配置日志路径
property.hive.log.dir = /home/datahouse/hive-4.0.0/logs
property.hive.log.file = hive.log
配置hive-site
进入到解压目录(安装目录)
# 进入到配置文件目录
cd /home/datahouse/hive-4.0.0/conf
新建 hive-site.xml文件,增加如下配置内容:
<configuration><!-- 指定存储元数据存储的数据库 --><property><name>javax.jdo.option.ConnectionURL</name><value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8&useSSL=false</value></property><property><name>javax.jdo.option.ConnectionDriverName</name><value>com.mysql.jdbc.Driver</value></property><property><name>javax.jdo.option.ConnectionUserName</name><value>root</value></property><property><name>javax.jdo.option.ConnectionPassword</name><value>xxxx</value></property><!-- 指定存储元数据要连接的地址 --><property><name>hive.metastore.uris</name><value>thrift://127.0.0.1:9083</value><description>URI for client to connect to metastore server</description></property><!-- 指定hiveserver2连接的host --><property><name>hive.server2.thrift.bind.host</name><value>yd-ss</value></property><!-- 指定hiveserver2连接的端口号 --><property><name>hive.server2.thrift.port</name><value>10000</value></property><!-- hiveserver2的高可用参数,如果不开会导致了开启tez session导致hiveserver2无法启动 --><property><name>hive.server2.active.passive.ha.enable</name><value>false</value></property><!--解决Error initializing notification event poll问题--><property><name>hive.metastore.event.db.notification.api.auth</name><value>false</value></property><property><name>tez.mrreader.config.update.properties</name><value>hive.io.file.readcolumn.names,hive.io.file.readcolumn.ids</value></property><!--配置默认计算引擎为mr--><property><name>hive.execution.engine</name><value>mr</value></property><!--配置HDFS数据目录--><property><name>hive.metastore.warehouse.dir</name><value>/home/datahouse/hive/warehouse</value></property>
</configuration>
其中,hive.metastore.warehouse.dir 目录,得是hdfs分布式文件系统下的目录,这个很重要,若是在Linux本地文件系统下创建该目录,后面是会报错的。下面是创建步骤:
# 切换到hadoop账户(因为hadoop是用hadoop用户部署的,所以要切换,如果是root用户部署,可以不用切换)
[root@yd-ss ~]# su hadoop
# 创建文件
[hadoop@yd-ss root]$ hdfs dfs -mkdir -p /home/datahouse/hive/warehouse
# 赋权
[hadoop@yd-ss root]$ hdfs dfs -chmod 777 /home/datahouse/hive/warehouse/
复制mysql 驱动包
找到java 连接MySQL的驱动包,上传到${HIVE_HOME}/lib 目录
可以在maven中央仓库去找,
https://mvnrepository.com/
删除日志包
删除安装路径下的/lib/log4j-slf4j-impl-2.18.0.jar
防止日志出现以下信息:
SLF4J: Class path contains multiple SLF4J bindings. SLF4J: Found binding in [jar:file:/data/soft/apache-hive-4.0.0-beta-1-bin/lib/log4j-slf4j-impl-2.18.0.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J: Found binding in [jar:file:/data/soft/hadoop-3.3.5/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]
初始化元数据
# 进入到${HIVE_HOME}/bin目录,执行
schematool -initSchema -dbType mysql
初始化元数据在数据库的表信息和数据
启动metastore服务
# bin目录下执行
hive --service metastore
# 查看日志
tail -300f logs/hive.log
启动会报错
需要在/etc/hosts 文件配置 127.0.0.1 yd-ss 的解析
因为/etc/hostname 文件配置了主机名 为 yd-ss
再次启动,需要使用后台方式启动
# 将日志输出到metastore.log
nohup bin/hive --service metastore >> logs/metastore.log 2>&1 &
使用hive CLI
重大变化:Hive4.0.0中,HiveCLI已经被弃用了,代替它的是Beeline。所以,启动Hive4.0.0时,会默认进入Beeline命令行界面,而不是HiveCLI
启动hiveServer2
nohup bin/hive --service hiveserver2 >> logs/hiveserver2.log 2>&1 &
报错
Caused by: org.apache.hadoop.security.AccessControlException: Permission denied: user=root, access=EXECUTE, inode="/tmp/hive/_resultscache_":hadoop:supergroup:drwx------
原因是/tmp/hive/_resultscache_目录权限问题,/tmp/hive/_resultscache_ 文件夹 所属用户hadoop,权限为所有者777,但组和其他用户权限都为0,即只有hadoop用户有rwx权限,其他用户无权限。
解决方案:登录hadoop用户,给该文件赋权
# 切换到hadoop 用户
[root@yd-ss bin]# su hadoop
#切换到 hadoop 安装目录bin下,执行赋权命令
[hadoop@yd-ss bin]$ hdfs dfs -chmod 777 /tmp/hive/_resultscache_
再次启动,即可顺利启动。当时在这个错误纠结了2天时间,关键的是在赋权这个操作上。
访问hiveserver2
通过查看启动日志,webui服务默认是在10002端口启动的,输入以下地址即可访问
http://localhost:10002/
若报错,则需要在hadoop中core-site.xml配置如下参数:
<!-- 整合hive 用户代理设置 --><property><name>hadoop.proxyuser.root.hosts</name><value>*</value></property><property><name>hadoop.proxyuser.root.groups</name><value>*</value></property>
客户端连接
beeline shell连接
# 到hive安装bin目录下执行,yd-ss代表当前主机名
beeline -u jdbc:hive2://yd-ss:10000 --verbose=true -n root
这个很类似MySQL的shell连接方式,如下:
[root@yd-ss bin]# beeline -u jdbc:hive2://yd-ss:10000 --verbose=true -n root
!connect jdbc:hive2://yd-ss:10000 root [passwd stripped]
Connecting to jdbc:hive2://yd-ss:10000
Connected to: Apache Hive (version 4.0.0)
Driver: Hive JDBC (version 4.0.0)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 4.0.0 by Apache Hive
0: jdbc:hive2://yd-ss:10000>
执行下面脚本:
CREATE DATABASE test;
show databases;
0: jdbc:hive2://yd-ss:10000> CREATE DATABASE test;
going to print operations logs
printed operations logs
Getting log thread is interrupted, since query is done!
INFO : Compiling command(queryId=root_20241113173452_2e942d82-8b36-4dcd-9212-d3bdbd72dc92): CREATE DATABASE test
INFO : Semantic Analysis Completed (retrial = false)
INFO : Created Hive schema: Schema(fieldSchemas:null, properties:null)
INFO : Completed compiling command(queryId=root_20241113173452_2e942d82-8b36-4dcd-9212-d3bdbd72dc92); Time taken: 0.003 seconds
INFO : Concurrency mode is disabled, not creating a lock manager
INFO : Executing command(queryId=root_20241113173452_2e942d82-8b36-4dcd-9212-d3bdbd72dc92): CREATE DATABASE test
INFO : Starting task [Stage-0:DDL] in serial mode
INFO : Completed executing command(queryId=root_20241113173452_2e942d82-8b36-4dcd-9212-d3bdbd72dc92); Time taken: 0.147 seconds
No rows affected (0.173 seconds)
0: jdbc:hive2://yd-ss:10000> show databases;
going to print operations logs
printed operations logs
Getting log thread is interrupted, since query is done!
INFO : Compiling command(queryId=root_20241113173512_cfc13da2-518b-406c-946d-83888acf6d37): show databases
INFO : Semantic Analysis Completed (retrial = false)
INFO : Created Hive schema: Schema(fieldSchemas:[FieldSchema(name:database_name, type:string, comment:from deserializer)], properties:null)
INFO : Completed compiling command(queryId=root_20241113173512_cfc13da2-518b-406c-946d-83888acf6d37); Time taken: 0.02 seconds
INFO : Concurrency mode is disabled, not creating a lock manager
INFO : Executing command(queryId=root_20241113173512_cfc13da2-518b-406c-946d-83888acf6d37): show databases
INFO : Starting task [Stage-0:DDL] in serial mode
INFO : Completed executing command(queryId=root_20241113173512_cfc13da2-518b-406c-946d-83888acf6d37); Time taken: 0.071 seconds
+----------------+
| database_name |
+----------------+
| default |
| test |
+----------------+
2 rows selected (0.218 seconds)
成功执行。基本和MySQL是类似的。
如下,可以看到建的库是存储到hdfs分布式文件系统中的。
[hadoop@yd-ss bin]$ hdfs dfs -ls /home/datahouse/hive/warehouse/
drwxr-xr-x - root supergroup 0 2024-11-14 10:38 /home/datahouse/hive/warehouse/test.db
Dbeaver连接
参考文章《DBeaver连接hive》
连接上后,基本就和mysql操作类似了。
经验
1 hive 包括 metastore元数据服务和hiveserver2服务;
2 hadoop服务是使用hadoop 用户部署的伪分布式模式,hive是使用root用户部署的;
3 apache下的组件是真的难用,文档不清晰,各种xml配置问题;
4 要了解hdfs分布式文件系统和Linux本地文件系统区别,否则很容易遇到文件权限问题;
相关文章:

基于Hadoop、hive的数仓搭建实践
文章目录 架构图Hadoop搭建Hive 搭建MySQL搭建官网文档下载配置配置hive环境变量配置日志文件配置hive-site 复制mysql 驱动包删除日志包初始化元数据启动metastore服务使用hive CLI启动hiveServer2访问hiveserver2客户端连接beeline shell连接 Dbeaver连接经验 基于HDFS Hive…...

新的恶意软件活动通过游戏应用程序瞄准 Windows 用户
一种新的恶意软件 Winos4.0 被积极用于网络攻击活动。FortiGuard实验室发现,这种先进的恶意框架是从臭名昭著的 Gh0strat 演变而来的,配备了模块化组件,可在受感染的设备上进行一系列恶意活动。 这些攻击已在游戏相关应用程序中发现…...

【Hutool系列】反射工具-ReflectUtil
前言 反射是 Java 中一种强大的机制,可以在运行时动态地获取类的信息并操作类的属性和方法。在 Java 中,通过反射可以获取和设置类的字段、调用类的方法、创建类的实例等。Java的反射机制,可以让语言变得更加灵活,对对象的操作也更…...
【操作系统专业课】第二次作业
第1题(进程同步与互斥) 使用二值信号量实现 n 个进程之间的互斥。 1. 定义一个二值信号量 mutex= 1。 二值信号量:二值信号量只有两种取值,0 (资源已被占用)和 1(资源可用)。 2. 进程进入临界区前的操作:每个进程在进入临界区之前,都需要执行 P(mutex) 操作。 P 操作…...

Scala的迭代器
1.对比foreach 它的优点在于: (1) 内存效率高。迭代器采用延迟计算的方式,它不会将整个集合加载到内存中,而是在每次调用next方法时才计算并返回下一个元素。 (2) 统一的遍历方法。迭代器为不同类型的集合(如列表、集合、映射等…...

(RK3566驱动开发 - 1).pinctrl和gpio子系统
一.设备树 pinctrl部分可以参考 rockchip 官方的绑定文档 :kernel/Documentation/devicetree/bindings/pinctrl PIN_BANK:引脚所属的组 - 本次例程使用的是 GPIO3_A1 这个引脚,所以所属的组为 3; PIN_BANK_IDX:引脚的…...

css三角制作(二十课)
代码: <style>/* 边框原理 */.box1 {width: 0;height: 0;border-top: 100px solid pink;border-bottom: 100px solid blue;border-left: 100px solid yellow;border-right: 100px solid greenyellow;}/* 三角制作 */.box2 {width: 0;height: 0;border: 100px …...

C++_priority_queue(优先级队列)
✨✨ 欢迎大家来到小伞的大讲堂✨✨ 🎈🎈养成好习惯,先赞后看哦~🎈🎈 所属专栏:C学习 小伞的主页:xiaosan_blog 1. priority_queue的介绍和使用 priority_queue文档介绍 优先级队列的实现的关键…...

微信小程序——01开发前的准备和开发工具
文章目录 一、开发前的准备1注册小程序账号2安装开发者工具 二、开发者工具的使用1创建项目2 工具的使用3目录结构4各个页面之间的关系5 权限管理6提交审核和发布 一、开发前的准备 开发前需要进行以下准备: 1 注册小程序账号2激活邮箱3 信息登记4 登录小程序管理后…...

MySQL 的主从复制数据同步
一、什么是 MySQL 的主从复制 MySQL 的主从复制(Master-Slave Replication)是一种将数据从一个主数据库服务器(主库)复制到一个或多个从数据库服务器(从库)的技术。主库负责所有的数据写操作,从…...

python——面向对象
一、面向对象编程 1.1 面向过程与面向对象 面向过程和面向对象都是一种编程方式,只不过再设计上有区别。 1.1.1 面向过程pop: 举例:孩子上学 1. 妈妈起床 2. 妈妈洗漱 3. 妈妈做饭 4. 妈妈把孩子叫起来 5. 孩子起床 6. 孩子洗漱 7. 孩子吃…...

Microsoft 365 Exchange如何设置可信发件IP白名单
1、 进入到 Microsoft 365 admin center 管理中心 ,点击 管理中心 下的 安全 在弹出的新页面中,依次点击 策略和规则 – 威胁策略 – 反垃圾邮件 再单击 连接筛选器策略(默认) – 编辑连接筛选器策略 2、在 IP 允许列表 中添加可信邮件 IP 段࿰…...

LM27313典型电路之升压电路
下图为升压芯片LM27313典型电路图: 从图中可以看出:系统电压VSYS3.7伏,通过C26与C27两个滤波电容后,到达升压芯片的VIN输入脚pin5。 其中电源芯片的电压输出由下式子决定: VOUT1.23*(1R17/R21) 其中VOUT是图中的V5D…...

嵌入式面试八股文(七)·#ifndef#define#endif的作用、以及内存分区(全局区、堆区、栈区、代码区)
目录 1. 头文件中的#ifndef / #define / #endif的作用是什么? 2. 内存分区:全局区、堆区、栈区、代码区简单描述? 2.1 代码区(Text Segment): 2.2 全局区(Data Segment)&…...

【弱监督视频异常检测】2024-ESWA-基于扩散的弱监督视频异常检测常态预训练
2024-ESWA-Diffusion-based normality pre-training for weakly supervised video anomaly detection 基于扩散的弱监督视频异常检测常态预训练摘要1. 引言2. 相关工作3. 方法论3.1. 使用扩散自动编码器进行常态学习3.2. 全局-局部特征编码器3.2.1 局部块3.2.2 全局块3.2.3 协同…...

Android 13 实现屏幕熄屏一段时候后关闭 Wi-Fi 和清空多任务列表
明白了,您这个补丁的功能是当设备屏幕关闭一段时间后,自动关闭 Wi-Fi 连接并清空多任务菜单。以下是更新后的博客内容,包含了对功能的详细解释和代码实现: 修改 PowerManagerService.java 以实现屏幕灭屏后关闭 Wi-Fi 和清空多任务菜单功能 在本篇博客中,我们将介绍一个针…...

Elasticsearch磁盘占用大于95%时将所有索引置为只读
在一个稳定运行的功能中,突然收到报错。经查明,是在向 Elasticsearch 中插入文档时出现了错误: AuthorizationException: AuthorizationException(403, ucluster_block_exception, ublocked by: [FORBIDDEN/12/index read-only / allow delete (api)];) 网上也有其他人报出类…...

删除 git config 保存的密码
要从 Git 中删除保存的密码,你可以根据你之前使用的保存方法来操作。以下是一些常见的方法来删除 Git 中保存的密码: 删除 credential.helper 中的密码 如果你之前使用 store 或 cache 作为 credential.helper,你可以执行以下步骤来删除保存…...

Springboot环境搭建详解
springboot学习视频记录: 笔记: a:Springboot maven常见依赖、配置文件笔记-CSDN博客 b:Springboot环境搭建详解-CSDN博客 day01 6:springboot的parent和starter依赖- a 7:启动类的位置配置- b 8&am…...

SpringCloud框架学习(第三部分:Resilience4j 与 Micrometer)
目录 九、CircuitBreaker断路器 1.前言(Hystrix) 2.服务雪崩 3.Circuit Breaker 4. Resilience4j 5.案例实战 (1)熔断(服务熔断 服务降级) Ⅰ. 按照 COUNT_BASED(计数的滑动窗口…...

Scala的Map集合(不可变)
package gxy//类型:不可变,可变 //操作:添加元素,删除元素,查询元素,移除元素,遍历 object map {def main(args: Array[String]): Unit {//不可变mapval map1 Map("鄂" -> "…...

深入剖析:Spring MVC与Struts的较量
标题:深入剖析:Spring MVC与Struts的较量 引言 在Java Web开发领域,Spring MVC和Struts是两个非常流行的框架。它们各自拥有不同的特点,适用于不同的应用场景。本文将深入探讨Spring MVC和Struts的区别,从底层机制、…...

4.Mybatis中,在Mapper的SQL映射文件中,使用<choose><when>无法识别参数的情况
正确结果 <?xml version"1.0" encoding"UTF-8" ?> <!DOCTYPE mapperPUBLIC "-//mybatis.org//DTD Mapper 3.0//EN""http://mybatis.org/dtd/mybatis-3-mapper.dtd"> <mapper namespace"com.itheima.mapper.Bra…...

antd proFromSelect 懒加载+模糊查询
antd proFromSelect 懒加载模糊查询 场景 查询用户的时候数量特别大,有10w条数据,不可能直接全部查询用来展示 所以本文章将讲解如何使用懒加载模糊查询,解决数量过大的问题 后端代码就不用展示了,很简单的分页查询,主…...

Spring Boot 牛刀小试 org.springframework.boot:spring-boot-maven-plugin:找不到类错误
今天看了下书翻了下Spring Boot的用法,下载idea后, 反复出现org.springframework.boot:spring-boot-maven-plugin:找不到类错误,后来看了下调试窗口,发现是连不上maven的网站443错误,解决思路很简单,把ide连…...

qt中ctrl+鼠标左键无法进入
现象:qt中ctrl鼠标左键无法跳转部分函数,例如能跳到textEdit->toPlainText().,但无法跳转到toUtf8();但编译没有问题 排查1:我发现是交叉编译链的问题,使用linux自带就可以进,用ATK-I.MX6U就部分不能进…...

丹摩征文活动 | 丹摩智算平台:服务器虚拟化的璀璨明珠与实战秘籍
丹摩DAMODEL|让AI开发更简单!算力租赁上丹摩! 目录 一、引言 二、丹摩智算平台概述 (一)平台架构 (二)平台特点 三、服务器虚拟化基础 (一)虚拟化的概念 …...

本机ip地址和网络ip地址一样吗
在数字化时代的浪潮中,IP地址作为网络设备身份的象征,扮演着举足轻重的角色。然而,当我们谈论IP地址时,常常会听到“本机IP地址”与“网络IP地址”这两个术语,它们之间是否存在差异?又该如何准确理解并区分…...

websocket身份验证
websocket身份验证 前言 上一集我们就完成了websocket初始化的任务,那么我们完成这个内容之后就应该完成一个任务,当客户端与服务端连接成功之后,客户端应该主动发起一个身份认证的消息。 身份认证proto 我们看一眼proto文件的内容。 我…...

案例解读 | 某三甲医院IT监控体系升级实例
PART 01 项目背景 01客户介绍 案例医院是一家某省省属大型三级甲等综合医院。该医院占地三百余亩,总建筑面积约26万平方米,开放床位1500张,资产总值约15亿元,其规划建设一流,拥有诸多先进配套设施,建设项目…...