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

本地如何装hive_本地如何装hive

并把 安装包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

本地如何装hive_bc_02

执行后记录最后一点: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/

本地如何装hive_数据分析_03

下载源码包

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;

本地如何装hive_本地如何装hive_04

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_hive_05

上传驱动包并放置到$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

数据库初始化出现以下报错时:

本地如何装hive_本地如何装hive_06

 解决方法:

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>

初始化正常如下:

本地如何装hive_hive_07

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_hive_08

解决方法

hive通过jdbc访问hive数据库连接中的用户名
需要修改HDFS中/tmp目录拥有者(root用户下执行效果最好)

hdfs dfs -chown -R hive:hive /tmp

 

正常启动

本地如何装hive_bc_09

 

3.3.10 测试Hive

a)创建数据库

hive> create database user_test;

本地如何装hive_mysql_10

 

b)创建数据表

hive> create table user_sample(
     user_num bigint,
     user_name string,
     user_gender string,
     user_age int
     ) row format delimited fields terminated by ',';

本地如何装hive_本地如何装hive_11

 

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;

本地如何装hive_hive_12

e)查看数据

hive> select * from user_sample;

本地如何装hive_hive_13

 

f)统计条数

hive> select count(*) from user_sample;

本地如何装hive_bc_14