[Hadoop高可用集群]数仓工具之Hive的安装部署(超级详细,适用于初学者)

[Hadoop]数仓工具Hive的安装部署

📕作者:喜欢水星记

🏆系列:Hadoop高可用集群

🔋收藏:本文记录我搭建过程供大家学习和自己之后复习,如果对您有用,希望能点赞收藏加关注

Hive的简介

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的sql查询功能,可以将sql语句转换为MapReduce任务进行运行。

最初,Hive是由Facebook开发,后来由Apache软件基金会开发,并作为进一步将它作为名义下Apache Hive为一个开源项目。

Hive 建立在Hadoop 基础之上,Hive 与 Hadoop 紧密集成,其设计可快速对 PB 级数据进行操作。

Hive的意义就是在业务分析中将用户容易编写、会写的Sql语言转换为复杂难写的MapReduce程序,从而大大降低了Hadoop学习的门槛,让更多的用户可以利用Hadoop进行数据挖掘分析。

Hive的优点

  • Hive 所采用的数据可通过批处理快速处理 PB 级数据。

  • Hive 提供非程序员可以使用的熟悉的类似于 SQL 的界面。

  • Hive 可根据使用者的需求被轻松分发与扩展。

  • Hive支持标准的SQL语法,免去了用户编写MapReduce程序的过程,大大减少了公司的开发成本

  • Hive的出现可以让那些精通SQL技能、但是不熟悉MapReduce 、编程能力较弱与不擅长Java语言的用户能够在HDFS大规模数据集上很方便地利用SQL 语言查询、汇总、分析数据

Hive的架构

架构图

img


Hadoop 和 MapReduce 是 Hive 架构的根基

Hive的体系结构可以分为以下几部分:

  1. 用户接口主要有三个:CLI,JDBC/ODBC和 Web UI。
    • ①其中,最常用的是CLI,即Shell命令行;
    • ②JDBC/ODBC Client是Hive的Java客户端,与使用传统数据库JDBC的方式类似,用户需要连接至Hive Server;
    • ③Web UI是通过浏览器访问。
  2. Hive将元数据存储在数据库中,如mysql、derby。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
  3. 解释器、编译器、优化器完成HQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。
  4. Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成。

安装Hive

Hive搭建环境

  • Centos7的操作系统
  • 已安装完JDK
  • 已搭建Hadoop
  • 已搭建MySQL数据库平台

如果没有安装可以查看我上一篇文章:

Hadoop海量数据存储与计算高可用集群部署

==注意:==初学者最好在完成我上一篇Hadoop集群搭建之后再安装Hive

软件版本选用

选用Hive的2.1.1版本,软件包名apache-hive-2.1.1-bin.tar.gz

Hive工具使用JDBC方式连接MySQL数据库,需要用到MySQL数据库连接工具软件,选用该软件的5.1.42版本,软件包名mysql-connector-java-5.1.42-bin.jar

软件下载:

提取链接
提取码:0768

Hive工具安装配置

Hive的安装过程只需要在Cluster-01主机的admin用户下进行

在Cluster-01上:

su - admin # 进入admin用户

mkdir setups # 将本次实验所需要的软件包上传至该目录,之前已经上传 我这里就不上传了

mkdir hive #创建用于存放Hive相关文件的目录

cd ~/hive

mkdir tmp

tar -xzf ~/setups/apache-hive-2.1.1-bin.tar.gz

[root@Cluster-01 ~]# su - admin				# 进入admin用户
Last login: Mon May  1 22:42:23 CST 2023 on pts/0
[admin@Cluster-01 ~]$ mkdir hive			# 创建用于存放Hive相关文件的目录
[admin@Cluster-01 ~]$ cd hive/				
[admin@Cluster-01 hive]$ mkdir tmp			# 创建Hive的本地临时文件目录"tmp"
[admin@Cluster-01 hive]$ tar -xzf ~/setups/apache-hive-2.1.1-bin.tar.gz
[admin@Cluster-01 hive]$ ls
apache-hive-2.1.1-bin  tmp

配置Hive相关的环境变量

vi ~/.bash_profile

对配置文件进行修改,在文件末尾添加以下内容:

#hive environment
HIVE_HOME=/home/admin/hive/apache-hive-2.1.1-bin
PATH=$HIVE_HOME/bin:$PATH
export HIVE_HOME PATH

image-20230508211107316

刷新环境变量,使其立即生效

source ~/.bash_profile

验证环境变量是否配置成功

echo $HIVE_HOME

echo $PATH

image-20230508211317589

出现hive则表明环境变量配置成功

修改Hive相关配置文件

进入Hive的配置文件目录

cd ~/hive/apache-hive-2.1.1-bin/conf

Hive的配置文件默认都被命名为了模板文件,需要对其进行拷贝重命名之后才能使用:

cp hive-env.sh.template hive-env.sh

cp hive-log4j2.properties.template hive-log4j2.properties

cp hive-exec-log4j2.properties.template hive-exec-log4j2.properties

cp hive-default.xml.template hive-site.xml

对配置文件进行修改,找到相关配置项并对其值进行修改(本个文件一共有3处修改的)

vi hive-env.sh

找到配置项“HADOOP_HOME”,该项用于指定Hadoop所在的路径,将其值改为以下内容:

HADOOP_HOME=/home/admin/hadoop/hadoop-2.7.3

找到配置项“HIVE_CONF_DIR”,该项用于指定Hive的配置文件所在的路径,将其值改为以下内容:

export HIVE_CONF_DIR=/home/admin/hive/apache-hive-2.1.1-bin/conf

找到配置项“HIVE_AUX_JARS_PATH”,该项用于指定Hive的lib文件所在的路径,将其值改为以下内容:

export HIVE_AUX_JARS_PATH=/home/admin/hive/apache-hive-2.1.1-bin/lib

image-20230508212050315

启动相关进程

在五台主机的admin用户下执行

zkServer.sh status #查看zookeeper的状态

zkServer.sh start #启动zookeeper,如果zookeeper已经启动则不需要执行本条命令

在Cluster-01的admin用户下执行

start-all.sh

在Cluster-02的admin用户下执行

yarn-daemon.sh start resourcemanager

image-20230508213017922

在HDFS中创建Hive相关目录并赋权

本项操作仅在Cluster-01的admin用户下进行

hadoop fs -mkdir -p /user/hive/tmp

hadoop fs -mkdir -p /user/hive/warehouse

hadoop fs -mkdir -p /user/hive/log

hadoop fs -chmod 777 /user/hive/tmp

hadoop fs -chmod 777 /user/hive/warehouse

hadoop fs -chmod 777 /user/hive/log

[admin@Cluster-01 conf]$ hadoop fs -mkdir -p /user/hive/tmp	  #在HDFS中分别创建Hive的临时文件目录tmp
[admin@Cluster-01 conf]$ hadoop fs -mkdir -p /user/hive/warehouse	#在HDFS中分别创建Hive的数据存储目录“warehouse”
[admin@Cluster-01 conf]$ hadoop fs -mkdir -p /user/hive/log	#在HDFS中分别创建Hive的日志文件目录“log”
[admin@Cluster-01 conf]$ hadoop fs -chmod 777 /user/hive/tmp			# 赋权
[admin@Cluster-01 conf]$ hadoop fs -chmod 777 /user/hive/warehouse
[admin@Cluster-01 conf]$ hadoop fs -chmod 777 /user/hive/log
[admin@Cluster-01 conf]$ hadoop fs -ls /user/hive			# 查看刚刚创建的目录
Found 3 items
drwxrwxrwx   - admin supergroup          0 2023-05-08 21:32 /user/hive/log
drwxrwxrwx   - admin supergroup          0 2023-05-08 21:32 /user/hive/tmp
drwxrwxrwx   - admin supergroup          0 2023-05-08 21:32 /user/hive/warehouse

修改相关配置文件

vi ~/hive/apache-hive-2.1.1-bin/conf/hive-site.xml

找到下列标签“”所标识的属性项名称所在位置,修改其标签“”所标识的属性值部分的内容:

第一处: 
<property>
    <name>hive.exec.scratchdir</name>
    <value>/tmp/hive</value>
    
    修改为::		
  <property>
    <name>hive.exec.scratchdir</name>
    <value>/user/hive/tmp</value>

      (只修改了<value>标签里面的值)

image-20230508214314131

第二处:
  <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>


修改为::
  <name>hive.metastore.warehouse.dir</name>
    <value>/user/hive/warehouse</value>
    <description>location of default database for the warehouse</description>

注意:这里有的人可能不需要修改 

image-20230508214254068

第三处:
  <property>
    <name>hive.querylog.location</name>
    <value>${system:java.io.tmpdir}/${system:user.name}</value>
    <description>Location of Hive run time structured log file</description>

      修改为:::
        <property>
    <name>hive.querylog.location</name>
    <value>/user/hive/log</value>
    <description>Location of Hive run time structured log file</description>
		(只修改了<value>标签里面的值)

image-20230508214215051

小技巧:该文档内容较多,可以在编辑器内使用命令“/关键字”直接进行搜索,使用快捷键“n”可以切换到下一个关键字的所在位置。

创建hive元数据数据库

本项的所有操作步骤使用五台主机的用户root进行,5台都要操作

在MySQL数据库SQL服务节点Cluster-04中创建一个数据库“hive”用于存放Hive的元数据,该数据库的用户名和密码均为“hive”,数据库名、用户名、密码均可以自行设定,但需要与Hive配置文件中的内容相对应,连接MySQL数据库:

启动MySQL:

将五台主机切换到root用户

su - root (五台都要执行)

在Cluster-01执行:

ndb_mgmd -f /usr/local/mysql/etc/config.ini

在Cluster-02,03 执行

ndbd

在Cluster-04,05执行

service mysql start

执行完后查看连接状态

ndb_mgm -e show

image-20230508214815057

进入控制台

在Cluster-04的root用户下执行

mysql -hCluster-04 -uroot -pmysqlabc

在控制台执行以下命令进行数据库的创建:

CREATE DATABASE hive;

USE hive;

CREATE USER ‘hive’@‘%’ IDENTIFIED BY ‘hive’;

GRANT ALL ON hive.* TO ‘hive’@‘%’;

FLUSH PRIVILEGES;

show databases;

quit;

mysql> CREATE DATABASE hive;			# 创建数据库hive
Query OK, 1 row affected (0.05 sec)

mysql> USE hive;						# 切换到新创建的hive数据库
Database changed
mysql> CREATE USER 'hive'@'%' IDENTIFIED BY 'hive';		# 创建数据库用户hive
Query OK, 0 rows affected (0.00 sec)

mysql> GRANT ALL ON hive.* TO 'hive'@'%';    # 设置hive数据库的访问权限,hive用户拥有所有操作权限并支持远程访问
Query OK, 0 rows affected (0.00 sec)

mysql> FLUSH PRIVILEGES;					# 刷新数据库权限信息
Query OK, 0 rows affected (0.00 sec)

mysql> show databases;						# 显示数据库
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hive               |
| mysql              |
| ndbinfo            |
| performance_schema |
| sys                |
| test               |
+--------------------+
7 rows in set (0.00 sec)

mysql> quit;				# 退出数据库控制台
Bye

添加MySQL连接的相关配置信息

本项仅在Cluster-01的admin用户下进行

vi ~/hive/apache-hive-2.1.1-bin/conf/hive-site.xml

找到下列标签“”所标识的属性项名称所在位置,修改其标签“”所标识的属性值部分的内容:

将:
 <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:derby:;databaseName=metastore_db;create=true</value>
    <description>

        修改为:::
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://Cluster-04:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false</value>
    <description>

        只需要修改<value>标签里面的内容即可

image-20230508215522508

<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>org.apache.derby.jdbc.EmbeddedDriver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>
修改为:
 <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
    <description>Driver class name for a JDBC metastore</description>
  </property>

image-20230508215745206

将:
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>APP</value>
    <description>Username to use against metastore database</description>
  </property>
修改为:
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
    <description>Username to use against metastore database</description>
  </property>

image-20230508215847593

将:
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>mine</value>
    <description>password to use against metastore database</description>
  </property>
修改为:
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
    <description>password to use against metastore database</description>
  </property>

image-20230508215954768

将MySQL的数据库连接工具包添加到Hive的“lib”目录下

cp -v ~/setups/mysql-connector-java-5.1.42-bin.jar ~/hive/apache-hive-2.1.1-bin/lib

添加MySQL连接的相关配置信息

vi ~/hive/apache-hive-2.1.1-bin/conf/hive-site.xml

在编辑器中使用快捷键“:”进入到编辑器的命令模式,也称为末行模式,然后使用命令

%s#${system:java.io.tmpdir}#/home/admin/hive/tmp#g
%s#${system:user.name}#${user.name}#g

Hive初始化

在Cluster-01的admin用户下进行

schematool -initSchema -dbType mysql

image-20230508220531964

删除hive中$HIVE_HOME/lib下面的log4j-slf4j-impl-2.4.1.jar包

cd $HIVE_HOME/lib

rm -rf log4j-slf4j-impl-2.4.1.jar

为了防止与Hadoop中的jar包slf4j-log4j12-1.7.10.jar冲突

Hive工具启动和验证

本项步骤只在中Cluster-01主机admin用户上进行操作即可

进入hive控制台

hive

查看数据库

show databases;

退出

quit;

简单练习

在Cluster-01的admin用户下

基本命令

show databases; # 显示数据库信息

create database test; # 创建一个名为test的数据库

use test; # 使用刚刚创建的test库

show tables; # 显示当前的表

进入hive控制台

hive

创建表及加载数据

create table student1 (
id int comment 'id of student1',
name string comment 'name of student1',
age int comment 'age of student1',
gender string comment 'sex of student1',
addr string
)    
comment 'this is a demo'
row format delimited fields terminated by '\t';

查看表

desc student1;

image-20230515201304427

在任意一台主机的root用户下,我这里使用Cluster-04的root进入MySQL

mysql -hCluster-04 -uroot -pmysqlabc

(注意:mysqlabc 是我自己设置的密码)

进入mysql控制台之后,调用hive的库

use hive;

查看刚刚创建的表信息

select * from TBLS;

image-20230515201554867

退出控制台

quit;

  • 3
    点赞
  • 19
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Spark-Core文档是本人经三年总结笔记汇总而来,对于自我学习Spark核心基础知识非常方便,资料中例举完善,内容丰富。具体目录如下: 目录 第一章 Spark简介与计算模型 3 1 What is Spark 3 2 Spark简介 3 3 Spark历史 4 4 BDAS生态系统 4 5 Spark与Hadoop的差异 5 6 Spark的适用场景 6 7 Spark成功案例 6 第二章 Spark开发环境搭建 8 1 Spark运行模式 8 2 Spark环境搭建 8 2.1Scala的安装 8 2.2Spark的单节点配置 9 2.3Spark-Standalone集群配置 9 2.4Spark-on-Yarn模式配置 12 2.5Spark-on-Mesos模式配置 13 2.6Hive-on-Spark配置 13 第三章 Spark计算模型 15 1 RDD编程 15 1.1弹性分布式数据集RDD 15 1.2构建RDD对象 15 2RDD操作 15 2.1将函数传递给Spark 16 2.2了解闭包 16 2.3Pair RDD模型 17 2.4Spark常见转换操作 18 2.5Spark常见行动操作 20 2.6RDD持久化操作 21 2.7注意事项 23 2.7并行度调优 24 2.8分区方式 25 3Examle:PageRank 27 第四章 Spark编程进阶 29 1共享变量 29 1.1累加器 30 1.2广播变量 31 2基于分区进行操作 32 3与外部程序间的管道 33 4数值RDD的操作 34 5 Spark Shuffle机制 34 第五章 Spark调优与调试 39 1开发调优: 40 1.1调优概述 40 1.2原则一:避免创建重复的RDD 40 1.3原则二:尽可能复用同一个RDD 41 1.4原则三:对多次使用的RDD进行持久化 42 1.5原则四:尽量避免使用shuffle类算子 43 1.6原则五:使用map-side预聚合的shuffle操作 44 1.7原则六:使用高性能的算子 45 1.8原则七:广播大变量 46 1.9原则八:使用Kryo优化序列化性能 47 1.10原则九:优化数据结构 48 2资源调优 48 2.1调优概述 48 2.2 Spark作业基本运行原理 49 2.3资源参数调优 50 第六章 Spark架构和工作机制 52 1 Spark架构 52 1.1 Spark架构组件简介 52 1.2 Spark架构图 54 2 Spark工作机制 54 2.1 Spark作业基本概念 54 2.2 Spark程序与作业概念映射 55 2.3 Spark作业运行流程 55 3 Spark工作原理 55 3.1 作业调度简介 55 3.2 Application调度 56 3.3 Job调度 56 3.4 Tasks延时调度 56 第七章 Spark运行原理 57 1 Spark运行基本流程 57 2 Spark在不同集群中的运行架构 58 2.1 Spark on Standalone运行过程 59 2.2 Spark on YARN运行过程 60

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值