【Hive】Apache Hive系列之Hive简介及环境搭建

概述

Hive是建立在 Hadoop 上的数据仓库(Data Warehouse)基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL-Extract-Transform-Load),这是一种可以存储、查询和分析存储在 Hadoop 中的大规模数据的机制。 Hive 查询操作过程严格遵守Hadoop MapReduce 的作业执行模型,Hive 将用户的HiveQL 语句通过解释器转换为提交到Hadoop 集群上,Hadoop 监控作业执行过程,然后返回作业执行结果给用户。简单来说就是将结构化的数据文件映射成一张表,提供了类SQL的HQL的查询功能。Hive 并非为联机事务处理而设计,Hive 并不提供实时的查询和基于行级的数据更新操作。Hive 的最佳使用场合是大数据集的批处理作业。

Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行。其优点是学习成本低,可以通过类SQL语句快速实现简单的MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。同时,Hive也是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),并且提供了存储、查询和分析Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据。这个语言也允许熟悉MapReduce的开发者的设计自定义的Mapper和Reducer来处理内建的Mapper和Reducer无法完成的复杂的分析工作。

本质: 将sql语句转换为MapReduce任务进行运行( 记住 ),本质上就是MapReduce
作用: 对海量的大数据(结构化) 数据进行分析和统计

HQL: HQL是Hibernate Query Language的缩写,提供更加丰富灵活、更为强大的查询能力;HQL更接近SQL语句查询语法。
数据仓库: 英文名称为Data Warehouse ,存储各种类型的数据,面向主体(分类存储), 存储大量的数据,数据的不可以更新,可以一直追加数据。

组成架构(运行流程)

Hive提供了一个SQL命令的操作接口,允许用户可以使用类似SQL的Hive的Query Language执行一些离线的SQL分析。但是Hive和传统的数据库不同,Hive只是构建在Hadoop的MapReduce之上的SQL解析工具,并不参与数据的管理和存储,Hive中所有的数据都是在运行任务的时候才会真正的加载。
在这里插入图片描述

  1. 用户使用命令行工具或者JDBC发送HQL
  2. 使用Driver驱动结合MetaStore元数据,将指定翻译成MapReduce
  3. 首先使用SQL Parser解释器进行HQL的翻译
  4. 使用编译器对解释结果进行编译
  5. 使用优化器对编译结果进行优化
  6. 最后将优化的结果使用执行器进行执行操作(本质上就是在Hadoop集群上使用MapReduce操作)
  7. 将处理结果返回给客户端用户

组成:客户端接口、Hive的引擎(驱动)、元数据、Hadoop

说明:
元数据(数据的描述信息:表的名称,数据库的名称,权限,所有者,组成字段等等)
默认情况下存储在hive内部自带的derby数据库中
问题:derby数据库,在同一时刻,只允许一个线程操作
建议:使用MySQL对元数据进行存储

Hive的引擎
解释器、编译器、优化器、执行器 (顺序)
Hadoop:
执行Hive
Client 接口:用户操作、访问Hive 的方式(jdbc,cli… …)

特点

  1. Hive使用HQL实现对数据的操作,操作方便简单(比MapReduce操作方便)
  2. Hive处理大数据(比MySQL/Oracle强大)
  3. Hive提供的大量的工具
  4. Hive支持自定义函数,使用自定义需求
  5. Hive实现离线数据分析
  • Hive使用类SQL语句实现功能,处理业务的范围受限(SQL语法所能表达的业务受限)
  • Hive运行效率较低(延迟高,离线数据分析)
    Hive ----> MapReduce (效率低)(机器转换的)

MapReduce 离线
Hive 离线
HBase 离线 实时
Spark 实时

Hive和数据库的区别

Hive不是数据库
能够使用类SQL对数据进行查询操作(和数据库的相同点)

Hive中没有索引(暴力扫描整张表 , 访问数据延迟高;使用MR,并行访问数据) 

Hive操作的数据是在分布式文件系统(HDFS)上的数据

Hive使用类SQL语言,功能更加的强大(分布式集群数据)

Hive不支持数据的修改

... ...


索引的使用场景:
    税务局:
        白天查询数据
        晚上添加新的数10000条数据据

    提高效率:
        白天查询:给表建立索引
        晚上:创建临时表,没有索引的(索引需要动态维护的),向此表中追加数据
             删除主表的索引,追加新的数据,建立索引

oracle: select * from teacher  where age = 10 and id >10;   
    where后的条件语句的顺序是:从右向左

Hive的环境搭建

Hive安装

由于hive需要存储一些一些建表的元数据信息,因此在生产环境下安装Hive需要事先安装MySQL数据库服务(注意:MySQL数据库的编码必须是Latin1编码)。其次Hive是构建在Hadoop存储和计算之上的工具,因此还需要在配置和安装hive之前保证Hadoop的hdfs和MapReduce正常运行。最后Hive的安装主机上必须配置HADOOP_HOME环境变量,这样Hive可以通过该环境变量感知用户的Hadoop计算集群的位置和规模。

MariaDB安装

1、安装MariaDB

通过yum安装,简单快捷,安装mariadb-server,默认依赖安装mariadb,一个是服务端、一个是客户端。

[root@CentOS ~]# yum install mariadb-server

2、配置MariaDB

1)安装完成后首先要把MariaDB服务开启,并设置为开机启动

[root@CentOS ~]# systemctl status mariadb
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
[root@CentOS ~]# systemctl start mariadb
[root@CentOS ~]# systemctl status mariadb
● mariadb.service - MariaDB database server
   Loaded: loaded (/usr/lib/systemd/system/mariadb.service; disabled; vendor preset: disabled)
   Active: active (running) since 四 2020-01-09 13:11:39 CST; 2s ago
  Process: 1582 ExecStartPost=/usr/libexec/mariadb-wait-ready $MAINPID (code=exited, status=0/SUCCESS)
  Process: 1495 ExecStartPre=/usr/libexec/mariadb-prepare-db-dir %n (code=exited, status=0/SUCCESS)
 Main PID: 1581 (mysqld_safe)
   CGroup: /system.slice/mariadb.service
           ├─1581 /bin/sh /usr/bin/mysqld_safe --basedir=/usr
           └─1743 /usr/libexec/mysqld --basedir=/usr --datadir=/var/lib/mysql...

1月 09 13:11:37 CentOS mariadb-prepare-db-dir[1495]: MySQL manual for more i...
1月 09 13:11:37 CentOS mariadb-prepare-db-dir[1495]: Please report any probl...
1月 09 13:11:37 CentOS mariadb-prepare-db-dir[1495]: The latest information ...
1月 09 13:11:37 CentOS mariadb-prepare-db-dir[1495]: You can find additional...
1月 09 13:11:37 CentOS mariadb-prepare-db-dir[1495]: http://dev.mysql.com
1月 09 13:11:37 CentOS mariadb-prepare-db-dir[1495]: Consider joining MariaD...
1月 09 13:11:37 CentOS mariadb-prepare-db-dir[1495]: https://mariadb.org/get...
1月 09 13:11:37 CentOS mysqld_safe[1581]: 200109 13:11:37 mysqld_safe Loggi....
1月 09 13:11:37 CentOS mysqld_safe[1581]: 200109 13:11:37 mysqld_safe Start...l
1月 09 13:11:39 CentOS systemd[1]: Started MariaDB database server.
Hint: Some lines were ellipsized, use -l to show in full.
[root@CentOS ~]# systemctl enable mariadb 
Created symlink from /etc/systemd/system/multi-user.target.wants/mariadb.service to /usr/lib/systemd/system/mariadb.service.

2)首次安装需要进行数据库的配置,命令都和mysql的一样 ,配置时出现的各个选项

[root@CentOS ~]# mysql_secure_installation

NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
      SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!

In order to log into MariaDB to secure it, we'll need the current
password for the root user.  If you've just installed MariaDB, and
you haven't set the root password yet, the password will be blank,
so you should just press enter here.

Enter current password for root (enter for none): <直接回车>
OK, successfully used password, moving on...

Setting the root password ensures that nobody can log into the MariaDB
root user without the proper authorisation.

Set root password? [Y/n] Y
New password: <输入root>
Re-enter new password: <输入root>
Password updated successfully!
Reloading privilege tables..
 ... Success!


By default, a MariaDB installation has an anonymous user, allowing anyone
to log into MariaDB without having to have a user account created for
them.  This is intended only for testing, and to make the installation
go a bit smoother.  You should remove them before moving into a
production environment.

Remove anonymous users? [Y/n] Y
 ... Success!

Normally, root should only be allowed to connect from 'localhost'.  This
ensures that someone cannot guess at the root password from the network.

Disallow root login remotely? [Y/n] n
 ... skipping.

By default, MariaDB comes with a database named 'test' that anyone can
access.  This is also intended only for testing, and should be removed
before moving into a production environment.

Remove test database and access to it? [Y/n] n
 ... skipping.

Reloading the privilege tables will ensure that all changes made so far
will take effect immediately.

Reload privilege tables now? [Y/n] Y
 ... Success!

Cleaning up...

All done!  If you've completed all of the above steps, your MariaDB
installation should now be secure.

Thanks for using MariaDB!

4)测试是否能够登录成功,并开启远程访问权限!

[root@CentOS ~]# mysql -u root -proot
Welcome to the MariaDB monitor.  Commands end with ; or \g.
Your MariaDB connection id is 9
Server version: 5.5.64-MariaDB MariaDB Server

Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

MariaDB [(none)]> use user
ERROR 1049 (42000): Unknown database 'user'
MariaDB [(none)]> use mysql
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
MariaDB [mysql]> grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]> flush privileges;
Query OK, 0 rows affected (0.00 sec)

MariaDB [mysql]>

Hive安装配置

以下环境搭建基于之前的HBase单机环境继续进行

详情: HBase系列之HBase概述及环境搭建

1、确保HDFS和YARN正常运行

[root@CentOS]# start-dfs.sh
[root@CentOS]# start-yarn.sh

2、确保MySQL数据库可以正常访问

3、安装配置Hive

由于下载的Apache-Hive-1.2.2.tar.gz和HBase-1.2.4版本存在兼容性问题,因此建议用户在使用Hive的时候自行编译Hive的源码

3.1、安装配置Hive

3.1.1 将编译好的Hive包进行上传至虚拟机,解压Hive至/usr目录,并且配置HIVE_HOME环境变量

[root@CentOS ~]# tar -zxf apache-hive-1.2.2-bin_编译版本.tar.gz -C /usr/
[root@CentOS ~]# vi .bashrc
M2_HOME=/usr/apache-maven-3.6.3
HIVE_HOME=/usr/apache-hive-1.2.2-bin
JAVA_HOME=/usr/java/latest
HADOOP_HOME=/usr/hadoop-2.9.2/
HBASE_HOME=/usr/hbase-1.2.4/
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$M2_HOME/bin:$HIVE_HOME/bin
CLASSPATH=.
export JAVA_HOME
export PATH
export CLASSPATH
export HADOOP_HOME
export HBASE_HOME
HBASE_CLASSPATH=$(/usr/hbase-1.2.4/bin/hbase classpath)
HADOOP_CLASSPATH=$HBASE_CLASSPATH:/root/mysql-connector-java-5.1.49.jar
export HADOOP_CLASSPATH
export M2_HOME
export HIVE_HOME
[root@CentOS ~]# source .bashrc

2.在Hive的安装目录下创建conf/hive-site.xml,配置以下内容

[root@CentOS ~]# vi /usr/apache-hive-1.2.2-bin/conf/hive-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
  
  <property>
    <name>javax.jdo.option.ConnectionURL</name>
    <value>jdbc:mysql://CentOS:3306/hive?createDatabaseIfNotExist=true</value>
  </property>
  
  <property>
    <name>javax.jdo.option.ConnectionDriverName</name>
    <value>com.mysql.jdbc.Driver</value>
  </property>
  
  <property>
    <name>javax.jdo.option.ConnectionUserName</name>
    <value>root</value>
  </property>
  
  <property>
    <name>javax.jdo.option.ConnectionPassword</name>
    <value>root</value>
  </property>

</configuration>

3.需要将MySQL的驱动jar拷贝到hive的lib目录下

[root@CentOS ~]# cp mysql-connector-java-5.1.49.jar /usr/apache-hive-1.2.2-bin/lib/

4.启动Hive有两种模式

  • 本地模式/单用户

    [root@CentOS ~]# cd /usr/apache-hive-1.2.2-bin/
    [root@CentOS apache-hive-1.2.2-bin]# ./bin/hive
    hive> show databases;
    OK
    default
    Time taken: 1.217 seconds, Fetched: 1 row(s)
    hive> create database baizhi;
    OK
    Time taken: 0.293 seconds
    hive> use baizhi ;
    OK
    Time taken: 0.061 seconds
    

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RSSHoeD4-1602999760962)(assets/image-20201014111912493.png)]

由于我们启动Hive的时候,系统需要读取HADOOP_CLASSPTH,前期我们将HBase的类路径添加到了HADOOP_CLASSPTH下,导致HBase的jar和hive的jar产生冲突,因此用户需要将HBase的类路径从HADOOP_CLASSPTH下移除即可

[root@CentOS ~]# vi .bashrc
M2_HOME=/usr/apache-maven-3.6.3
HIVE_HOME=/usr/apache-hive-1.2.2-bin
JAVA_HOME=/usr/java/latest
HADOOP_HOME=/usr/hadoop-2.9.2/
HBASE_HOME=/usr/hbase-1.2.4/
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$HBASE_HOME/bin:$M2_HOME/bin:$HIVE_HOME/bin
CLASSPATH=.
export JAVA_HOME
export PATH
export CLASSPATH
export HADOOP_HOME
export HBASE_HOME
HBASE_CLASSPATH=$(/usr/hbase-1.2.4/bin/hbase classpath)
HADOOP_CLASSPATH=/root/mysql-connector-java-5.1.49.jar
export HADOOP_CLASSPATH
export M2_HOME
export HIVE_HOME
[root@CentOS ~]# source .bashrc

或者

将hive的lib目录下的jline-2.12.jar拷贝到Hadoop的/share/hadoop/yarn/lib/目录下,这样也可以解决jar的冲突问题!

第一进入到Hive窗口之后,hive会自动在MySQL的hive库下创建29张表

  • 远程模式/多用户模式
[root@CentOS apache-hive-1.2.2-bin]#  ./bin/hiveserver2  >/dev/null 2>&1 &
[3] 26279

[root@CentOS apache-hive-1.2.2-bin]# ./bin/beeline -u jdbc:hive2://CentOS:10000 -n root
Connecting to jdbc:hive2://CentOS:10000
Connected to: Apache Hive (version 1.2.2)
Driver: Hive JDBC (version 1.2.2)
Transaction isolation: TRANSACTION_REPEATABLE_READ
Beeline version 1.2.2 by Apache Hive
0: jdbc:hive2://CentOS:10000> 

0: jdbc:hive2://CentOS:10000> show databases;
+----------------+--+
| database_name  |
+----------------+--+
| baizhi         |
| default        |
+----------------+--+
2 rows selected (1.951 seconds)
0: jdbc:hive2://CentOS:10000> drop database baizhi;
No rows affected (0.273 seconds)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

@是小白吖

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值