Hive产生背景及Hive是什么
Hive产生的背景
- MapReduce编程的不便性
- HDFS上的文件缺少Schema
Hive是什么 - 由Facebook开源,最初用于解决海量结构化的日志数据统计问题
- 构建在Hadoop之上的数据仓库
- Hive定义了一种类SQL查询语言: HQL(类似SQL但不完全相同)
- 通常用于进行离线数据处理(刚开始采用MapReduce )
- 底层支持多种不同的执行引擎;
【Hive底层的执行引擎有:MapReduce、Tez、Spark】
【Hive on MapReduce,Hive on Tez,Hive on Spark】 - 支持多种不同的压缩格式、存储格式以及自定义函数
【压缩:GZIP、LZO、Snappy、BZIP2…】
【存储:TextFile、SequenceFile、RCFile、ORC、Parquet】
【UDF:自定义函数】
为什么要使用Hive及Hive发展历程
为什么要使用Hive
- 简单、容易上手(提供了类似SQL查i言HQL)
- 为超大数据集设计的计算/存储扩展能力(MR计算, HDFS存储)
- 统一的元数据管理(可与Presto/Impala/SparkSQL等共享数据)
Hive发展历程
官方版本更新详细目录
http://hive.apache.org/downloads.html
Hive在Hadoop生态系统的位置
在HDFS和Yarn之上的
Hive体系架构及部署架构
Hive体系架构
第一行:hive访问方式shell以及Thrift/JDBC
第二行:元数据管理(Metastore);
Drive中首先解析SQL(SQL Parser)生成逻辑执行计划,然后对逻辑执行计划进行优化(Query Optimizer),最后生成物理执行计划(Physical Plan其中包括序列化反序列化和UDF函数(SerDes和UDFs)),生成最终的执行引擎(Execution)提交到MapReduce
第三行:元数据存放的位置(MySQL);
提交到计算引擎(MapReduce)的输入输出-HDFS、HBase等
部署架构–测试环境
部署架构–生产环境
其中MySQL、ResourceManage、NameNode都要主从设备;
Hive只需要在集群中装一个或者两个作为客户端使用即可
Hive环境搭建
-
Hive下载:http://archive.cloudera.com/cdh5/cdh/5/
wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz -
解压
tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C ~/app/ -
配置
系统环境变量(~/.bahs_profile)
export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0
export PATH= H I V E H O M E / b i n : HIVE_HOME/bin: HIVEHOME/bin:PATH实现安装一个mysql, yum install xxx,或者tar包安装
在conf下找到hive-site.xml配置 hive-site.xml
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/sparksql?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>
-
拷贝mysql驱动到$HIVE_HOME/lib/
-
启动hive: $HIVE_HOME/bin/hive
Hive基本使用
官网DDL操作
https://cwiki.apache.org/confluence/display/Hive/LanguageManual+DDL
创建表
CREATE TABLE table_name
[(col_name data_type [COMMENT col_comment])]
create table hive_wordcount(context string);
加载数据到hive表
LOAD DATA LOCAL INPATH 'filepath' INTO TABLE tablename
load data local inpath '/home/hadoop/data/hello.txt' into table hive_wordcount;
使用sql做wordcount
select word, count(1) from hive_wordcount lateral view explode(split(context,'\t')) wc as word group by word;
lateral view explode(): 是把每行记录按照指定分隔符进行拆解
hive ql提交执行以后会生成mr作业,并在yarn上运行
##练习##
员工表emp.txt
编号|名称|岗位|上级领导编号|入职时间|工资|津贴|部门编号
部门表 dept.txt
create table emp(
empno int,
ename string,
job string,
mgr int,
hiredate string,
sal double,
comm double,
deptno int
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
create table dept(
deptno int,
dname string,
location string
) ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';
load data local inpath '/home/hadoop/data/emp.txt' into table emp;
load data local inpath '/home/hadoop/data/dept.txt' into table dept;
求每个部门的人数
select deptno, count(1) from emp group by deptno;