基于Hadoop、hive的数仓搭建实践

news2024/11/18 5:49:36

文章目录

    • 架构图
    • 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&amp;useUnicode=true&amp;characterEncoding=UTF-8&amp;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本地文件系统区别,否则很容易遇到文件权限问题;

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

跨平台WPF框架Avalonia教程 一

安装 安装 Avalonia UI 模板​ 开始使用 Avalonia 的最佳方式是使用模板创建一个应用程序。 要安装 Avalonia 模板&#xff0c;请运行以下命令&#xff1a; dotnet new install Avalonia.Templates 备注 对于 .NET 6.0 及更早版本&#xff0c;请将 install 替换为 --inst…

“fc-async”提供了基本的异步处理能力

在开发中,异步处理已经成为提升系统性能和用户体验的常用方式。然而,传统的@Async注解和基础的异步处理工具在面对复杂的任务场景时,存在局限性。这些局限性包括但不限于高并发环境下的稳定性、任务失败后的恢复机制、以及任务的监控和管理。 开源项目“fc-async”提供了基…

RGB与YCbCr转换算法

目录 RGB与YCbCr转换算法RGB与YCbCr色域介绍RGB模型YCbCr色域简介YCbCr的应用YUV 和 YCbCr 的区别 色彩转换公式 RGB 转 YCbCr 实现RGB 转 YCbCr 的 Matlab 实现RGB 转 YCbCr 的 FPGA 实现 YCbCr 转 RGB 实现YCbCr 转 RGB 的 Matlab 实现YCbCr 转 RGB 的 FPGA 实现 RGB与YCbCr转…

游戏引擎学习第八天

视频参考: https://www.bilibili.com/video/BV1ouUPYAErK/ 理解下面的代码 关于虚函数 代码分解 结构体 foo 的定义&#xff1a; struct foo {int32 X;int64 Y;virtual void Bar(int c); };foo 结构体有两个成员变量&#xff1a;X&#xff08;int32 类型&#xff09;和 Y&…

Vue2教程002:Vue指令

文章目录 2、Vue指令2.1 开发者工具2.2 v-html2.3 v-show和v-if2.4 v-else和v-else-if2.5 v-on2.5.1 内联语句2.5.2 methods 2、Vue指令 2.1 开发者工具 通过谷歌应用商店安装&#xff08;需要科学上网&#xff09;通过极简插件安装 2.2 v-html Vue会根据不同的指令&#x…

计算机视觉 ---图像模糊

1、图像模糊的作用&#xff1a; 减少噪声&#xff1a; 在图像获取过程中&#xff0c;例如通过相机拍摄或者传感器采集&#xff0c;可能会受到各种因素的干扰&#xff0c;从而引入噪声。这些噪声在图像上表现为一些孤立的、不符合图像主体内容的像素变化&#xff0c;如椒盐噪声&…

[JAVA]MyBatis框架—如何获取SqlSession对象实现数据交互(基础篇)

假设我们要查询数据库的用户信息&#xff0c;在MyBatis框架中&#xff0c;首先需要通过SqlSessionFactory创建SqlSession&#xff0c;然后才能使用SqlSession获取对应的Mapper接口&#xff0c;进而执行查询操作 在前一章我们学习了如何创建MyBatis的配置文件mybatis.config.xm…

node.js下载安装步骤整理

>> 进入node.js下载页面下载 | Node.js 中文网 >>点击 全部安装包 >>删除网址node后面部分&#xff0c;只保留如图所示部分&#xff0c;回车 >>点击进入v11.0.0/版本 >>点击下载node-v11.0.0-win-x64.zip(电脑是windows 64位操作系统适用) >…

解决IntelliJ IDEA的Plugins无法访问Marketplace去下载插件

勾选Auto-detect proxy setting并填入 https://plugins.jetbrains.com 代理URL&#xff0c;可以先做检查连接&#xff1a;

解决Jenkins使用 Git 参数插件拉取 commit 列表缓慢问题

Jenkins使用 Git 参数插件拉取 commit 列表缓慢问题 项目问题问题描述解决方案具体实现 项目问题 在 Jenkins 中使用 Git 参数插件 进行参数化构建&#xff0c;具有多方面的重要性和好处。这不仅提高了构建的灵活性和透明度&#xff0c;还能大大提升开发和运维效率。以下是使用…

Pytest-Bdd-Playwright 系列教程(9):使用 数据表(DataTable 参数) 来传递参数

Pytest-Bdd-Playwright 系列教程&#xff08;9&#xff09;&#xff1a;使用 数据表&#xff08;DataTable 参数&#xff09; 来传递参数 前言一、什么是 datatable 参数&#xff1f;Gherkin 表格示例 二、datatable 参数的基本使用三、完整代码和运行效果完整的测试代码 前言 …

Windows内核编程准备

Windows内核编程 驱动 本课程涉及的驱动&#xff0c;是利用驱动程序的高级权限&#xff0c;去做一些用户层不能做的工作&#xff0c;严格来说&#xff0c;这些写出来的东西不能算是驱动&#xff0c;因为它不会驱动任何设备 权限 内核程序是运行在R0级的&#xff0c;因此比应…

uni-app快速入门(八)--常用内置组件(上)

uni-app提供了一套基础组件&#xff0c;类似HTML里的标签元素&#xff0c;不推荐在uni-app中使用使用div等HTML标签。在uni-app中&#xff0c;对应<div>的标签是view&#xff0c;对应<span>的是text&#xff0c;对应<a>的是navigator&#xff0c;常用uni-app…

【代码大模型】Compressing Pre-trained Models of Code into 3 MB论文阅读

Compressing Pre-trained Models of Code into 3 MB key word: code PLM, compression, GA算法 论文&#xff1a;https://dl.acm.org/doi/pdf/10.1145/3551349.3556964 代码&#xff1a;https://github.com/soarsmu/Compressor.git 【why】 1.问题描述&#xff1a; code LLM …

论文《基于现实迷宫地形的电脑鼠设计》深度分析——智能车驱动算法

论文概述 《基于现实迷宫地形的电脑鼠设计》是由吴润强、庹忠曜、刘文杰、项璟晨、孙科学等人于2023年发表的一篇优秀期刊论文。其针对现阶段电脑鼠计算量庞大且不适用于现实迷宫地形的问题&#xff0c;特基于超声波测距与传统迷宫算法原理&#xff0c;设计出一款可在现实迷宫地…

PG-DERN 解读:少样本学习、 双视角编码器、 关系图学习网络

本文提出了一种用于 分子属性预测 的 少样本学习&#xff08;Few-shot Learning&#xff09; 模型—— PG-DERN&#xff0c;该模型结合了 双视角编码器&#xff08;Dual-view Encoder&#xff09; 和 关系图学习网络&#xff08;Relation Graph Learning Network&#xff09; 双…

w039基于Web足球青训俱乐部管理后台系统开发

&#x1f64a;作者简介&#xff1a;多年一线开发工作经验&#xff0c;原创团队&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的网站项目。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文…

H3C NX30Pro刷机教程-2024-11-16

H3C NX30Pro刷机教程-2024-11-16 ref: http://www.ttcoder.cn/index.php/2024/11/03/h3c-nx30pro亲测无需分区备份 路由器-新机初始化设置路由器登录密码telnet进入路由器后台 刷机上传uboot到路由器后台在Windows环境下解压后的软件包中打开 tftpd64.exe在NX30Pro环境下通过以…

[2024最新] java八股文实用版(附带原理)---java集合篇

介绍一下常见的list实现类&#xff1f; ArrayList 线程不安全&#xff0c;内部是通过数组实现的&#xff0c;继承了AbstractList&#xff0c;实现了List&#xff0c;适合随机查找和遍历&#xff0c;不适合插入和删除。排列有序&#xff0c;可重复&#xff0c;当容量不够的时候…

python 异步编程之协程

最近在学习python的异步编程&#xff0c;这里就简单记录一下&#xff0c;免得日后忘记。 首先&#xff0c;python异步实现大概有三种方式&#xff0c;多进程&#xff0c;多线程和协程&#xff1b;多线程和多进程就不用多说了&#xff0c;基本上每种语言都会有多进行和多线程的…