Hadoop 分布式集群中安装 Hive(CentOS 7系统)

软件版本

  • 电脑系统:macOS 10.14.6

  • 虚拟机软件:Parallels Desktop15

  • Hadoop各节点节点操作系统:CentOS-7-x86_64-Minimal-1908.iso

  • CentOS 7 JDK版本:jdk1.8.0_162

  • Hadoop版本:hadoop-2.7.7

  • Hive版本:hive-2.3.3

  • MySQL版本:mysql-5.7.30


环境配置说明

  • 电脑配置:MacBook Pro 13(8G + 256G)

  • 三台 CentOS 7 配置:内存1G、硬盘13G(与Mac完全隔离的虚拟机)

  • 三台 CentOS 7 的名字及IP:node1(10.211.55.18)、node2(10.211.55.19)、node3(10.211.55.20)

  • 三台虚拟机的用户名:lyh

  • node为主结点、node2、node3为次节点


安装前提

  1. 安装jdk,并配置好Linux环境变量。
  2. 安装好Hadoop完全分布式

参考文献:Hadoop分布式集群搭建


安装并配置MySQL

卸载node1、node2、node3中系统自带的Maria DB

  • 说明:

    • 三台node都可以不用卸载Maria DB,使用Maria DB。

    • 也可以不用卸载node2、node3中的Maria DB,只卸载node1中的Maria DB,因为node2、node3中的Maria DB不影响Hive的搭建。

    • 本博文教程中,MySQL只在node1中安装。卸载node1、node2、node3中系统自带的Maria DB。


  1. 查看进程

    ps -f | grep mysqld
    
  2. 杀死进程

    pkill -9 mysqld
    
  3. 查看是否已安装MariaDB、或一些MariaDB相关的模块

    rpm -qa | grep mariadb
    
  4. 卸载MariaDB

    yum -y remove mariadb*
    
  5. 再次检查卸载干净,若已看不到相关mariadb打印了即可

    rpm -qa | grep mariadb
    

将mysql安装包上传到node1

  1. 本地下载mysql-5.7.30安装包(下载到了桌面)

    http://ftp.ntu.edu.tw/MySQL/Downloads/MySQL-5.7/mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz

  2. 将安装包上传到node1中的 /app 文件夹下

    scp -r ~/Desktop/mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz lyh@10.211.55.18:/app
    

安装依赖libaio

  1. 查看是否已经安装libaio

    ps aux | grep libaio
    ps -ef | grep libaio
    
  2. 没有的话,就安装:

    yum install -y libaio
    yum install -y cmake make gcc gcc-c++ libaio ncurses ncurses-devel
    

安装 MySQL

  1. 查询全部用户(检查mysql组和用户是否存在)

    cat /etc/passwd|grep -v nologin|grep -v halt|grep -v shutdown|awk -F ":" '{print $1 "|" $3 "|" $4}' | more
    
    # 我这里显示如下:
    root|0|0
    sync|5|0
    lyh|1000|1000
    

    或者:

    cat /etc/group | grep mysql
    cat /etc/passwd | grep mysql
    
  2. 创建用户和组(若不存在,则创建mysql组和用户)

    • 创建mysql用户组

      groupadd mysql
      
    • 创建一个用户名为mysql的用户,并加入mysql用户组

      useradd -g mysql mysql
      
    • 将mysql用户的密码指定为 123456

      passwd mysql
      
      20200704164733
  3. 解压刚刚下载mysql安装包

    cd /app
    
    tar -zxvf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
    
  4. 创建为mysql软链接

    ln -s mysql-5.7.30 mysql
    
  5. 更改所属的组和用户

    cd /app
    
    chown -R mysql mysql/
    chgrp -R mysql mysql/
    
    cd mysql/
    
    mkdir data
    chown -R mysql:mysql data
    
  6. 在 /etc 文件夹下创建my.cnf文件

    touch /etc/my.cnf
    
    chown 777 /etc/my.cnf
    
  7. 编辑my.cnf文件

    vim /etc/my.cnf
    

    添加如下内容:

    [mysql]
    socket=/var/lib/mysql/mysql.sock
    # set mysql client default chararter
    default-character-set=utf8
    
    [mysqld]
    skip-grant-tables
    socket=/var/lib/mysql/mysql.sock
    # set mysql server port
    port = 3306
    # set mysql install base dir
    basedir=/app/mysql
    # set the data store dir
    datadir=/app/mysql/data
    # set the number of allow max connnection
    max_connections=200
    # set server charactre default encoding
    character-set-server=utf8
    # the storage engine
    default-storage-engine=INNODB
    lower_case_table_names=1
    max_allowed_packet=16M
    explicit_defaults_for_timestamp=true
    
    [mysql.server]
    user=mysql
    basedir=/app/mysql
    
  8. 进入mysql文件夹,安装mysql

    cd /app/mysql
    
    bin/mysql_install_db --user=mysql --basedir=/app/mysql/ --datadir=/app/mysql/data/
    
    cp ./support-files/mysql.server /etc/init.d/mysqld
    
    chmod +x /etc/init.d/mysqld
    
    mkdir /var/lib/mysql
    
    chmod 777 /var/lib/mysql
    
  9. 启动mysql

    /etc/init.d/mysqld restart
    

    说明:

    启动过程中可能会出现如下问题:

    20200704174030

    解决办法:

    1. 找到是否已经有进程占用

      ps aux|grep mysql
      
      root     15163  0.0  0.1 113416  1604 pts/0    S    05:31   0:00 /bin/sh /app/mysql/bin/mysqld_safe --datadir=/app/mysql/data --pid-file=/app/mysql/data/node1.pid
      mysql    15394  0.3 17.0 1119928 172140 pts/0  Sl   05:31   0:00 /app/mysql/bin/mysqld --basedir=/app/mysql --datadir=/app/mysql/data --plugin-dir=/app/mysql/lib/plugin --user=mysql --log-error=node1.err --pid-file=/app/mysql/data/node1.pid --socket=/var/lib/mysql/mysql.sock --port=3306
      root     15425  0.0  0.0 112828   980 pts/0    R+   05:33   0:00 grep --color=auto mysql
      
    2. 关闭进程

      kill -9 15394
      
    3. 确认是否还占用

      ps aux|grep mysql
      
      root     15436  0.0  0.0 112824   976 pts/0    S+   05:34   0:00 grep --color=auto mysql
      
    4. 重启mysql

      /etc/init.d/mysqld restart
      

设置开机启动MySQL

cd /app/mysql
chkconfig --level 35 mysqld on
chkconfig --list mysqld
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig --list mysqld
20200704175143

查看mysql状态

service mysqld status
20200704175312

修改配置文件

vim /etc/profile

修改/etc/profile,在最后添加如下内容

export PATH=$PATH:/app/mysql/bin

保存并退出,然后是修改内容生效

source /etc/profile

获取MySQL初始密码

cat /root/.mysql_secret
20200704175922
初始密码:
#(6aFtq<zLi2

修改MySQL初始密码

  1. 进入mysql命令行

    mysql -uroot -p
    

    然后输入获取到的初始密码,如这里获取到的初始密码为:#(6aFtq<zLi2

    20200704180558
  2. 没有修改密码的时候

    20200709130914
  3. 在mysql命令行修改密码

    • 设置密码为:123456

      set PASSWORD = PASSWORD('123456');
      
    • 更新

      flush privileges;
      
    20200704181025
  4. 验证新密码是否登录成功

    mysql -uroot -p123456
    
    20200709131008 20200709131035

添加远程访问权限

use mysql;
update user set host='%' where user='root';
select host,user from user;
20200704184434

重启MySQL,使刚刚的配置生效:

/etc/init.d/mysqld restart

node1 安装并配置Hive

下载Hive、上传到node1、2、3

  1. 下载 Hive

    https://archive.apache.org/dist/hive/hive-2.3.3/apache-hive-2.3.3-bin.tar.gz

  2. 将Hi 册上传到node1、node2、node3的 /app 文件夹下

    scp -r ~/Desktop/apache-hive-2.3.3-bin.tar.gz lyh@10.211.55.18:/app
    
    scp -r ~/Desktop/apache-hive-2.3.3-bin.tar.gz lyh@10.211.55.19:/app
    
    scp -r ~/Desktop/apache-hive-2.3.3-bin.tar.gz lyh@10.211.55.20:/app
    
  3. 解压apache-hive-2.3.3-bin.tar.gz

    tar -zxvf apache-hive-2.3.3-bin.tar.gz
    
  4. 重命名 apache-hive-2.3.3-bin

    mv apache-hive-2.3.3-bin hive-2.3.3
    
  5. 创建软链接

    ln -s hive-2.3.3 hive
    
  6. 删除apache-hive-2.3.3-bin.tar.gz

    rm -rf apache-hive-2.3.3-bin.tar.gz
    

配置 Hive 环境

  1. 进入mysql命令行(node1)

    • 创建可以登录mysql下的hive用户,密码设置为 123456

      mysql -uroot -p123456
      
      USE mysql;
      
      -- 用户名:hive    密码:123456
      CREATE USER hive IDENTIFIED BY '123456';
      
      -- 为 hive 用户分配所有权限,该用户可以在任何电脑上登录 mysql 服务器
      GRANT ALL PRIVILEGES ON *.* TO 'hive'@'%' IDENTIFIED BY 'hive';
      
      20200704212830
    • 使用 hive 用户登录 mysql

      mysql -uhive -p123456
      
    • 创建 hive 专用数据库

      create database hive;
      
  2. 笨蛋下载mysql-connector-java-5.1.48.jar

    将本地下载好的mysql-connector-java-5.1.48.jar上传到node1的/app/hive/lib 目录下

    scp -r ~/Desktop/mysql-connector-java-5.1.48.jar lyh@10.211.55.18:/app/hive/lib
    
  3. 配置Linux环境变量(node1、node2、node3都需要配置)

    vim /etc/profile
    
    export HIVE_HOME=/app/hive
    export PATH=$PATH:$HIVE_HOME/bin
    
    source /etc/profile
    
  4. 创建hive-site.xml并编辑(node1)

    cd /app/hive/conf
    
    vim hive-site.xml
    

    添加如下内容

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
      			<!-- 连接mysql地址 -->
            <property>
                    <name>javax.jdo.option.ConnectionURL</name>
                    <value>jdbc:mysql://localhost:3306/hive?useSSL=false</value>
            </property>
            
      			<!-- 数据库驱动 -->
            <property>
                    <name>javax.jdo.otion.ConnectionDriverName</name>
                    <value>com.mysql.jdbc.Driver</value>
    				</property>
    
      			<!-- 连接MySQL用户名 -->
            <property>
                    <name>javax.jdo.option.ConnectionUserName</name>
                    <value>hive</value>
            </property>
            
      			<!-- 连接MySQL密码 -->
            <property>
                    <name>javax.jdo.option.ConnectionPassword</name>
                    <value>123456</value>
            </property>
    </configuration>
    

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

  5. 初始化 hive 数据库(node1)

    cd /app/hive/bin
    
    schematool -dbType mysql -initSchema
    
  6. 登录hive用户,查看hive数据库中是否有初始化生成的表(node1)

    mysql -uhive -p123456
    
    use hive;
    
    show tables;
    
    20200704223542
  7. 测试hive(node1)

    • 首先需要启动Hadoop

      start-all.sh
      
    • 进入hive命令行

      hive
      

      由于配置了hive环境变量,所有没有固定目录即可进入hive命令行

    • hive命令行执行如下操作

      -- 查看database
      show databases;
      
      20200704224837
      -- 查看table
      show tables;
      
      20200704225013
      -- 创建一个数据库
      create database hive_test_db;
      
      20200704224930
      -- quit命令退出hive命令行,只能说quit,使用exit命令不可以。
      quit;
      

node2、node3中 hive 的配置

方法1

将node1中配置好的hive文件分发到node2、node3,然后稍做修改。

  1. 将node1中的hive文件夹分发到node2、node3

    cd /app
    
    scp -r hive-2.3.3/ lyh@node2:/app/hive-2.3.3/
    
    scp -r hive-2.3.3/ lyh@node3:/app/hive-2.3.3/
    
  2. 然后修改部分hive-site.xml 的配置(node2、node3都一样的配置)

    cd /app/hive
    
    vim hive-site.xml
    

    修改连接mysql地址

    <!-- 连接mysql地址 -->
    <property>
            <name>javax.jdo.option.ConnectionURL</name>
            <value>jdbc:mysql://node1:3306/hive?useSSL=false</value>
    </property>
    

    添加如下内容

    <!-- 指定多个 remote Metoresores -->
    <property>  
            <name>hive.metastore.uris</name>  
            <value>thrift://node1:9083</value>  
    </property>
    

方法2

  1. 创建hive-site.xml并编辑(node2、node3)

    cd /app/hive/conf
    
    vim hive-site.xml
    

    添加如下内容

    <?xml version="1.0" encoding="UTF-8" standalone="no"?>
    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
    <configuration>
                            <!-- 连接mysql地址 -->
            <property>
                    <name>javax.jdo.option.ConnectionURL</name>
                    <value>jdbc:mysql://node1:3306/hive?useSSL=false</value>
            </property>
    
                            <!-- 数据库驱动 -->
            <property>
                    <name>javax.jdo.otion.ConnectionDriverName</name>
                    <value>com.mysql.jdbc.Driver</value>
                                    </property>
    
                            <!-- 连接MySQL用户名 -->
            <property>
                    <name>javax.jdo.option.ConnectionUserName</name>
                    <value>hive</value>
            </property>
    
                            <!-- 连接MySQL密码 -->
            <property>
                    <name>javax.jdo.option.ConnectionPassword</name>
                    <value>123456</value>
            </property>
    
                            <!-- Hive 连接到其中一个 URI,以对 remote Metastore(以逗号分隔的 URI 列表)发出元数据请求 -->
            <property>
                    <name>hive.metastore.uris</name>
                    <value>thrift://node1:9083</value>
            </property>
    </configuration>
    

提示:在使用客户端访问 hive 之前,在主机中执行 hive --service metastore & 来启动metastore服务。这个时候,node2、node3使用hive命令了,数据库是node1中的hive数据库

执行了 hive --service metastore &之后,node1中使用jps命令查看进程:

20200704233427

多了一个进程:RunJar


Hive的安装和基本配置,已经完成。


关闭hive集群:hive --service hiveserver2 &

参考文献

  1. centos7卸载mariadb 安装mysql
  2. Linux 系统安装 MySQL 的官方文档
  3. centos7下使用mysql离线安装包安装mysql5.7
  4. 在Hadoop分布式集群中安装hive
  5. Apache Hive 中文手册
posted @ 2021-03-04 19:10  LeeHua  阅读(2097)  评论(0编辑  收藏  举报