Hive的安装与部署(MySQL作为元数据库)

一、Hive简介

Hive是一个基于 Hadoop的文件系统上的数据仓库架构。它为数据仓库的管理提供了许多功能:数据 ETL (抽取、转换和加载)工具、数据存储管理和大型数据集的查询与分析能力。同时 Hive 还定义了类 SQL 的语言 ― Hive QL , Hive QL 允许用户进行和 SQL 相似的操作。 Hive QL 还允许开发人员方便地使用 mapper 和 reducer 操作,这样对 MapReduce 框架是一个强有力的支持。

由干 Hadoop 是批量处理系统,任务是高延迟性的,所以在任务提交和处理过程中会消耗一些时间成本。同样,即使 Hive 处理的数据集非常小(比如几百 MB ) ,在执行时也会出现延迟现象。这样, Hive 的性能就不可能很好地和传统的 Oracle 数据库进行比较了。 Hive 不能提供数据排序和查询cache功能,也不提供在线事务处理,不提供实时的查询和记录级的更新,但 Hive 能更好地处理不变的大规模数据集(例如网络日志)上的批量任务。所以, Hive 最大的价值是可扩展性(基于 Hadoop 平台,可以自动适应机器数目和数据量的动态变化)、可延展性(结合 MaPReduce 和用户定义的函数库),并且拥有良好的容错性和低约束的数据输入格式。

二、Hive 的数据存储

Hive 的存储是建立在 Hadoop 文件系统之上的。 Hive 本身没有专门的数据存储格式,也不能为数据建立索引,用户可以非常自由地组织 Hive 中的表,只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符就可以解析数据了。 Hive 中主要包含四类数据模型:表( Table )、外部表( Extemal Table )、分区( P 叭 ition ) 和桶( Bucket )。 Hive 中的表和数据库中的表在概念上是类似的,每个表在 Hive 中都有一个对应的存储目录。例如,一个表 htable 在 HDFS 中的路径为阳区 tawarehouse / h table ,其中, / datawarehouse 是 hivc 一 sitc . xml 配置文件中由${ hive . metastore . warehouse . dir }指定的数据仓库的目录,所有的表数据(除了外部表)都保存在这个目录中。

三、Hive 的元数据存储

由于 Hive 的元数据可能要面临不断的更新、修改和读取,所以它显然不适合使用 Hadoop 文件系统进行存储。目前 Hive 将元数据存储在 RDBMS 中,比如 MySQL 、 Derby 中, Hive 有三种模式可以连接到 Derby 数据库: l ) Single User Mode ,此模式连接到一个 In - memo 尽(内存)数据库 Derby ,一般用于单元测试; 2 ) Multi User Modc ,通过网络连接到一个数据库中,是最常使用的模式; 3 ) Remote Server Mode ,用于非 Java 客户端访问元数据库,在服务器端启动一个 MetaStoreServer ,客户端利用 Thrift 协议通过 MetaStoreServer 访问元数据库。

四、系统环境

[hadoop@MASTER ~]$ cat /etc/redhat-release 
CentOS release 6.6 (Final)

本机已安装hadoop

主机名       IP

MASTER   192.168.231.160

SLAVER01 192.168.231.161

SLAVER02 192.168.231.162

五、mysql5.5.62在非root用户下二进制安装

(也可以在root用户下直接Yum安装,更方便,但是也要创建hive数据库,及hive用户,可以参考下面的)

我的hadoop是在hadoop用户目录下创建的,所以mysql及Hive也安装在hadoop用户目录下。

扫描二维码关注公众号,回复: 5633495 查看本文章

1.解压

tar xf mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz
mv mysql-5.5.62-linux-glibc2.12-x86_64 mysql

2.编辑mysql配置文件my.cnf

cd mysql/support-files/
cp my-huge.cnf my.cnf
vim my.cnf 
#添加入下内容
[client]
#password       = your_password
port            = 3306
socket          = /home/hadoop/mysql/mysql.sock

# Here follows entries for some specific programs

# The MySQL server
[mysqld]
port            = 3306
socket          = /home/hadoop/mysql/mysql.sock
basedir=/home/hadoop/mysql
datadir=/home/hadoop/mysql/data
pid-file=/home/hadoop/mysql/mysql.pid
log_error=/home/hadoop/mysql/error.log

3.初始化数据库

#--defaults-file后为my.cnf路径,--basedir为mysql路径,--datadir为data路径
[hadoop@MASTER ~]$/home/hadoop/mysql/scripts/mysql_install_db --defaults-file=/home/hadoop/mysql/support-files/my.cnf --basedir=/home/hadoop/mysql --datadir=/home/hadoop/mysql/data  --socket=/home/hadoop/mysql/socket
#初始化成功,为0成功,其它失败
[hadoop@MASTER ~]$ echo $?
0

4.替换mysqld_safe和mysql.server文件中的路径,根据自己的路径修改(如果mysql路径本身为/usr/local/mysql,就不用修改)

[hadoop@MASTER support-files]$ sed 's#/usr/local#/home/hadoop#g' /home/hadoop/mysql/bin/mysqld_safe  /home/hadoop/mysql/support-files/mysql.server  -i

5.启动mysql

# '&'后台运行,运行过程中不动,回车就行,此时mysql已启动,不需要再启动
[hadoop@MASTER ~]$/home/hadoop/mysql/bin/mysqld_safe --defaults-file=/home/hadoop/mysql/support-files/my.cnf &

6.添加环境变量

[hadoop@MASTER ~]$ vim .bash_profile 

#mysql
export MYSQL_HOME=/home/hadoop/mysql
export PATH=$PATH:$MYSQL_HOME/bin

#使环境变量生效
[hadoop@MASTER ~]$source .bash_profile

7.进入Mysql修改root用户密码

2018.12.21 #如果数据库进不去,就把mysql目录中的mysql.pid删除,并再次开启mysql服务

#第一次进入,密码为空
[hadoop@MASTER ~]$ mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 39
Server version: 5.5.62 MySQL Community Server (GPL)

Copyright (c) 2000, 2018, Oracle and/or its affiliates. All rights reserved.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
#修改密码
mysql> set password=password('root')
    -> ;
Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> grant all privileges on *.* to 'root'@'%' identified by 'root'; 
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
#创建hive数据库,为下边做准备
mysql> create database hive;
Query OK, 1 row affected (0.00 sec)
mysql> create user 'hive'@'MASTER' identified by 'hive';
#授权,其中MASTER为本地主机名,已在hosts中做域名解析
mysql> grant all privileges on *.* to 'hive'@'MASTER' identified by 'hive';
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
exit

8.开启、重启、关闭数据库

#开启数据库
[hadoop@MASTER ~]$ ./mysql/support-files/mysql.server start
#重启数据库
[hadoop@MASTER ~]$ ./mysql/support-files/mysql.server restart
#关闭数据库
[hadoop@MASTER ~]$ ./mysql/support-files/mysql.server stop

六、Hive安装

1.解压安装包

[hadoop@MASTER ~]$ tar xf apache-hive-2.3.4-bin.tar.gz 
[hadoop@MASTER ~]$ mv apache-hive-2.3.4-bin hive

2.添加环境变量

[hadoop@MASTER ~]$ vim .bash_profile 
#hive
export HIVE_HOME=/home/hadoop/hive
export PATH=$PATH:$HIVE_HOME/bin
#使环境变量生效
[hadoop@MASTER ~]$ source .bash_profile 

3.查看

[hadoop@MASTER ~]$ hive --version
Hive 2.3.4
Git git://daijymacpro-2.local/Users/daijy/commit/hive -r 56acdd2120b9ce6790185c679223b8b5e884aaf2
Compiled by daijy on Wed Oct 31 14:20:50 PDT 2018
From source with checksum 9f2d17b212f3a05297ac7dd40b65bab0

6.1 mysql作为Hive的元数据库

1.编辑hive-site.xml(上一次修改后,粘贴错了,以下为修改后的)

[hadoop@MASTER ~]$ cd hive/conf/
[hadoop@MASTER conf]$ cp hive-default.xml.template hive-site.xml
#可以把内容全部删除,添加下面内容

<?xml version="1.0"?>
  <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  <configuration>
 <!--MASTER为主机名-->
      <property>
        <name>javax.jdo.option.ConnectionURL</name>
          <value>jdbc:mysql://MASTER:3306/hive?createDatabaseIfNotExist=true</value>
        <description>JDBC connect string for a JDBC metastore</description>
      </property>
   <!--数据库用户名-->
      <property>
       <name>javax.jdo.option.ConnectionUserName</name>
       <value>hive</value>
       <description>username to use against metastore database</description>
     </property>
 <!--MYSQL用户名密码-->
     <property>
       <name>javax.jdo.option.ConnectionPassword</name>
       <value>hive</value>
       <description>password to use against metastore database</description>
     </property>
 <!--mysql驱动-->
      <property>
              <name>javax.jdo.option.ConnectionDriverName</name>
                      <value>com.mysql.jdbc.Driver</value>
                          </property>
      </configuration>

2.编辑hive-env.sh

[hadoop@MASTER conf]$ cp hive-env.sh.template hive-env.sh
[hadoop@MASTER conf]$ vim hive-env.sh
#在文末添加,java,hadoop,hive环境变量
export JAVA_HOME=/home/hadoop/jdk1.8.0_151
export HADOOP_HOME=/home/hadoop/hadoop
export HIVE_HOME=/home/hadoop/hive

3.把mysql-connector-java-5.1.47-bin.jar复制到hive/lib下

网盘链接:https://pan.baidu.com/s/17Vqz9WlRFij9lmNSR6CvHg

mv  mysql-connector-java-5.1.47-bin.jar /home/hadoop/hive/lib

4.初始化schema

[hadoop@MASTER conf]$ schematool -dbType mysql -initSchema
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: Found binding in [jar:file:/home/hadoop/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4j12-1.7.10.jar!/org/slf4j/impl/StaticLoggerBinder.class]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]
Metastore connection URL:	 jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true
Metastore Connection Driver :	 com.mysql.jdbc.Driver
Metastore connection User:	 hive
Starting metastore schema initialization to 2.3.0
Initialization script hive-schema-2.3.0.mysql.sql
Initialization script completed
schemaTool completed

注意:设置安全模式为leave,否则执行hive会报错

[hadoop@MASTER conf]$ hdfs dfsadmin -safemode leave
Safe mode is OFF

5.执行hive(已启动HDFS)

#启动hdfs
start-all.sh
[hadoop@MASTER ~]$ hive
SLF4J: Class path contains multiple SLF4J bindings.
SLF4J: Found binding in [jar:file:/home/hadoop/hive/lib/log4j-slf4j-impl-2.6.2.jar!/org/slf4j/
SLF4J: Found binding in [jar:file:/home/hadoop/hadoop-2.7.7/share/hadoop/common/lib/slf4j-log4s]
SLF4J: See http://www.slf4j.org/codes.html#multiple_bindings for an explanation.
SLF4J: Actual binding is of type [org.apache.logging.slf4j.Log4jLoggerFactory]

Logging initialized using configuration in jar:file:/home/hadoop/hive/lib/hive-common-2.3.4.ja
Hive-on-MR is deprecated in Hive 2 and may not be available in the future versions. Consider u using Hive 1.X releases.
hive> 

6.2 Hive客户端配置

1.把hive文件复制到从节点

[hadoop@MASTER ~]$ scp -r hive [email protected]:/home/hadoop
[hadoop@MASTER ~]$ scp -r hive [email protected]:/home/hadoop

2.添加hive环境变量

#SLAVER01客户端
[hadoop@SLAVER01 ~]$ vim .bash_profile 
#hive
export HIVE_HOME=/home/hadoop/hive
export PATH=$PATH:$HIVE_HOME/bin

[hadoop@SLAVER01 ~]$ source .bash_profile 
#SLAVER02客户端
[hadoop@SLAVER02 ~]$ vim .bash_profile 
#hive
export HIVE_HOME=/home/hadoop/hive
export PATH=$PATH:$HIVE_HOME/bin

[hadoop@SLAVER02 ~]$ source .bash_profile ’

3.修改hive-site.xml

#MASTER为Hive服务器主机名,SLAVER01和SLAVER02都需要修改
[hadoop@SLAVER01 ~]$ vim hive/conf/hive-site.xml 
<configuration>
    <property>
        <name>hive.metastore.uris</name>
    <value>thrift://MASTER:9083</value>
    </property>
</configuration>

[hadoop@SLAVER01 ~]$ vim hive/conf/hive-site.xml 

<configuration>
    <property>
        <name>hive.metastore.uris</name>
    <value>thrift://MASTER:9083</value>
    </property>
</configuration>

4.Hive服务端启动(已经启动HDFS,start-all.sh)

#后台启动
[hadoop@MASTER ~]$ hive --service metastore  &

5.启动后会发现RunJar

6.3 Hive测试

Hive服务端访问

1.进入

[hadoop@MASTER ~]$ hive

创建数据库

hive> create database hive_2;
OK
Time taken: 5.806 seconds

显示库

hive> show databases;
OK
default
h1
hive_2
Time taken: 0.168 seconds, Fetched: 3 row(s)

2.查看HDFS变化(生成hive_2.db)

3.查看数据库

[hadoop@MASTER ~]$ mysql -uhive -p
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| hive               |
| mysql              |
| performance_schema |
| test               |
+--------------------+
5 rows in set (0.00 sec)

mysql> use hive;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A

Database changed
mysql> select * from DBS;
+-------+-----------------------+--------------------------------------------------+---------+------------+------------+
| DB_ID | DESC                  | DB_LOCATION_URI                                  | NAME    | OWNER_NAME | OWNER_TYPE |
+-------+-----------------------+--------------------------------------------------+---------+------------+------------+
|     1 | Default Hive database | hdfs://MASTER:9000/user/hive/warehouse           | default | public     | ROLE       |
|     6 | NULL                  | hdfs://MASTER:9000/user/hive/warehouse/h1.db     | h1      | hadoop     | USER       |
|    11 | NULL                  | hdfs://MASTER:9000/user/hive/warehouse/hive_2.db | hive_2  | hadoop     | USER       |
+-------+-----------------------+--------------------------------------------------+---------+------------+------------+
3 rows in set (0.00 sec)

Hive客户端访问

[hadoop@SLAVER01 ~]$ hive
hive> show databases;
OK
default
h1
hive_2
Time taken: 1.348 seconds, Fetched: 3 row(s)

[hadoop@SLAVER02 ~]$ hive
hive> show databases;
OK
default
h1
hive_2
Time taken: 1.231 seconds, Fetched: 3 row(s)

创建成功!

参考文档

[1]https://blog.csdn.net/wangshuminjava/article/details/79303824

[2]http://www.cnblogs.com/dxxblog/p/8193967.html

[3]https://blog.csdn.net/u013967628/article/details/82867422

猜你喜欢

转载自blog.csdn.net/yuanfangPOET/article/details/84846021