安装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

lRtyPa2.png

查看MySQL状态, 此时为未启动(inactive)

service mysqld status

status

启动MySQL

systemctl start mysqld

MySQL安装后会设置一个随机密码,可以通过log来查看

cat /var/log/mysqld.log | grep password

pwd

现在就可以登录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

firewalld-disabled 这里报错是因为之前已禁用防火墙

修改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

schematool

分发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;
<=

select

启动Hiveserver2

Hiveserver2可以接受多个客户端的并发访问,支持身份认证

hive --service hiveserver2 & # 让hiveserver2在后台运行,不占用shell

hive 注意:这里的4138是Hiveserver2的进程号

浏览器访问master:10002,见下即成功 hs2

启动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

beeline