hive中spark SQL做算子引擎,PG作为MetaDatabase

简介

hive架构原理
1.客户端可以采用jdbc的方式访问hive

2.客户端将编写好的HQL语句提交,经过SQL解析器,编译器,优化器,执行器执行任务。hive的存算都依赖于hadoop框架,所依赖的真实数据存放在hdfs中,解析好的mapreduce程序,提交给yarn。

3.另外hive框架自带一个名为debay的数据库,其作用是用来记录hdfs上数据的存放位置,也就是说,在客户端提交任务之后,hive优先会去数据库中查询所需要数据在hdfs上面的路径信息,然后在拿着路径信息再去hdfs寻找数据。但是debay有一个缺点就是只支持单用户访问,通常情况下,会将debay数据库换成其他数据库。

安装postgresql

在hadoop集群中安装postgresql,并不需要所有节点同步,只需要安装在集群中得其中一个节点就可以,保证该节点对于得访问

cd /home/hadoop/ --进入新建用户指定目录
sudo curl -O https://ftp.postgresql.org/pub/source/v16.2/postgresql-16.2.tar.gz    --下载安装包
tar -zxvf postgresql-16.2.tar.gz  --解压压缩包
sudo yum install -y bison flex readline-devel zlib-devel zlib zlib-devel gcc  gcc-c++ openssl-devel  python3-devel python3    --下载安装数据库基本依赖包,Python依赖为可选项
cd postgresql-16.2
./configure --prefix=/home/hadoop/pg --with-openssl  --with-python #拟安装至/home/hadoop/pg
sudo mkdir /home/hadoop/pg  --创建装载所需文件夹
make world && make install-world
sudo vim /etc/profile        
export PATH=/home/hadoop/pg/bin:$PATH      --指定bin文件路径 确保准备 
export PGDATA=/home/hadoop/pg/data         --指定data文件路劲 在初始化时会将data装载这个路径
export PGUSER=hadoop
export PGDATABASE=postgres
sudo source /etc/profile  --加载环境变量内容
cd /home/hadoop/pg/bin   --进入指令包
./initdb -D $PGDATA   -U hadoop -W --初始化数据库

修改pg_hba.conf、postgresql.conf

vim $PGDATA/pg_hba.conf

调整以下ip4\ip6得访问IP白名单以及密码加密形式

# TYPE  DATABASE        USER            ADDRESS                 METHOD

# "local" is for Unix domain socket connections only
local   all             all                              scram-sha-256
# IPv4 local connections:
host    all             all              0/0             scram-sha-256
# IPv6 local connections:
host    all             all             ::1/128                 trust


修改监听配置

vim $PGDATA/postgresql.conf

定义以下参数


listen_addresses = '*'          # what IP address(es) to listen on;

启动数据库

pg_ctl  start  --启动数据库
pg_ctl status --查看数据库运行状态

安装hive

进入hive官网下载压缩包apache-hive-3.1.3-bin.tar.gz然后上传到指定服务器上,也可以使用以下指令进行下载

wget -y https://dlcdn.apache.org/hive/hive-3.1.3/apache-hive-3.1.3-bin.tar.gz --no-check-certificate

修改hive配置
在3.1.3版本中hive得conf配置文件hive-site.xml并没有被创建,官方给出了该配置文件得模板文件hive-default.xml.template
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

创建hive-site.xml文件并进行编辑配置

touch hive-site.xml

将以下配置内容打入该配置文件,执行以下命令

cat > hive-site.xml <<EOF
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
 <!-- jdbc 连接的 URL -->
 <property>
 <name>javax.jdo.option.ConnectionURL</name>
 <value>jdbc:postgresql://localhost:5432/postgres</value>
</property>
 <!-- jdbc 连接的 Driver-->
 <property>
 <name>javax.jdo.option.ConnectionDriverName</name>
 <value>org.postgresql.Driver</value>
</property>
<!-- jdbc 连接的 username-->
 <property>
 <name>javax.jdo.option.ConnectionUserName</name>
 <value>hadoop</value>
 </property>
 <!-- jdbc 连接的 password -->
 <property>
 <name>javax.jdo.option.ConnectionPassword</name>
 <value>hadoop</value>
</property>
 <!-- Hive 元数据存储版本的验证 -->
 <property>
 <name>hive.metastore.schema.verification</name>
 <value>false</value>
</property>
 <!--元数据存储授权-->
 <property>
 <name>hive.metastore.event.db.notification.api.auth</name>
 <value>false</value>
 </property>
 <!-- Hive 默认在 HDFS 的工作目录 -->
 <property>
 <name>hive.metastore.warehouse.dir</name>
 <value>/hive/warehouse</value>
 </property>
</configuration>
EOF

配置hive 环境变量

sudo vim /etc/profile
##加入以下环境变量
export HIVE_HOME=/home/hadoop/hive
export PATH=$HIVE_HOME/bin:$PATH
## 加载环境变量值
source /etc/profile

上传元数据库对应得JDBC驱动包上传到$HIVE_HOME/lib目录下

初始化源数据库

schematool -initSchema -driver org.postgresql.Driver -url jdbc:postgresql://localhost:5432/postgres -user hadoop -password hadoop -dbType postgres -verbose


在初始数据库得时候会有以下报错

SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/apache-hive-3.1.3-bin/lib/log4j-slf4j-impl-2.17.1.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/hadoop-3.3.6/share/hadoop/common/lib/slf4j-reload4j-1.7.36.jar!/org/slf4j/impl/StaticLoggerBinder.class]


hadoop与hive 依赖包冲突,此时删掉hive/lib下得log4j-slf4j-impl-2.17.1.jar包便可
在服务器上其启动hive得元数据进程和服务进程

nohup hive --service metastore &

nohup hive --service hiveserver2 &
##此时会将后台进程的信息自动追加存放到当前路径得nohup.out文件中
##使用以下命令查看
cat nohup.out

此时会发现有两个runjar 进程
默认情况下hiveserver2对外的端口号是10000

jps
netstat -ntulp |grep 10000

开启hdfs中的 /hive/warehouse的读写权限
执行命令:hdfs dfs -chmod -R 777 /hive/warehouse

hdfs dfs -chmod -R 777 /hive/warehouse
hdfs dfs -ls /hive/warehouse

##此时可以看到权限已经发生了表更
hdfs dfs -ls /hive/warehouse

启动spark的SparkSubmit进程

cd $SPARK_HOME 
cd sbin
./start-thriftserver.sh

此时就可以使用外部编译器通过sparkSQL 链接到hive。使用的是sparkSQL的驱动,hdfs的存储,postgresql的元数据管理。

此时使用IDEA链接sparkSQL时会出现以下报错

Error: Could not open client transport with JDBC Uri: jdbc:hive2://10.0.0.105:10000: 
Failed to open new session: java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): 
User: andy is not allowed to impersonate andy (state=08S01,code=0)

需要修改hadoop 下的core-site.xml文件(所有节点同步)

vim $HADOOP_HOME/etc/hadoop/core-site.xml

增加以下内容

<!-- 设置超级代理 -->
<property>
  <name>hadoop.proxyuser.hadoop.hosts</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.hadoop.groups</name>
  <value>*</value>
</property>


此时对重启hadoop集群以及相关组件(hbase、spark等) 和metastore 、hiveserver2 服务

start-all.sh ##主节点停掉hadoop,再此重新开启
nohup hive --service metastore &

nohup hive --service hiveserver2 &

再次尝试便可以连接成功

此时使用sparkSQL就和使用平时使用的数据库一样
在SPAKR页面我创建了一个表,实际存储时在hdfs
使用以下命令进行查看

[hadoop@vm05 ~]$ hdfs dfs -ls /hive
Found 1 items
drwxrwxrwx   - hadoop supergroup          0 2024-03-03 14:36 /hive/warehouse
[hadoop@vm05 ~]$ hdfs dfs -ls /hive/warehouse
Found 2 items
drwxrwxrwx   - hadoop supergroup          0 2024-03-03 13:34 /hive/warehouse/daemo.db
drwxr-xr-x   - hadoop supergroup          0 2024-03-03 14:37 /hive/warehouse/text_db.db
[hadoop@vm05 ~]$ hdfs dfs -ls /hive/warehouse/text_db.db
Found 1 items
drwxr-xr-x   - hadoop supergroup          0 2024-03-03 14:37 /hive/warehouse/text_db.db/text1
[hadoop@vm05 ~]$ 

也可以通过元数据管理进行查看
打开postgresql 执行以下代码。可以查看到创建的表存储的

select  a."DB_ID",a."TBL_NAME",a."TBL_TYPE",b."NAME",b."DB_LOCATION_URI"
from "TBLS" a
left join "DBS" b
on a."DB_ID" = b."DB_ID"

在这里插入图片描述

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

详解 JavaScript 中的数组

详解 JavaScript 中的数组 创建数组 注&#xff1a;在JS中的数组不要求元素的类型&#xff0c;元素类型可以一样&#xff0c;也可以不一样 1.使用 new 关键字创建 let array new Array()2.使用字面量方式创建(常用) let array1 [1,2,3,"4"]获取数组元素 使用下…

用numpy搭建自己的神经网络

搭建之前的基础与思考 构建模型的基本思想&#xff1a; 构建深度学习的过程&#xff1a;产生idea&#xff0c;将idea转化成code&#xff0c;最后进行experiment&#xff0c;之后根据结果修改idea&#xff0c;继续idea–>code–>experiment的循环&#xff0c;直到最终训练…

Excel 按奇数偶数列处理数据

目录 一. 需求背景1.1 获取偶数列的数据1.2 奇偶列数据互换 二. 解决方式2.1 为列添加奇偶辅助列2.2 通过公式将奇偶列互换 一. 需求背景 1.1 获取偶数列的数据 ⏹ 最近在整理歌单&#xff0c;发现部分歌曲没有歌词&#xff0c;于是打算自己制作一份。 从网上找到了歌词&…

Vue前端的工作需求

加油&#xff0c;新时代打工人&#xff01; 需求 实现带树形结构的表格&#xff0c;父数据显示新增下级&#xff0c;和父子都显示编辑。 <template><div><el-table:data"tableData"style"width: 100%; margin-bottom: 20px"row-key"i…

YOLOv9独家原创改进|使用可改变核卷积AKConv改进RepNCSPELAN4

专栏介绍&#xff1a;YOLOv9改进系列 | 包含深度学习最新创新&#xff0c;主力高效涨点&#xff01;&#xff01;&#xff01; 一、改进点介绍 AKConv是一种具有任意数量的参数和任意采样形状的可变卷积核&#xff0c;对不规则特征有更好的提取效果。 RepNCSPELAN4是YOLOv9中的…

ArcGIS Runtime For Android开发之符号化和图层渲染

一、用Symbol对要素进行符号化 首先我们看一下Symbol 接口关系&#xff1a; 1、SimpleFillSymbol 他是用来进行简单的Graphic面要素填充符号化的&#xff0c;它可以设置要素的填充颜色&#xff0c;边线颜色、线宽&#xff0c;其用法如下&#xff1a; Polygon polygonnew Po…

python中的类与对象(3)

目录 一. 类的多继承 二. 类的封装 三. 类的多态 四. 类与对象综合练习&#xff1a;校园管理系统 一. 类的多继承 在&#xff08;2&#xff09;第四节中我们介绍了什么是类的继承&#xff0c;在子类的括号里面写入要继承的父类名。上一节我们只在括号内写了一个父类名&…

怎么删除CSDN上发布的文章(电脑版)

怎么删除CSDN上发布的文章(电脑版) 第一步&#xff1a;回到个人主页 第二步&#xff1a;点击右上角的“创作中心” 第三步&#xff1a;点击进去之后找到“管理”——“内容管理” 第四步&#xff1a;找到要删除的文章&#xff0c;点击右侧的三个小点点 第五步&#xff1a;然后…

js优雅的统计字符串字符出现次数

题目如下 统计一串字符串中每个字符出现的频率 示例字符串 let str asdfasqwerqwrdfafafasdfopasdfopckpasdfassfd小白写法 let str asdfasqwerqwrdfafafasdfopasdfopckpasdfassfdlet result {}; for (let i 0; i < str.length; i) {if (result[str[i]]) {result[str[…

了解游戏中的数据同步

数据同步 在联机游戏中&#xff0c;我的操作和数据要同步给同一局游戏中其他所有玩家&#xff0c;其他玩家的操作和数据也会同步给我。这叫做数据同步&#xff0c;目前数据同步的方式则有帧同步和状态同步。 状态同步&#xff1a;将操作发送给服务端&#xff0c;服务端对操作…

springboot-基础-eclipse打包jar包和war包的方法与排错

目录 打jar包打war包排错获取包外位置eclipse找不到*.jar 打jar包 修改 application-dev.yml spring.thymeleaf.prefixfile:./templates/ &#xff08;非必须&#xff01;如果遇到找不到模板的情况这样做&#xff09;把templates文件夹复制到jar文件同级的目录。 但是无法解…

Linux 基础IO(1)内存文件

文章目录 铺垫文件的系统调用接口文件描述符缓冲区 铺垫 文件文件内容 文件属性访问文件之前&#xff0c;都要先打开文件&#xff0c;而要访问&#xff0c;修改&#xff0c;编辑文件&#xff0c;文件就必须加载到内存中程序运行起来变成进程&#xff0c;被CPU调度&#xff0c;…

基于YOLOv的目标追踪与无人机前端查看系统开发

一、背景与简介 随着无人机技术的快速发展&#xff0c;目标追踪成为无人机应用中的重要功能之一。YOLOv作为一种高效的目标检测算法&#xff0c;同样适用于目标追踪任务。通过集成YOLOv模型&#xff0c;我们可以构建一个无人机前端查看系统&#xff0c;实现实时目标追踪和可视化…

构建高效的接口自动化测试框架思路

在选择接口测试自动化框架时&#xff0c;需要根据团队的技术栈和项目需求来综合考虑。对于测试团队来说&#xff0c;使用Python相关的测试框架更为便捷。无论选择哪种框架&#xff0c;重要的是确保 框架功能完备&#xff0c;易于维护和扩展&#xff0c;提高测试效率和准确性。今…

循序渐进,搞懂什么是回溯算法

循序渐进&#xff0c;搞懂什么是回溯算法 回溯算法简介 回溯算法&#xff08;backtracking algorithm&#xff09;实际上是一个类似枚举的搜索尝试过程&#xff0c;主要是在搜索尝试过程中寻找问题的解&#xff0c;当发现已不满足求解条件时&#xff0c;就“回溯”返回&#…

【高数】常数项级数概念与性质

下面为个人数学笔记&#xff0c;有需要借鉴即可。 一、常数项级数概念 二、常数项级数性质 三、调和级数 完。

文件底层的深入理解之文件输入输出重定向

目录 一、文件fd的分配规则 二、对输出重定向现象的理解 三、输出输入重定向的简单实现 1、输出重定向 2、输入重定向 一、文件fd的分配规则 最小的没有被使用的数组下标&#xff0c;会被分配给最新打开的文件。 二、对输出重定向现象的理解 正如上面这段代码所示&#xff0…

IO多路复用:提高网络应用性能的利器

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

WEB APIs (5)

window对象 BOM&#xff08;浏览器对象模型&#xff09; 其为js操作浏览器提供了方法 window对象是一个全局变量&#xff0c;是BOM树根节点 BOM的属性和方法都是window的&#xff0c;如document、console.log()等 var定义在全局全局作用域中的变量、函数都会变成window对象…

138.乐理基础-等音、等音程的意义

上一个内容&#xff1a;137.乐理基础-协和音程、不协和音程 上一个内容里练习的答案&#xff1a; 等音、等音程的意义&#xff0c;首先在 19.音阶 里写了&#xff0c;一个调使用的音阶应当是从主音快开始&#xff0c;以阶梯状的形式进行到主音结束&#xff0c;这样才能明显从乐…