Hive第二天——Hive介绍以及简单使用
自己的话:黑发不知勤学早,白首方悔读书迟
每天都要保持前进!
一、什么是Hive
数据库:
mysql、oracle、sqlserver、DB2、sqlite、MDB
数据仓库:
Hive,是MR的客户端,也就是说不必要每台机器都安装部署Hive
HIVE是一个可以将sql翻译为MR程序的工具
HIVE支持用户将HDFS上的文件映射为表结构,然后用户就可以输入SQL对这些表(HDFS上的文件)进行查询分析
HIVE将用户定义的库、表结构等信息存储hive的元数据库(可以是本地derby,也可以是远程mysql)中。
二、Hive的特性和用途
1.特性:
1、操作接口是采用SQL语法,HQL
2、避免了写MapReduce的繁琐过程
3、不介入在线业务,因为hive是操作MapReduce的,MapReduce就是不介入在线业务的,这里的MapReduce指的是Hadoop中的MapReduce,此外storm等中也有MapReduce是在线的,MapReduce其实是一个概念,不是一个实际的框架。
2.用途:
解放大数据分析程序员,不用自己写大量的mr程序来分析数据,只需要写sql脚本即可。HIVE可用于构建大数据体系下的数据仓库。
三、Hive体系结构
1、Client(两种):
** 终端命令行
** JDBC – 不常用,非常麻烦(相对于前者)
2、metastore:
** 原本的数据集和字段名称以及数据信息之间的双射关系。
** 我们目前是存储在Mysql中
3、Server-Hadoop:
**在操作Hive的同时,需要将Hadoop的HDFS开启,YARN开启,MAPRED配置好
四、Hive基本思想
在HDFS中有三个资源的txt文件,将字段和字段对应的名称做一个唯一映射,这个映射存储在数据库MySql中,数据库的名字叫metastore,数据库中存着,第一个字段对应age,第二个字段对应sex,第三个字段对应name,还要告诉hive,当我使用hive去读取文件的时候,每个字段中间用什么分割,假设中间是/t,然后hive,读取数据的时候,告诉hive,每个字段中间以/t分割,第一个字段叫age,第二个字段叫sex,第三个字段叫name。
Hive要做的工作就是将HDFS中的内容读取到Hive中,然后再根据mysql映射过来的字段信息,对应的读取文件中的内容,这样表面上会产生一种错局,就好像在操作数据库一样
Hive把拿到的数据通过sql语句,转化为MR代码,最终打成jar包,提交到yarn上面,然后直接执行这个语句,对于用户操作来讲,好像是写了一段sql语句之后,然后就出现了结果。
五、Hive的简单使用和执行
1.Hive简单使用:
方式1:交互式查询
(1) hive>
hive>select * from t_test; #输入sql语句即可
(2)将hive启动为一个服务: hiveserver ,然后可以在任意一台机器上使用beeline客户端连接hive服务,进行交互式查询
方式2:将hive作为命令一次性运行
(1)hive>
hive -e "sql1;sql2;sql3;sql4" # “”中输入sql语句
(2)事先将sql语句写入一个文件比如 q.hql ,然后用hive命令执行:
hive -f q.hql
方式3:将方式2写入一个xxx.sh脚本中
2.Hive执行(三种模式):
(1)将hive作为命令一次性运行:
[root@hdp01 ~]# hive -e “use default;create table tset_1(id int,name string); ”
这样我们创建了一个hive表
(2)也可以创建一个文件,执行这个文件:
[root@hadoop2 home]# vi /home/userinfo.txt
#编辑:
1,xiaoming,20
2,xiaowang,22
[root@hadoop2 home]# vi a.hql
#编辑:
use default;
create table test_2(id int,name string,age int)
row format delimited
fields terminated by ',';
load data local inpath '/home/userinfo.txt' into table test_2;
select count(*) from test_2;
然后执行:
hive -f a.hql
(3)在另一台虚拟机上(hdp01)(有同样的hive安装和配置):
当前虚拟机:
在/usr/local/src/hive-1.2.1/bin下有一个服务:hiveserver2
我们启动这个服务
这样这个服务启动完毕,光标停到下一行
另一台虚拟机:
我们在hap01(另一台虚拟机上)上同样进入hive的bin目录
[root@hdp01 bin]# ./beeline
Beeline version 1.2.1 by Apache Hive
出现数据库提示符beeline:
beeline> !connect jdbc:hive2://hdp02:10000 #hive2为有mysql的主机名 hdp02为开了客户端的主机名 10000为服务端的进程端口号 ss -lnput 查询
Connecting to jdbc:hive2://hdp02:10000
Enter username for jdbc:hive2://hdp02:10000: root
Enter password for jdbc:hive2://hdp02:10000:
Connected to: Apache Hive (version 1.2.1)
Driver: Hive JDBC (version 1.2.1)
Transaction isolation: TRANSACTION_REPEATABLE_READ
出现数据库提示符0: jdbc:hive2://hdp02:10000>
这样我们就链接到了hdp02的服务端了,我们可以在这输入一些hive的语句
0: jdbc:hive2://hdp02:10000> show databases;
0: jdbc:hive2://hdp02:10000> show tables
这些命令都是发到hdp02上的服务端执行
可以看到hdp02的已经有“ok”出现
文章部分转自:https://blog.csdn.net/dataiyangu/article/details/90116354