简介
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 配置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 增加以下内容 此时对重启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" 参考阅读
发表评论