1 准备环境
环境需求
centos7.6
hadoop-2.7.7
glibc2.12
本文部署。
hive 2.3.4
mysql 5.7.38
参考连接
2 Mysql 5.7.38部署
2.1 下载
查看glibc版本
# 查看命令
ldd --version
# 版本信息
ldd (GNU libc) 2.17
Copyright (C) 2012 Free Software Foundation, Inc.
This is free software; see the source for copying conditions. There is NO
warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
Written by Roland McGrath and Ulrich Drepper.
在有网的环境下载 mysql 的安装包:
https://dev.mysql.com/downloads/mysql/5.7.html
并把 安装包mysql-5.7.20-linux-glibc2.12-x86_64.tar.gz
拷贝到主机安装部署目录/root/software目录下,下载时对应前面查看的glibc版本信息,不然需要升级glibc版本,版本向下兼容。
2.2 安装
2.2.1 创建用户
为了方便数据库管理,对于安装的MySQL数据库,生产上我们都会建立一个mysql用户和mysql用户组:
# 添加mysql用户组
groupadd mysql
# 添加mysql用户
useradd -g mysql mysql -d /home/mysql
# 修改mysql用户的登陆密码
passwd mysql
2.2.2 解压缩
在/root/software/中解压压缩包,并改名为mysql。
cd /root/software
tar -xzvf mysql-5.7.38-linux-glibc2.5-x86_64.tar.gz (我的下载目录为 data/software)
# 软件链接为mysql
ln -s mysql-5.7.38-linux-glibc2.5-x86_64 mysql
并赋予用户读写权限(此处也可以换位你的用户)
chown -R mysql:mysql mysql/
2.2.3 创建配置文件
编辑配置文件(如有该配置文件,请自行备份)
vim /etc/my.cnf
复制以下内容:
[client]
port = 3306
socket = /tmp/mysql.sock
[mysqld]
character_set_server=utf8
init_connect='SET NAMES utf8'
basedir=/root/software/mysql
datadir=/root/software/mysql/data
socket=/tmp/mysql.sock
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
#不区分大小写
lower_case_table_names = 1
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION
max_connections=5000
default-time_zone = '+8:00'
2.2.4 初始化文件
初始化log文件,防止没有权限。
#创建mysqld的日志文件
cd /var/log/
touch mysqld.log
chmod 777 mysqld.log
chown mysql:mysql mysqld.log
初始化pid文件,防止没有权限。
#创建mysqld.pid配置文件
cd /var/run/
mkdir mysqld
cd mysqld
touch mysqld.pid
# 给权限
cd /var/run/
chmod 777 mysqld
chown -R mysql:mysql ./mysqld
初始化数据库
# 初始化数据库,并指定启动mysql的用户,否则就会在启动MySQL时出现权限不足的问题
/root/software/mysql/bin/mysqld --initialize --user=mysql --basedir=/root/software/mysql --datadir=/root/software/mysql/data --lc_messages_dir=/root/software/mysql/share --lc_messages=en_US
初始化完成后,在my.cnf
中配置的datadir
目录(/var/log/mysqld.log
)下生成一个error.log
文件,里面记录了root
用户的随机密码。
cat /var/log/mysqld.log
执行后记录最后一点:root@localhost: xxxxx
。 这里的xxxxx
就是初始密码。
2.2.5 启动数据库
启动数据库(建议mysql用户启动)
#源目录启动:
/root/software/mysql/support-files/mysql.server start
并设置开机自启动服务:
# 复制启动脚本到资源目录
cp /root/software/mysql/support-files/mysql.server /etc/rc.d/init.d/mysqld
# 增加mysqld服务控制脚本执行权限
chmod +x /etc/rc.d/init.d/mysqld
# 将mysqld服务加入到系统服务
chkconfig --add mysqld
# 检查mysqld服务是否已经生效
chkconfig --list mysqld
# 切换至mysql用户,启动mysql,或者稍后下一步再启动。
su - mysql
service mysqld start
从此就可以使用service mysqld命令启动/停止服务:
su - mysql
service mysqld start/stop/restart
2.2.6 配置环境变量
为了更好的操作mysql,配置环境变量。
# 切换至mysql用户
su - mysql
vi .bash_profile
# 修改配置文件,增加export PATH=$PATH:/root/software/mysql/bin
# 立即生效
source .bash_profile
2.2.7 登陆,修改密码
必须修改初始的随机密码:
# 系统默认会查找/usr/bin下的命令;建立一个链接文件。(该步骤在root下执行,mysql用户因已修改bash_profile,可以使用mysql登录命令,该步骤方便root或其他用户使用mysql命令)
ln -s /root/software/mysql/bin/mysql /usr/bin
# 登陆mysql的root用户
mysql -uroot -p
# 输入2.4生成的 随机密码
# 修改root用户密码为123456
set password for root@localhost=password("123456");
2.2.8 远程客户端root用户登录
数据不设置该步骤时,客户端报错
Host is not allowed to connect to this MySQL server
mysql -uroot -p
# 输入上一步设置的密码
use mysql;
update user set host = '%' where user = 'root';
FLUSH PRIVILEGES;
2.3 使用mysql
2.3.1 用户建立
以下命令只需要改动 用户名 和密码:
grant all privileges on *.* to '新用户名'@'%' identified by '新密码';
flush privileges;
其中通配符%表示让该用户可以从任意远程主机登陆。
2.3.1 创建数据库
登陆用户后:
-- 查询现有的数据库:
show databases;
-- 创建
CREATE DATABASE 数据库名;
-- 进入数据库:
use 数据库名;
-- 查看所有的表
show tables;
-- 退出:
exit
3 hive 2.3.4部署
3.1 下载
http://archive.apache.org/dist/hive/hive-2.3.4/
下载源码包
3.2 Mysql数据库hive配置
创建hive账号
-- 创建hive用户
create user 'hive' identified by 'hive';
-- 将mysql所有权限授予hive账户 hive是密码
grant all on *.* to 'hive'@'%' identified by 'hive';
-- 使操作命令生效
flush privileges;
-- 检查用户是否创建
select host,user,authentication_string from mysql.user;
使用hive用户登录mysql数据库:
mysql -h dbhost -uhive –p
库配置
-- 创建数据库hive
create database hive;
-- 查看所有数据库
show databases;
3.3 HIVE安装
3.3.1 上传并解压Hive
# 进入上传目录。这边是/root/software
cd /root/software
# 解压
tar xzvf apache-hive-2.3.4-bin.tar.gz
# 创建软连接,方便后期使用
ln -s apache-hive-2.3.4-bin hive
3.3.2 配置hive的环境变量(root用户)
# 设置HIVE系统环境变量
vi /etc/profile
# 添加如下配置
export HIVE_HOME=/root/software/hive
export HIVE_CONF_DIR=/root/software/hive/conf
export PATH=$HIVE_HOME/bin:$PATH
# 使配置文件生效
source /etc/profile
3.3.3 生成hive配置文件(root用户)
# 进入配置目录
cd $HIVE_CONF_DIR
# 将 hive-default.xml.template 为模板,拷贝为 hive-site.xml
cp hive-default.xml.template hive-site.xml
# 将 hive-env.sh.template 拷贝为 hive-env.sh
cp hive-env.sh.template hive-env.sh
3.3.4 配置hive-site.xml
# 配置Hive本地临时目录
# 进入Hive目录
cd $HIVE_HOME
mkdir tmp/
chmod -R 777 tmp/
# 修改配置
cd $HIVE_CONF_DIR
# 替换${system:java.io.tmpdir} 替换为 /root/software/hive/tmp
sed -i 's/\${system:java.io.tmpdir}\//\/root\/software\/hive\/tmp\//g' hive-site.xml
# 配置 hive的用户名
# 替换${system:user.name}替换为hadoop
sed -i 's/\${system:user.name}/hadoop/g' hive-site.xml
# 配置 hive 数据库配置
# javax.jdo.option.ConnectionURL 该参数修改为 jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
# javax.jdo.option.ConnectionDriverName 该参数修改为 com.mysql.jdbc.Driver
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
# javax.jdo.option.ConnectionUserName 该参数修改为 hive
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>hive</value>
<description>Username to use against metastore database</description>
</property>
# javax.jdo.option.ConnectionPassword 该参数修改为 hive
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>hive</value>
<description>password to use against metastore database</description>
</property>
3.3.5 上传MySQL驱动包
下载驱动包
MySQL :: Download MySQL Connector/J (Archived Versions)
解压文件后取jar包
上传驱动包并放置到$HIVE_HOME/lib目录下
cp mysql-connector-java-5.1.49.jar $HIVE_HOME/lib/
3.3.6 配置hive-env.sh
# 进入配置目录
cd $HIVE_CONF_DIR
# 编辑hive-env启动文件
vi hive-env.sh
# 添加如下配置
export HADOOP_HOME=/root/software/hadoop
export HIVE_CONF_DIR=/root/software/hive/conf
export HIVE_AUX_JARS_PATH=/root/software/hive/lib
3.3.7 Hive文件目录权限给Hadoop
# 进入软件安装目录
cd /root/software
# 权限变更
chown -R hadoop.hadoop hive/
3.3.8 Hive数据库初始化
# hadoop环境下
su - hadoop
# 数据库初始化
cd $HIVE_HOME/bin
schematool -initSchema -dbType mysql
数据库初始化出现以下报错时:
解决方法:
cd $HIVE_CONF_DIR
vi hive-site.xml
# 修改javax.jdo.option.ConnectionURL 该参数修改为 jdbc:mysql://localhost:3306/hive?useSSL=false
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?useSSL=false</value>
<description>
JDBC connect string for a JDBC metastore.
To use SSL to encrypt/authenticate the connection, provide database-specific SSL flag in the connection URL.
For example, jdbc:postgresql://myhost/db?ssl=true for postgres database.
</description>
</property>
初始化正常如下:
3.3.9 启动Hive
Hive metastore启动 的命令:
hive --service metastore &
Hive 启动hiveserver2 的命令:
hive --service hiveserver2 &
本地启动hive
# hadoop环境下
su - hadoop
# 数据库初始化
cd $HIVE_HOME/bin
./hive
启动hive时有如下报错:
解决方法
hive通过jdbc访问hive数据库连接中的用户名
需要修改HDFS中/tmp目录拥有者(root用户下执行效果最好)
hdfs dfs -chown -R hive:hive /tmp
正常启动
3.3.10 测试Hive
a)创建数据库
hive> create database user_test;
b)创建数据表
hive> create table user_sample(
user_num bigint,
user_name string,
user_gender string,
user_age int
) row format delimited fields terminated by ',';
c)创建文件
cd /root/software/hadoop
vim user_sample.txt
herry,F,22
0614,Smith,M,25
0615,Tracy,F,24
0616,Lucy,F,19
0617,Sherry,F,23
d)加载数据
hive> load data local inpath '/root/software/hadoop/user_sample.txt' into table user_sample;
e)查看数据
hive> select * from user_sample;
f)统计条数
hive> select count(*) from user_sample;