Hive安装
1. Hive简介
Hive是一种基于Hadoop的数据库,可以将结构化的数据存储到表中,并提供类SQL的数据增删查改,其本质为将SQL语句转化为MapReduce进行,相比较MySQL,Hive的不同点如下:
(1)Hive的数据存储在HDFS上;
(2)Hive对数据的操作底层实现是MapReduce;
(3)Hive中的执行程序由于是MapReduce程序,因此其运行受到YARN的管理。
因此可以看出,Hive的安装和运行都是以Hadoop为基础。并且由于MapReduce具有一定的执行延迟,因此Hive适合处理大数据,而在小批量数据的处理中效率远差MySQL,因此可以根据数据的规模选择合适的处理方法。
2. Hive安装
由于Hive基于Hadoop,因此在安装Hive之前应先搭建好Hadoop集群,搭建过程参照Hadoop3.1.3集群搭建,下面主要为Hive的安装步骤,笔者的系统环境为Ubuntu 20.04 + Hadoop 3.3.0。
2.1 安装MySQL
Hive自带的元数据库为derby,其不支持多用户进行访问,因此需要安装MySQL并在后续步骤中将MySQL设置为元数据库,通过以下命令安装MySQL:
logadmin@cluster002:~$ sudo apt-get install mysql-server
系统会自动选择最新版本的MySQL进行安装。
2.2 修改MySQL配置
默认安装的MySQL是没有设置密码的,并且不允许远程连接,因此需要修改MySQL的配置。首先对MySQL进行初始化配置:
logadmin@cluster002:~$ sudo mysql_secure_installation
选项按照以下方式去配置:
#1
VALIDATE PASSWORD PLUGIN can be used to test passwords...
Press y|Y for Yes, any other key for No: N (选择N ,不会进行密码的强校验)
#2
Please set the password for root here...
New password: (输入MySQL的登录密码)
Re-enter new password: (重复输入)
#3
By default, a MySQL installation has an anonymous user,
allowing anyone to log into MySQL without having to have
a user account created for them...
Remove anonymous users? (Press y|Y for Yes, any other key for No) : N (选择N,不删除匿名用户)
#4
Normally, root should only be allowed to connect from
'localhost'. This ensures that someone cannot guess at
the root password from the network...
Disallow root login remotely? (Press y|Y for Yes, any other key for No) : N (选择N,允许root远程连接)
#5
By default, MySQL comes with a database named 'test' that
anyone can access...
Remove test database and access to it? (Press y|Y for Yes, any other key for No) : N (选择N,不删除test数据库)
#6
Reloading the privilege tables will ensure that all changes
made so far will take effect immediately.
Reload privilege tables now? (Press y|Y for Yes, any other key for No) : Y (选择Y,修改权限立即生效)
之后修改MySQL的远程连接限制:
logadmin@cluster002:~$ sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf
将bind-address修改为0.0.0.0,表示允许任何IP进行远程连接:
bind-address = 0.0.0.0
mysqlx-bind-address = 127.0.0.1
重启MySQL:
logadmin@cluster002:~$ sudo /etc/init.d/mysql restart
登录MySQL:
logadmin@cluster002:~$ sudo mysql -uroot -p
输入上述设置的密码,切换到mysql数据库:
mysql> use mysql;
修改root用户的配置并刷新权限:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '密码';
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '密码' PASSWORD EXPIRE NEVER;
mysql> UPDATE user SET host = '%' WHERE user = 'root';
mysql> flush privileges;
至此,MySQL的配置完成。
2.3 安装Hive及环境变量配置
将预先下载好的Hive安装包解压到指定文件夹:
logadmin@cluster002:~$ tar -xzvf packages/apache-hive-3.1.2-bin.tar.gz -C module/
logadmin@cluster002:~$ cd module
logadmin@cluster002:~$ mv apache-hive-3.1.2-bin/ hive # 修改文件夹名称以便后续操作
配置Hive的环境变量:
logadmin@cluster002:~$ sudo vi /etc/profile.d/my_env.sh
在文件末尾新增:
export HIVE_HOME=/home/logadmin/module/hive # 该目录为刚才Hive的解压目录,根据实际情况调整
export PATH=$PATH:$HIVE_HOME/bin
激活环境变量:
logadmin@cluster002:~$ source /etc/profile.d/my_env.sh
2.4 配置Hive并设置MySQL为元数据库
将jdbc的驱动jar包(预先下载)复制到Hive/lib目录下:
logadmin@cluster002:~$ cp mysql-connector-java-8.0.25.jar /home/logadmin/module/hive/lib/
在hive/conf目录下新建hive-site.xml文件,并添加内容如下:
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- jdbc 连接的 URL -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://cluster002:3306/metastore?useSSL=false</value> # 地址根据实际配置
</property>
<!-- jdbc 连接的 Driver-->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- jdbc 连接的 username-->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- jdbc 连接的 password -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>******</value> # 上述配置MySQL时设置的登陆密码
</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>/user/hive/warehouse</value>
</property>
</configuration>
由于设置HIve在HDFS中的工作目录为/user/hive/warehouse,因此预先创建该目录:
logadmin@cluster002:~$ hadoop fs -mkdir /user/hive/warehouse
登录MySQL,创建metastore元数据库:
logadmin@cluster002:~$ sudo mysql -uroot -p
mysql> create database metastore;
初始化Hive的元数据库为MySQL:
schematool -initSchema -dbType mysql -verbose
Hive的配置完成,整个Hive的安装也就完成了。注意在笔者的安装过程中,出现了java.lang.NoSuchMethodError错误,查询后发现是Hive和Hadoop的版本问题,只需要将Hive/lib下guava-19.0的jar包删除,并把hadoop/share/hadoop/common/lib下的guava复制到hive/lib目录下即可。
3. HQL示例
启动Hive,执行数据库和表的创建,以及表的一些操作:
logadmin@cluster002:~$ hive
hive> show databases; # 显示所有数据库
hive> create database test_database; # 创建新的数据库
hive> use test_database; # 切换到新建的数据库
hive> show tables; # 显示所有表格
hive> create table test (id int); # 创建表格
hive> insert into test values (0); # 像表格中添加元素
hive> select * from test; # 查看表中所有元素
参考链接
Ubuntu20.04安装MySQL
hive环境搭建提示: java.lang.NoSuchMethodError: com.google.common.base.Preconditions.checkArgument