安装Hive
Hive是一个数据仓库,适合存读多写少的数据,依赖Hadoop。
下载安装包
wget --no-check-certificate https://od.fifcom.cn/misc/hadoop/apache-hive-2.3.9-bin.tar.gz
wget --no-check-certificate https://od.fifcom.cn/misc/hadoop/mysql57-community-release-el7-10.noarch.rpm
wget --no-check-certificate https://od.fifcom.cn/misc/hadoop/mysql-connector-java-5.1.49.tar.gz
安装配置元数据库
Hive需要配置元数据库,这里使用MySQL作为元数据库。
yum -y install mysql57-community-release-el7-10.noarch.rpm --nogpgcheck
yum -y install mysql-community-server --nogpgcheck
查看MySQL状态, 此时为未启动(inactive)
service mysqld status
启动MySQL
systemctl start mysqld
MySQL安装后会设置一个随机密码,可以通过log来查看
cat /var/log/mysqld.log | grep password
现在就可以登录MySQL的命令行了。
mysql -u root -p08d*****X49q
登录后修改root密码和设置可远程登录
# 修改root密码为H1ghEntr0pyPwd!
alter user 'root'@'localhost' identified by 'H1ghEntr0pyPwd!';
# 设置可远程登录
grant all privileges on *.* to 'root'@'%' identified by 'H1ghEntr0pyPwd!' with grant option;
# 刷新
flush privileges;
开启3306防火墙(如果之前没禁用防火墙的话)
firewall-cmd --zone=public --add-port=3306/tcp --permanent
firewall-cmd --reload
这里报错是因为之前已禁用防火墙
修改MySQL配置文件,并重启MySQL服务
vi /etc/my.cnf
=>
# 在[mysqld]节点下加入
lower_case_table_names=1
character_set_server=utf8
init_connect='SET NAMES utf8'
<=
systemctl restart mysqld
再次进入MySQL Shell,新建Hive元数据库
mysql -u root -pH1ghEntr0pyPwd!
create database metastore;
安装Hive
解压Hive
tar -zxvf apache-hive-2.3.9-bin.tar.gz -C /opt/
mv /opt/apache-hive-2.3.9-bin/ /opt/hive/
在所有节点上配置环境变量
vi /etc/profile
=> # 末尾添加
export HIVE_HOME=/opt/hive
export PATH=${HIVE_HOME}/bin:$PATH
<=
source /etc/profile
配置Hive环境
cd /opt/hive/conf/
cp hive-env.sh.template hive-env.sh
vi hive-env.sh
=>
export HADOOP_HOME=/opt/hadoop
export HIVE_CONF_DIR=/opt/hive/conf
<=
安装连接元数据库的驱动
cd ~
tar -zxvf mysql-connector-java-5.1.49.tar.gz
cp ~/mysql-connector-java-5.1.49/mysql-connector-java-5.1.49-bin.jar /opt/hive/lib/
rm -rf mysql-connector-java-5.1.49/
配置Hive连接到元数据库
cd /opt/hive/conf
touch hive-site.xml
vi 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://master:3306/metastore?useSSL=false</value>
</property>
<!-- jdbc 连接的驱动 -->
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
</property>
<!-- jdbc 连接的用户名 -->
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
</property>
<!-- jdbc 连接的密码 -->
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>H1ghEntr0pyPwd!</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>/user/hive/warehouse</value>
</property>
<!-- Hiveserver2的host -->
<property>
<name>hive.server2.thrift.bind.host</name>
<value>master</value>
</property>
<!-- Hiveserver2的端口 -->
<property>
<name>hive.server2.thrift.port</name>
<value>10000</value>
</property>
</configuration>
初始化Hive元数据库,仅能初始化一次
schematool -initSchema -dbType mysql -verbose
分发Hive到slave节点
scp -r /opt/hive/ slave1:/opt/
运行Hive
首先应启动Hadoop
cd /opt/hadoop/sbin/
./start-all.sh
然后在HDFS上创建Hive的工作目录
hadoop dfsadmin -safemode leave # 关闭安全模式
hdfs dfs -mkdir /tmp
hdfs dfs -mkdir -p /user/hive/warehouse
hdfs dfs -chmod g+w /tmp
hdfs dfs -chmod g+w /user/hive/warehouse
启动Hive
hive
=>
show databases;
show tables;
create table test (id int);
insert into test values(1);
select * from test;
exit;
<=
启动Hiveserver2
Hiveserver2可以接受多个客户端的并发访问,支持身份认证
hive --service hiveserver2 & # 让hiveserver2在后台运行,不占用shell
注意:这里的4138是Hiveserver2的进程号
浏览器访问master:10002,见下即成功
启动beeline
启动之前需设置Hadoop,允许所有代理用户访问
cd /opt/hadoop/etc/hadoop/
vi core-site.xml
=>
# 在configuration标签下添加
<=
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
重新启动所有相关服务
kill 4138 # 关闭hiveserver2
cd /opt/hadoop/sbin/
# 重启Hadoop
./stop-all.sh
./start-all.sh
hive --service hiveserver2 &
启动beeline
beeline -u jdbc:hive2://master:10000