欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

在Hadoop分布式集群中安装hive

程序员文章站 2022-05-07 18:56:57
...

依赖环境

hadoop分布式集群环境为上一篇中搭建好的集群环境:
一台master主机名:ubuntu-01,两台slave节点,分别是 ubuntu-01-node1、ubuntu-01-node2
与hadoop一样,先在ubuntu-01上安装,然后将文件复制到其他节点中。
安装hive之前先启动集群,三台都要启动
提前下载好文件:apache-hive-2.3.2-bin.tar.gz
由于是基于上一篇的hadoop环境,很多路径问题,这里不重复述说。

所遇到的坑(必看、必看、必看)

在上一篇Hadoop完全分布式集群环境搭建及测试中,因为用的jdk 9.0.1而出现了版本不兼容的问题,该问题同样存在hive中,会导致 ./hive 命令启动失败。因此,本人在遇到这个坑之后,才想到将jdk版本替换成老的版本 8.0,所有的问题就解决了,但文章因为是记录,因此文章中的截图文字不会再更改,旨在提醒各位:
别用jdk 8.0以后的版本别用jdk 8.0以后的版本别用jdk 8.0以后的版本

配置 hive

  • 解压hive,执行下面的命令:
cp /mnt/hgfs/linux/apache-hive-2.3.2-bin.tar.gz /local/apache-hive.tar.gz   // 复制已下载的文件至hadoop的安装同级目录下
tar zxvf apache-hive.tar.gz         // 解压到当前目录下
rm apache-hive.tar.gz           // 删除压缩包
ls                  // 查看当前目录结构

结果如下:
在Hadoop分布式集群中安装hive

  • 修改配置文件 ~/.bashrc
vim ~/.bashrc

添加下面两行

export HIVE_HOME=/home/had_user/local/apache-hive-2.3.2-bin     // 注意路径,根据自己的安装路径来
export PATH=$PATH:$HIVE_HOME/bin

在Hadoop分布式集群中安装hive
保存并退出,执行 source ~/.bashrc

安装 Mysql

  • 下载安装包: mysql-server_5.7.20-1ubuntu16.04_amd64.deb-bundle.tar
  • 解压到 /local/mysql-5.7.20
    在Hadoop分布式集群中安装hive
    查看解压后的文件,总共有11个文件,我们用到其中7个,剩下的不知道有什么用,可能是依赖。
    在Hadoop分布式集群中安装hive
  • 先安装依赖包
sudo apt-get install libnuma1
sudo apt-get install libmecab2
sudo apt-get install libaio1        // 会提示设置mysql的root帐户密码,本次设置为:admin
  • 接下来依次安装下列文件

    1. mysql-common_5.7.20-1ubuntu16.04_amd64.deb
    2. libmysqlclient20_5.7.20-1ubuntu16.04_amd64.deb
    3. libmysqlclient-dev_5.7.20-1ubuntu16.04_amd64.deb
    4. libmysqld-dev_5.7.20-1ubuntu16.04_amd64.deb
    5. mysql-community-client_5.7.20-1ubuntu16.04_amd64.deb
    6. mysql-client_5.7.20-1ubuntu16.04_amd64.deb
    7. mysql-community-server_5.7.20-1ubuntu16.04_amd64.deb
      (ps:上面是我从搜到的资料复制过来的,版本可能和大家要安装的版本不一样,但是包的顺序是这样的)

    执行安装命令:

    sudo dpkg -i mysql-common_5.7.20-1ubuntu16.04_amd64.deb libmysqlclient20_5.7.20-1ubuntu16.04_amd64.deb libmysqlclient-dev_5.7.20-1ubuntu16.04_amd64.deb libmysqld-dev_5.7.20-1ubuntu16.04_amd64.deb mysql-community-client_5.7.20-1ubuntu16.04_amd64.deb mysql-client_5.7.20-1ubuntu16.04_amd64.deb mysql-community-server_5.7.20-1ubuntu16.04_amd64.deb

    每个包名用空格 分开。
    在Hadoop分布式集群中安装hive

  • 查看是否安装成功
    执行命令 mysql -uroot -hlocalhost -padmin,成功之后,不要执行 quit
    在Hadoop分布式集群中安装hive

  • 创建可以登录mysql下的hive用户,设置密码为:hive
    依次执行下面的mysql语句:

    create user hive identified by 'hive';  // 创建hive用户。 这是mysql语句,别忘了分号
    GRANT ALL PRIVILEGES ON *.* TO 'hive'@'localhost' IDENTIFIED BY 'hive'; // 为hive用户分配所有权限
    flush privileges;
  • 使用 hive 用户登录 mysql

    mysql -uhive -hlocalhost -phive     // -hlocalhost 可以省略
    // 也可以使用 mysql -uhive -p 然后再输入密码,都行

    在Hadoop分布式集群中安装hive
    可以看到,已成功登录。

  • 创建 hive 专用数据库

    create database hive;

修改 hive 配置文件

进入到hive的配置文件目录下,找到hive-default.xml.template,另存为hive-site.xml并修改参数.
出了头文件,只保留下面的部分。

<configuration>
<property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://localhost:3306/hive?characterEncoding=UTF-8</value> // 我的这个不能用ubuntu-01代替localhost
</property>
<property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>hive</value>
</property>
<property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>hive</value>
</property>
</configuration>

上面如果将localhost改成主机名会导致,hive数据库初始化失败,最终虽然能登录hive,但不能用。

拷贝 JDBC 驱动包,不能少了这一步

下载: mysql-connector-java-5.1.45.tar.gz,将里面的 mysql-connector-java-5.1.45-bin.jar 文件复制到这个目录:

/local/apache-hive-2.3.2-bin/lib/mysql-connector-java-5.1.45-bin.jar

初始化 hive 数据库

不做这一步的话,你上面创建的hive数据库,里面是没有tables的。进入目录 /local/apache-hive-2.3.2-bin/bin,执行命令;

schematool -dbType mysql -initSchema

在Hadoop分布式集群中安装hive
留意字眼: “schematool completed” ,接下来去看看是否初始化成功。

登录mysql查看hive数据库是否有表结构

执行命令:

mysql uroot -padmin
mysql> use hive;
mysql> show tables;

在Hadoop分布式集群中安装hive
可以看到,初始化成功,hive数据库里有表。这里再提醒一下,由于我的hive-site.xml配置中之前用的是ubuntu-01,初始化失败,这里会提示 Empty,将其改成 localhost 之后,再初始化,就成功了。

测试 hive

进入目录 /local/apache-hive-2.3.2-bin/bin,执行下面的命令:

./hive

在Hadoop分布式集群中安装hive
看到没,jdk 版本降下来之后,连警告信息都没有了。

依次执行下面的命令,来测试是否可以正常使用 hive,使用的是 HQL 语句。

show databases;         // 结果中只能看到一个 default 数据库
create database hive_test_db;   // 创建一个名为 hive_test_db 的数据库
show databases;     // 查看数据库是否建立成功,由图中可以看到,成功了。
use hive_test_db;   // 切换数据库
show tables;        // 查看当前数据库下面的表
create table test(ip int, name string) row format delimited fields terminated by '\t'; // 创建一个表,参数不懂,另自学。
show tables;        // 查看表是否创建成功,由图中可以看到,成功了。
quit        // 退出hive操作,与 mysql 一致。

在Hadoop分布式集群中安装hive

两个节点slave的配置

我们上面是将 hive 配置好,然后分发至各个节点的,然而当我在节点测试的时候,失败了。经过一番搜索得到一下结论:

  1. master(ubuntu-01)主机中,也就是服务器端,hive-site.xml 的配置,应当使用 localhost:3306

  2. slave(ubuntu-01-node1、ubuntu-01-node2)节点中,也就是客户端,hive-site.xml 的配置,则应使用 ubuntu-01:3306

  3. slave节点的 hive-site.xml 除上述配置有差异之外,还应该添加下面的这个配置:

    <property>  
        <name>hive.metastore.uris</name>  
        <value>thrift://ubuntu-01:9083</value>  
    </property>
  4. 在使用客户端访问 hive 之前,在主机中执行 hive --service metastore & 来启动metastore服务
    在Hadoop分布式集群中安装hive
    可以看到比之前多了一个进程。

  5. 下面通过截图对照各个配置文件之间的差异

    • ubuntu-01 的配置
      在Hadoop分布式集群中安装hive

    • ubuntu-01-node1 中的配置,与 ubuntu-01-node2 一致,因此 ubuntu-01-node2 不再截图
      在Hadoop分布式集群中安装hive

    • 还应补充下面这段
      在Hadoop分布式集群中安装hive

  6. 在slave节点(客户端)中访问hive
    在Hadoop分布式集群中安装hive

    可以看到之前在 ubuntu-01 主机中所创建的hive_test_db数据库。

至此,hadoop集群下的hive配置完成。