hive入门与实战

上传人:F****n 文档编号:106399683 上传时间:2019-10-15 格式:PPT 页数:55 大小:2.63MB
返回 下载 相关 举报
hive入门与实战_第1页
第1页 / 共55页
hive入门与实战_第2页
第2页 / 共55页
hive入门与实战_第3页
第3页 / 共55页
hive入门与实战_第4页
第4页 / 共55页
hive入门与实战_第5页
第5页 / 共55页
点击查看更多>>
资源描述

《hive入门与实战》由会员分享,可在线阅读,更多相关《hive入门与实战(55页珍藏版)》请在金锄头文库上搜索。

1、Hive入门与实战,一、 Hive简介 二、 Hive体系结构 三、 Hive工作机制 四、 Hive应用场景 五、 Hive安装部署 六、 Hive开发使用,Hive简介-Hive是什么?,Hive是构建在Hadoop之上的数据仓库平台 Hive是一个SQL解析引擎,它将SQL语句转译成MapReduce作业并在Hadoop上执行。 Hive表是HDFS的一个文件目录,一个表名对应一个目录名,如果有分区表的话,则分区值对应子目录名。,Hive简介-Hive的历史由来,Hive是Facebook开发的,构建于Hadoop集群之上的数据仓库应用。2008年Facebook将Hive项目贡献给Ap

2、ache,成为开源项目。目前最新版本hive-2.0.0,Hive简介-Hive的历史由来,Hadoop和Hive组建成为Facebook数据仓库的发展史,随着数据量增加某些查询需要几个小时甚至几天才能完成。当数据达到1T时,MySql进程跨掉。,可以支撑几个T的数据,但每天收集用户点击流数据(每天约400G)时,Oracle开始撑不住。,有效解决了大规模数据的存储与统计分析的问题,但是MapReduce程序对于普通分析人员的使用过于复杂和繁琐。,对外提供了类似于SQL语法的HQL语句数据接口,自动将HQL语句编译转化为MR作业后在Hadoop上执行。降低了分析人员使用Hadoop进行数据分析

3、的难度。,Hive体系结构-Hive在Hadoop中的位置,程序语言,计算,表存储,对象存储,Hive体系结构-Hive设计特征,Hive 做为Hadoop 的数据仓库处理工具,它所有的数据都存储在Hadoop 兼容的文件系统中。Hive 在加载数据过程中不会对数据进行任何的修改,只是将数据移动到HDFS 中Hive 设定的目录下,因此,Hive 不支持对数据的改写和添加,所有的数据都是在加载的时候确定的。Hive 的设计特点如下。 支持索引,加快数据查询。 不同的存储类型,例如,纯文本文件、HBase 中的文件。 将元数据保存在关系数据库中,减少了在查询中执行语义检查时间。 可以直接使用存储

4、在Hadoop 文件系统中的数据。 内置大量用户函数UDF 来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF 函数来完成内置函数无法实现的操作。 类SQL 的查询方式,将SQL 查询转换为MapReduce 的job 在Hadoop集群上执行。 编码跟Hadoop同样使用UTF-8字符集。,Hive体系结构,用户接口 CLI:Cli 启动的时候,会同时启动一个 Hive 副本。 JDBC客户端:封装了Thrift,java应用程序,可以通过指定的主机和端口连接到在另一个进程中运行的hive服务器 ODBC客户端:ODBC驱动允许支持ODBC协议的应用程序连接到Hive。 WUI 接口

5、:是通过浏览器访问 Hive Thrift服务器 基于socket通讯,支持跨语言。Hive Thrift服务简化了在多编程语言中运行Hive的命令。绑定支持C+,Java,PHP,Python和Ruby语言。,Hive体系结构,解析器 编译器:完成 HQL 语句从词法分析、语法分析、编译、优化以及执行计划的生成。 优化器是一个演化组件,当前它的规则是:列修剪,谓词下压。 执行器会顺序执行所有的Job。如果Task链不存在依赖关系,可以采用并发执行的方式执行Job。 元数据库 Hive的数据由两部分组成:数据文件和元数据。元数据用于存放Hive库的基础信息,它存储在关系数据库中,如 mysql

6、、derby。元数据包括:数据库信息、表的名字,表的列和分区及其属性,表的属性,表的数据所在目录等。 Hadoop Hive 的数据文件存储在 HDFS 中,大部分的查询由 MapReduce 完成。(对于包含 * 的查询,比如 select * from tbl 不会生成 MapRedcue 作业),Hadoop,Hive的运行机制,hive,用户通过用户接口连接Hive,发布Hive SQL Hive解析查询并制定查询计划 Hive将查询转换成MapReduce作业 Hive在Hadoop上执行MapReduce作业,sql,Map/Reduce,用户,用户接口,1,2,3,4,Hive编

7、译器的运行机制(Hive的核心),语义解析器,将查询字符串转换成解析树表达式。,语法解析器,将解析树转换成基于语句块的内部查询表达式。,逻辑计划 生成器,将内部查询表达式转换为逻辑计划,这些计划由逻辑操作树组成,操作符是Hive的最小处理单元,每个操作符处理代表一道HDFS操作或者是MR作业。,查询计划 生成器,将逻辑计划转化成物理计划(MR Job)。,Hive的应用场景-Hive的优势,解决了传统关系数据库在大数据处理上的瓶颈。适合大数据的批量处理。 充分利用集群的CPU计算资源、存储资源,实现并行计算。 Hive支持标准SQL语法,免去了编写MR程序的过程,减少了开发成本。 具有良好的扩

8、展性,拓展功能方便。,Hive的优势-上百行MR程序与一条HQL的对比,Hive的应用场景-Hive的缺点,Hive的HQL表达能力有限:有些复杂运算用HQL不易表达。 Hive效率低:Hive自动生成MR作业,通常不够智能;HQL调优困难,粒度较粗;可控性差。 针对Hive运行效率低下的问题,促使人们去寻找一种更快,更具交互性的分析框架。 SparkSQL 的出现则有效的提高了Sql在Hadoop 上的分析运行效率。,Hive的应用场景,适用场景 海量数据的存储处理 数据挖掘 海量数据的离线分析 不适用场景 复杂的机器学习算法 复杂的科学计算 联机交互式实时查询,Hive开发使用-Hive的

9、连接,HiveServer2 目前Hive的Thrift服务端通常使用HiveServer2,它是HiveServer改进版本,它提供了新的ThriftAPI来处理JDBC或者ODBC客户端,可以进行Kerberos身份验证,支持多个客户端并发。 BeeLine HiveServer2还提供了新的CLI:BeeLine,它是Hive 0.11引入的新的交互式CLI,基于SQLLine,可以作为Hive JDBC Client 端访问HievServer2。 通过BeeLine连接hive hive安装目录/bin/./beeline -u jdbc:hive2:/hiveServer2所在ip

10、:端口号 -n 用户名 例如: ./beeline -u jdbc:hive2:/127.0.0.1:10000 -n root,Hive开发使用-Hive的基本数据类型,Hive开发使用-Hive的复杂数据类型,Hive开发使用-Hive元数据库表简介,Hive开发使用-Hive的数据模型,Hive数据库 类似传统数据库的DataBase,在元数据库里实际是一张表。对应于HDFS上的数据仓库目录下是一个文件夹。数据仓库目录路径,由hive-site.xml中$hive.metastore.warehouse.dir 参数指定。 创建数据库示例: create database 数据库名; 元

11、数据库中查询数据库列表: select * from dbs; 如下图:,Hive开发使用-Hive的数据模型,内部表 内部表与关系数据库中的Table在概念上类似。每一个Table在Hive中都有一个相应的目录存储数据。所有的Table数据(不包括External Table)都保存在这个目录中。删除表时,元数据与数据都会被删除。,元数据库中查询数据表列表:,HDFS下对应存储目录:,Hive开发使用-Hive的数据模型,外部表 外部表指向已经在HDFS中存在的数据,可以创建Partition。它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异。内部表的创建过程和数据加载过程

12、这两个过程可以分别独立完成,也可以在同一个语句中完成,在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。而外部表只有一个过程,加载数据和创建表同时完成(CREATE EXTERNAL TABLE LOCATION),实际数据是存储在LOCATION后面指定的 HDFS 路径中,并不会移动到数据仓库目录中。当删除一个External Table时,仅删除该链接。,Hive开发使用-Hive的数据模型,如何选择使用内部表或外部表? 如果所有处理都由hive来完成,则使用内部表 如果需要用hive和外部其他工

13、具处理同一组数据集,则使用外部表。,Hive开发使用-Hive的数据模型,分区 Partition对应于关系数据库中的Partition列的密集索引,但是Hive中Partition的组织方式和数据库中的很不相同。在Hive中,表中的一个Partition对应于表下的一个目录,所有的Partition的数据都存储在对应的目录中。例如pvs表中包含ds和city两个Partition,则 对应于ds = 20090801, city= jinan 的HDFS子目录为:/wh/pvs/ds=20090801/city=jinan ;,Hive开发使用-Hive的数据模型,桶 Buckets是将表的

14、列通过Hash算法进一步分解成不同的文件存储。它对指定列计算hash,根据hash值切分数据,目的是为了并行,每一个Bucket对应一个文件。分区是粗粒度的划分,桶是细粒度的划分,这样做为了可以让查询发生在小范围的数据上以提高效率。适合进行表连接查询、适合用于采样分析。 例如将user列分散至32个bucket,首先对user列的值计算hash,则 对应hash值为0的HDFS目录为:/wh/pvs/ds=20090801/ctry=US/part-00000; 对应hash值为20的HDFS目录为: /wh/pvs/ds=20090801/ctry=US/part-00020。 如果想应用很

15、多的Map任务这样是不错的选择。,Hive开发使用-Hive的数据模型,Hive的视图 视图与传统数据库的视图类似。视图是只读的,它基于的基本表,如果改变,数据增加不会影响视图的呈现;如果删除,会出现问题。如果不指定视图的列,会根据select语句后的生成。 视图的简单示例: 创建表:create view test_view as select * from test; 查看数据:select * from test_view;,Hive开发使用-Hive的数据存储模型,Hive开发使用-Hive创建数据表命令,CREATE TABLE 创建一个指定名字的表。如果相同名字的表已经存在,则抛出

16、异常;用户可以用 IF NOT EXIST 选项来忽略这个异常。 EXTERNAL 关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION), 有分区的表可以在创建的时候使用 PARTITIONED BY 语句。一个表可以拥有一个或者多个分区,每一个分区单独存在一个目录下。 表和分区都可以对某个列进行 CLUSTERED BY 操作,将若干个列放入一个桶(bucket)中。 可以利用SORT BY 对数据进行排序。这样可以为特定应用提高性能。 默认的字段分隔符为ascii码的控制符001(A) tab分隔符为 t。只支持单个字符的分隔符。 如果文件数据是纯文本,可以使用 STORED AS TEXTFILE。如果数据需要压缩,使用 STORED AS SEQUENCE 。,CREATE EXTERNAL TABLE IF NOT EXISTS table_name (col_name data_type COMMENT col_comment, .) COMMENT table_c

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 幼儿/小学教育 > 小学教育

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号