软件版本
-
电脑系统: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为次节点
安装前提
- 安装jdk,并配置好Linux环境变量。
- 安装好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。
-
-
查看进程
ps -f | grep mysqld
-
杀死进程
pkill -9 mysqld
-
查看是否已安装MariaDB、或一些MariaDB相关的模块
rpm -qa | grep mariadb
-
卸载MariaDB
yum -y remove mariadb*
-
再次检查卸载干净,若已看不到相关mariadb打印了即可
rpm -qa | grep mariadb
将mysql安装包上传到node1
-
本地下载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
-
将安装包上传到node1中的 /app 文件夹下
scp -r ~/Desktop/mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz lyh@10.211.55.18:/app
安装依赖libaio
-
查看是否已经安装libaio
ps aux | grep libaio ps -ef | grep libaio
-
没有的话,就安装:
yum install -y libaio yum install -y cmake make gcc gcc-c++ libaio ncurses ncurses-devel
安装 MySQL
-
查询全部用户(检查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
-
创建用户和组(若不存在,则创建mysql组和用户)
-
创建mysql用户组
groupadd mysql
-
创建一个用户名为mysql的用户,并加入mysql用户组
useradd -g mysql mysql
-
将mysql用户的密码指定为 123456
passwd mysql
-
-
解压刚刚下载mysql安装包
cd /app
tar -zxvf mysql-5.7.30-linux-glibc2.12-x86_64.tar.gz
-
创建为mysql软链接
ln -s mysql-5.7.30 mysql
-
更改所属的组和用户
cd /app
chown -R mysql mysql/ chgrp -R mysql mysql/
cd mysql/
mkdir data chown -R mysql:mysql data
-
在 /etc 文件夹下创建my.cnf文件
touch /etc/my.cnf
chown 777 /etc/my.cnf
-
编辑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
-
进入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
-
启动mysql
/etc/init.d/mysqld restart
说明:
启动过程中可能会出现如下问题:
解决办法:
-
找到是否已经有进程占用
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
-
关闭进程
kill -9 15394
-
确认是否还占用
ps aux|grep mysql
root 15436 0.0 0.0 112824 976 pts/0 S+ 05:34 0:00 grep --color=auto mysql
-
重启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
查看mysql状态
service mysqld status
修改配置文件
vim /etc/profile
修改/etc/profile,在最后添加如下内容
export PATH=$PATH:/app/mysql/bin
保存并退出,然后是修改内容生效
source /etc/profile
获取MySQL初始密码
cat /root/.mysql_secret
初始密码:
#(6aFtq<zLi2
修改MySQL初始密码
-
进入mysql命令行
mysql -uroot -p
然后输入获取到的初始密码,如这里获取到的初始密码为:
#(6aFtq<zLi2
-
没有修改密码的时候
-
在mysql命令行修改密码
-
设置密码为:123456
set PASSWORD = PASSWORD('123456');
-
更新
flush privileges;
-
-
验证新密码是否登录成功
mysql -uroot -p123456
添加远程访问权限
use mysql;
update user set host='%' where user='root';
select host,user from user;
重启MySQL,使刚刚的配置生效:
/etc/init.d/mysqld restart
node1 安装并配置Hive
下载Hive、上传到node1、2、3
-
下载 Hive
https://archive.apache.org/dist/hive/hive-2.3.3/apache-hive-2.3.3-bin.tar.gz
-
将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
-
解压apache-hive-2.3.3-bin.tar.gz
tar -zxvf apache-hive-2.3.3-bin.tar.gz
-
重命名 apache-hive-2.3.3-bin
mv apache-hive-2.3.3-bin hive-2.3.3
-
创建软链接
ln -s hive-2.3.3 hive
-
删除apache-hive-2.3.3-bin.tar.gz
rm -rf apache-hive-2.3.3-bin.tar.gz
配置 Hive 环境
-
进入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';
-
使用 hive 用户登录 mysql
mysql -uhive -p123456
-
创建 hive 专用数据库
create database hive;
-
-
笨蛋下载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
-
配置Linux环境变量(node1、node2、node3都需要配置)
vim /etc/profile
export HIVE_HOME=/app/hive export PATH=$PATH:$HIVE_HOME/bin
source /etc/profile
-
创建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,但不能用。
-
初始化 hive 数据库(node1)
cd /app/hive/bin
schematool -dbType mysql -initSchema
-
登录hive用户,查看hive数据库中是否有初始化生成的表(node1)
mysql -uhive -p123456
use hive;
show tables;
-
测试hive(node1)
-
首先需要启动Hadoop
start-all.sh
-
进入hive命令行
hive
由于配置了hive环境变量,所有没有固定目录即可进入hive命令行
-
hive命令行执行如下操作
-- 查看database show databases;
-- 查看table show tables;
-- 创建一个数据库 create database hive_test_db;
-- quit命令退出hive命令行,只能说quit,使用exit命令不可以。 quit;
-
node2、node3中 hive 的配置
方法1
将node1中配置好的hive文件分发到node2、node3,然后稍做修改。
-
将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/
-
然后修改部分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
-
创建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命令查看进程:
多了一个进程:RunJar
Hive的安装和基本配置,已经完成。
关闭hive集群:hive --service hiveserver2 &