Hive服务器需要Hadoop,我使用的是Hadoop3.3.0,这个提前已经搭建好了。MySql5.7.34也已经准备好。
一、下载软件
下载软件的地址是:https://mirrors.tuna.tsinghua.edu.cn/apache/hive/
我选择的是Hive3.1.2.
cd /var/app
wget https://mirrors.tuna.tsinghua.edu.cn/apache/hive/hive-3.1.2/apache-hive-3.1.2-bin.tar.gz
二、解压
tar -zxvf apache-hive-3.1.2-bin.tar.gz
三、创建配置文件
1. hive-log4j2.properties
cd apache-hive-3.1.2-bin/conf
cp hive-log4j2.properties.template hive-log4j2.properties
vi hive-log4j2.properties
2. hive-env.sh
cp hive-env.sh.template hive-env.sh
vi hive-env.sh
在最后添加
export HADOOP_HOME=/var/app/hadoop-3.3.0
export HIVE_CONF_DIR=/var/app/apache-hive-3.1.2-bin/conf
3. hive-site.xml
vi hive-site.xml
添加内容
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 记录HIve中的元数据信息 记录在mysql中 -->
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://192.168.0.50:3306/hive?createDatabaseIfNotExist=true&useSSL=false</value>
</property>
<!-- jdbc mysql驱动 -->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- mysql的用户名和密码 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
</property>
<property>
<name>hive.metastore.warehouse.dir</name>
<value>/user/hive/warehouse</value>
</property>
<property>
<name>hive.exec.scratchdir</name>
<value>/user/hive/tmp</value>
</property>
<!-- 日志目录 -->
<property>
<name>hive.querylog.location</name>
<value>/user/hive/log</value>
</property>
<!-- 客户端远程连接的端口 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
<property>
<name>hive.server2.thrift.bind.host</name>
<value>0.0.0.0</value>
</property>
<property>
<name>hive.server2.webui.host</name>
<value>0.0.0.0</value>
</property>
<!-- hive服务的页面的端口 -->
<property>
<name>hive.server2.webui.port</name>
<value>10002</value>
</property>
<property>
<name>hive.server2.long.polling.timeout</name>
<value>5000</value>
</property>
<property>
<name>hive.server2.enable.doAs</name>
<value>true</value>
</property>
<property>
<name>datanucleus.autoCreateSchema</name>
<value>false</value>
</property>
<property>
<name>datanucleus.fixedDatastore</name>
<value>true</value>
</property>
<property>
<name>hive.execution.engine</name>
<value>mr</value>
</property>
</configuration>
主要修改前四项有关MySql数据库的配置,其他部分没有会有什么影响还不知道。补充一下,MySql中需要先创建一个数据库hive,如果重换版本,建议删掉这个数据库再重新创建一下。
create database if not exists hive default character set utf8mb4 collate utf8mb4_general_ci;
四、准备MySql连接的驱动
cd /var/softwares
wget https://repo1.maven.org/maven2/mysql/mysql-connector-java/5.1.47/mysql-connector-java-5.1.47.jar
把这个驱动复制到hive的lib目录下面。
cp /var/softwares/mysql-connector-java-5.1.47.jar /var/app/apache-hive-3.1.2-bin/lib
五、guava版本一致性处理
Hadoop和Hive都要使用guava,要求版本一致。建议查看两个包的版本,保留最大的。
ll /var/app/hadoop-3.3.0/share/hadoop/common/lib/gua*
ll /var/app/apache-hive-3.1.2-bin/lib/gua*
mv /var/app/apache-hive-3.1.2-bin/lib/guava-19.0.jar /var/share
cp /var/app/hadoop-3.3.0/share/hadoop/common/lib/guava-27.0-jre.jar /var/app/apache-hive-3.1.2-bin/lib/
六、初始化
/var/app/apache-hive-3.1.2-bin/bin/schematool -dbType mysql -initSchema
实际上就是在MySql创建各种管理需要的表。
看到
Initialization script completed
schemaTool completed
这就是初始化成功了。
七、启动Hive
/var/app/apache-hive-3.1.2-bin/bin/hive
看到输入提示have>就是启动成功了。
八、测试
在MySql是可以看到hive中创建了很多表。hdfs下面也有hive专用的路径。
1. 输入命令创建一张表。
create table student(id int, name string) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
hdfs有了这张表。
2. 尝试插入数据
insert into table student(id,name) values(1,'chris');
看看发生了什么?
没错,是执行了MapReduce运算。这就是Hive存在的意义,用类似sql的语法来代替MR计算。不过,这速度,真是惊天地泣鬼神。
3. 直接从数据文件导入。
我们创建数据表的方法就是利于用tab分割数据进行导入的。
创建一个文本文件stu_01.txt,输入多行数据,用tab分割。
2 zhangsanfeng
3 liergou
4 murongfu
在hdfs上传至student下。
查询数据,查看结果。
select * from student;