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"

在这里插入图片描述

  • 20
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值