1: Hive简介
hive是 数据仓库软件,使用SQL功能方便读取、写入和管理分布式存储中的大型数据集。结构化可以投影到存储中已有的数据上。提供了命令行工具和JDBC驱动程序,用于将用户连接到配置单元。
Hive是基于Hadoop的数据仓库解决方案。 就是在Hadoop上架了一层SQL接口,可以将SQL翻译成MapReduce去Hadoop(yarn)上执行,这样就使得数据开发和分析人员很方便的使用SQL来完成海量数据的统计和分析,而不必使用编程语言开发MapReduce那么麻烦(底层分析数据是使用的MapReduce)
优点:
1,学习成本低;通过SQL语句快速实现MapReduce统计,不必来发专门的MapReduce应用,适合数据仓库统计的分析;
2,支持开发人员使用其他编程语言和脚本语言来自定义函数。
缺点:
由于Hadoop本身是一个批处理,高延迟的计算框架,Hive使用Hadoop作为执行引擎,自然也就有了批处理,
高延迟的特点,在数据量很小的时候,Hive执行也需要消耗较长时间来完成;
Hive对事务的支持不够好;
为什么使用Hive
MapReduce实现复杂查询逻辑开发难度太大,人员学习成本太高, 使用大家熟悉的类sql语法,避免编写复杂的MapReduce,学习成本低。
在这里解释一下什么是数据仓库(data warehouse DW)
为企业所有级别的决策制定过程,提供所有类型数据支持的战略集合。
它是单个数据存储,出于分析性报告和决策支持目的而创建。
作用:为需要业务智能的企业,提供指导业务流程改进、监视时间、成本、质量以及控制。
涉及数据仓库的技术ETL(数据仓库技术)
用来描述将数据从来源端经过萃取(extract)、转置(transform)、加载(load)至目的端的过程。
作用:目的是将企业中的分散、零乱、标准不统一的数据整合到一起,为企业的决策提供分析依据
2 Hive 架构分析图
基本组成
用户接口:包括 CLI、JDBC/ODBC、WebGUI。
元数据存储:通常是存储在关系数据库如 mysql , derby中。
解释器、编译器、优化器、执行器。
各组件的基本功能
用户接口主要由三个:CLI、JDBC/ODBC和WebGUI。其中,CLI为shell命令行;JDBC/ODBC是Hive的JAVA实现,与传统数据库JDBC类似;WebGUI是通过浏览器访问Hive。
元数据存储:Hive 将元数据存储在数据库中。Hive 中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。
解释器、编译器、优化器完成 HQL 查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在 HDFS 中,并在随后有 MapReduce 调用执行。
Hive的数据存储
1、Hive中所有的数据都存储在 HDFS 中,没有专门的数据存储格式(可支持Text,SequenceFile,ParquetFile,RCFILE等)
2、只需要在创建表的时候告诉 Hive 数据中的列分隔符和行分隔符,Hive 就可以解析数据。
3、Hive 中包含以下数据模型:DB、Table,External Table,Partition,Bucket。
db:在hdfs中表现为${hive.metastore.warehouse.dir}目录下一个文件夹;
table:在hdfs中表现所属db目录下一个文件夹;
external table:外部表, 与table类似,不过其数据存放位置可以在任意指定路径;
普通表: 删除表后, hdfs上的文件都删了External外部表删除后, hdfs上的文件没有删除, 只是把文件删除了;
partition:在hdfs中表现为table目录下的子目录;
bucket:桶, 在hdfs中表现为同一个表目录下根据hash散列之后的多个文件, 会根据不同的文件把数据放到不同的文件中。
我使用hive的在hadoop集群上做安装配置 安装在NameNode节点上的
下载地址
http://mirror.bit.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz
或者
http://mirror.bit.edu.cn/apache/hive/hive-1.2.2/apache-hive-1.2.2-bin.tar.gz
解压:
[root@hdc1 soft]# tar -zxf apache-hive-1.2.2-bin.tar.gz -C /usr/
进入 :cd /usr/apache-hive-1.2.2-bin/conf/
复制:cp hive-env.sh.template hive-env.sh
修改:[root@hd1 apache-hive-1.2.2-bin]# vim conf/hive-env.sh
启动hadoop集群,在hdfs下创建目录/tmp和/user/hive/warehouse
启动hadoop集群 (我在hdc1启动hdfs)sbin/start-dfs.sh (在hdc3启动yarn)sbin/yarn-dfs.sh
在继续在hdc1执行创建目录,修改和修改权限操作:
[root@hdc1 hadoop-2.8.5]# hadoop fs -mkdir -p /tmp
[root@hdc1 hadoop-2.8.5]# hadoop fs -chmod 777 /tmp
[root@hdcl1 hadoop-2.8.5]# hadoop fs -mkdir -p /user/hive/warhouse
[root@hdcl1 hadoop-2.8.5]# hadoop fs -chmod 777 /user/hive/warhouse
访问地址:http://192.168.190.101:50070 (虚拟机的ip) 查看创建的目录
这个时候需要启动hive
[root@hdc1 apache-hive-1.2.2-bin]# ./bin/hive 启动 (按照步骤)
hive> show databases;
OK
default
Time taken: 0.763 seconds, Fetched: 1 row(s)
hive> create database db_aaa;
OK
Time taken: 1.879 seconds
hive> create table tb_dept(deptno int,dname string,loc string);
OK
Time taken: 1.37 seconds
hive> show tables;
hive> insert into tb_dept values(1,‘aaa’,‘hao’);(SQL转化MapReduce运行)
在/user/hive/warhouse 查看创建的表(有的话已完成hive配置)
大功告成!