大数据实训笔记9:hive的安装部署

Hive是由基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张表,并提供类SQL查询功能。

Hive的本质是将HQL转化成MapReduce程序。

  • Hive处理的数据存储在HDFS;
  • Hive分析数据底层的实现是MapReduce;
  • Hive执行程序运行在YARN上。
hbase运行机制

hive安装

将下载好的hive安装包上传到hadoop101 /opt/software/。

//解压
[hadoop@hadoop101 software]$ tar -zxvf apache-hive-3.1.2-bin.tar.gz -C /opt/module/
//修改名字
[hadoop@hadoop101 module]$ mv apache-hive-3.1.2-bin/ hive-3.1.2
//配置环境变量
[hadoop@hadoop101 module]$ sudo vim /etc/profile.d/my_env.sh
##Hive_HOME
export HIVE_HOME=/opt/module/hive-3.1.2
export PATH=$PATH:$HIVE_HOME/bin
//刷新
[hadoop@hadoop101 module]$ source /etc/profile
//测试
[hadoop@hadoop101 module]$ echo $HIVE_HOME
//初始化元数据库
[hadoop@hadoop101 hive-3.1.2]$ bin/schematool -dbType derby -initSchema
//启动hive
[hadoop@hadoop101 hive-3.1.2]$ bin/hive

注意,在启动hive之前,一定要先启动hadoop集群

//查看所有数据库
hive> show databases;
//查看所有表
hive> show tables;
//插入一条数据
hive> insert into test values(1);
//插入多条数据
hive> insert into test values(2),(3);
//查看数据
hive> select * from test;

一切正常,说明我们的hive安装成功。 

docker安装

//更新yum包
[hadoop@hadoop101 hive-3.1.2]$ sudo yum update
//安装需要的软件包
[hadoop@hadoop101 hive-3.1.2]$ sudo yum install -y yum-utils device-mapper-persistent-data lvm2
//设置yum源
[hadoop@hadoop101 hive-3.1.2]$ sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
//安装docker
[hadoop@hadoop101 hive-3.1.2]$ sudo yum install -y docker-ce
//查看docker版本,验证是否验证成功
[hadoop@hadoop101 hive-3.1.2]$ sudo docker -v

如下图所示,安装成功。 

//创建docker文件夹
[hadoop@hadoop101 module]$ sudo mkdir -p /opt/module/docker
//配置docker镜像加速器
[hadoop@hadoop101 module]$ sudo tee /opt/module/docker/daemon.json <<-'EOF'
> {
> "registry-mirrors": ["https://0zhr065i.mirror.aliyuncs.com"]
> }
> EOF
[hadoop@hadoop101 module]$ sudo systemctl daemon-reload
[hadoop@hadoop101 module]$ sudo systemctl restart docker
[hadoop@hadoop101 module]$ cd docker
//查看镜像加速器
[hadoop@hadoop101 docker]$ cat daemon.json
//启动docker
[hadoop@hadoop101 docker]$ systemctl start docker
//查看状态
[hadoop@hadoop101 docker]$ systemctl status docker
//设置开机启动docker
[hadoop@hadoop101 docker]$ systemctl enable docker

MySQL安装和部署

我们需要在docker容器中部署MySQL,并通过外部MySQL客户端操作MySQL Server。

//搜索mysql镜像
[hadoop@hadoop101 docker]$ sudo docker search mysql
//拉取mysql镜像  
[hadoop@hadoop101 docker]$ sudo docker pull mysql:5.7

这一步如果卡住了,退出重启docker即可。

[hadoop@hadoop101 docker]$ systemctl restart docker
//创建mysql目录用于存储MySQL数据信息
[hadoop@hadoop101 docker]$ sudo mkdir mysql
[hadoop@hadoop101 docker]$ cd mysql
//创建容器、设置端口映射、目录映射
[hadoop@hadoop101 mysql]$ sudo docker run -id \
> -p 3306:3306 \
> --name=c_mysql \
> -v $PWD/conf:/etc/mysql/conf.d \
> -v $PWD/logs:/logs \
> -v $PWD/data:/var/lib/mysql \
> -e MYSQL_ROOT_PASSWORD=root \
> mysql:5.7
[hadoop@hadoop101 mysql]$ sudo docker ps -a
//进入mysql容器中
[hadoop@hadoop101 mysql]$ sudo docker exec -it c_mysql /bin/bash
//登录mysql
bash-4.2# mysql -uroot -proot
//查看所有数据库
mysql> show databases;

如下图所示,说明MySQL安装成功。 

我们也可以通过Navicat连接docker中的MySQL,主机为主机名或ip地址。

连接成功。 

hive元数据配置到MySQL

将MySQL安装包上传到hadoop101 /opt/software/中。

//解压
[hadoop@hadoop101 software]$ tar -zxvf mysql-connector-java-5.1.27.tar.gz
//拷贝
[hadoop@hadoop101 software]$ cd mysql-connector-java-5.1.27
[hadoop@hadoop101 mysql-connector-java-5.1.27]$ cp mysql-connector-java-5.1.27-bin.jar /opt/module/hive-3.1.2/lib/
//配置Metastore到MySQL
[hadoop@hadoop101 hive-3.1.2]$ mv conf/hive-env.sh.template conf/hive-env.sh
[hadoop@hadoop101 hive-3.1.2]$ vim conf/hive-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_212
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export HIVE_HOME=/opt/module/hive-3.1.2
export HIVE_CONF_DIR=/opt/module/hive-3.1.2/conf

 在Navicat中创建hive数据库。

//配置hive-site.xml
[hadoop@hadoop101 hive-3.1.2]$ vim conf/hive-site.xml

注意,URL一定要填写正确,hadoop101是主机名,3306是端口,hive是我们刚刚创建的数据库。

<?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://hadoop101:3306/hive?createDatabaseIfNotExist=true&amp;characterEncoding=UTF-8&amp;useSSL=false&amp;serverTimezone=Asia/Shanghai</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>root</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>
    <!-- 指定存储元数据要连接的地址 -->
    <property>
        <name>hive.metastore.uris</name>
        <value>thrift://hadoop101:9083</value>
    </property>
    <!-- 指定 hiveserver2 连接的 host -->
    <property>
        <name>hive.server2.thrift.bind.host</name>
        <value>hadoop101</value>
    </property>
    <!-- 指定 hiveserver2 连接的端口号 -->
    <property>
        <name>hive.server2.thrift.port</name>
        <value>10000</value>
    </property>
    <property>
        <name>hive.cli.print.header</name>
        <value>true</value>
    </property>
    <property>
        <name>hive.cli.print.current.db</name>
        <value>true</value>
    </property>
</configuration>
//初始化hive元数据库
[hadoop@hadoop101 hive-3.1.2]$ schematool -initSchema -dbType mysql -verbose

 我们可以在Navicat查看,初始化完成。

//配置core-site.xml
[hadoop@hadoop101 hive-3.1.2]$ sudo vim /opt/module/hadoop-3.1.3/etc/hadoop/core-site.xml
   <property>
        <name>hadoop.proxyuser.hadoop.hosts</name>
        <value>*</value>
   </property>
   <property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>*</value>
   </property>
   <property>
        <name>hadoop.proxyuser.hadoop.groups</name>
        <value>*</value>
   </property>
//配置hiveservice.sh
[hadoop@hadoop101 hive-3.1.2]$ cd bin
[hadoop@hadoop101 bin]$ vim hiveservice.sh
#!/bin/bash
HIVE_LOG_DIR=$HIVE_HOME/logs
if [ ! -d $HIVE_LOG_DIR ]
then
       mkdir -p $HIVE_LOG_DIR
fi
#检查进程是否运行正常,参数 1 为进程名,参数 2 为进程端口
function check_process()
{
       pid=$(ps -ef 2>/dev/null | grep -v grep | grep -i $1 | awk '{print $2}')
       ppid=$(netstat -nltp 2>/dev/null | grep $2 | awk '{print $7}' | cut -d '/' -f 1)
       echo $pid
       [[ "$pid" =~ "$ppid" ]] && [ "$ppid" ] && return 0 || return 1
}
function hive_start()
{
       metapid=$(check_process HiveMetastore 9083)
       cmd="nohup hive --service metastore >$HIVE_LOG_DIR/metastore.log 2>&1 &"
       [ -z "$metapid" ] && eval $cmd || echo "Metastroe 服务已启动"
       server2pid=$(check_process HiveServer2 10000)
       cmd="nohup hiveserver2 >$HIVE_LOG_DIR/hiveServer2.log 2>&1 &"
       [ -z "$server2pid" ] && eval $cmd || echo "HiveServer2 服务已启动" 
}
function hive_stop()
{
       metapid=$(check_process HiveMetastore 9083)
       [ "$metapid" ] && kill $metapid || echo "Metastore 服务未启动"
       server2pid=$(check_process HiveServer2 10000)
       [ "$server2pid" ] && kill $server2pid || echo "HiveServer2 服务未启动" 
}
case $1 in
"start")
       hive_start
       ;;
"stop")
       hive_stop
       ;;
"restart")
       hive_stop
       sleep 2
       hive_start
       ;;
"status")
       check_process HiveMetastore 9083 >/dev/null && echo "Metastore 服务运行正常" || echo "Metastore 服务运行异常"
       check_process HiveServer2 10000 >/dev/null && echo "HiveServer2 服务运行正常" || echo "HiveServer2 服务运行异常"
       ;;
*)
       echo Invalid Args!
       echo 'Usage: '$(basename $0)' start|stop|restart|status'
       ;;
esac
//授予权限
[hadoop@hadoop101 bin]$ chmod +x $HIVE_HOME/bin/hiveservice.sh 
//启动
[hadoop@hadoop101 hive-3.1.2]$ hiveservice.sh start 
//查看状态
[hadoop@hadoop101 hive-3.1.2]$ hiveservice.sh status

这一步启动可能需要比较久的时间,大家等待一会。看到如下图所示就说明启动成功了:

一定要保证两个都启动成功后再来访问hive元数据库客户端!

访问hive元数据库客户端

[hadoop@hadoop101 hive-3.1.2]$ bin/hive

hive (default)> show databases;

访问成功。

如果发现访问hive元数据库客户端失败,原因可能是hive-3.1.2/lib和/opt/module/hadoop-3.1.3/share/hadoop/common/lib中的guava版本不一致。

[hadoop@hadoop101 hive-3.1.2]$ cd lib/
[hadoop@hadoop101 lib]$ ll

我们分别查看这两个文件夹中,前者的guava是guava-19.0.jar,而后者是guava-27.0-jre.jar。我们删除19.0版本,将27.0版本放入/hive-3.1.2/lib/文件夹中。(这步一定要仔细,看清是哪个lib)

[hadoop@hadoop101 lib]$ cd /opt/module/hive-3.1.2/lib/
[hadoop@hadoop101 lib]$ rm -rf guava-19.0.jar
[hadoop@hadoop101 lib]$ cd /opt/module/hadoop-3.1.3/share/hadoop/common/lib
[hadoop@hadoop101 lib]$ cp guava-27.0-jre.jar /opt/module/hive-3.1.2/lib/

使用JDBC方式访问hive

[hadoop@hadoop101 hive-3.1.2]$ bin/beeline -u jdbc:hive2://hadoop101:10000 -n hadoop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值