您好,欢迎访问三七文档
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项目贡献给Apache,成为开源项目。目前最新版本hive-2.0.0Hive简介-Hive的历史由来Hadoop和Hive组建成为Facebook数据仓库的发展史随着数据量增加某些查询需要几个小时甚至几天才能完成。当数据达到1T时,MySql进程跨掉。可以支撑几个T的数据,但每天收集用户点击流数据(每天约400G)时,Oracle开始撑不住。有效解决了大规模数据的存储与统计分析的问题,但是MapReduce程序对于普通分析人员的使用过于复杂和繁琐。对外提供了类似于SQL语法的HQL语句数据接口,自动将HQL语句编译转化为MR作业后在Hadoop上执行。降低了分析人员使用Hadoop进行数据分析的难度。Hive体系结构-Hive在Hadoop中的位置Avro(序列化)Zookeeper(协调服务)Pig(数据流)SqoopHive(SQL)MapReduce(分布式计算框架)Hbase(列存储)HCatalog(元数据)HDFS(Hadoop分布式文件系统)程序语言计算表存储对象存储Hive体系结构-Hive设计特征Hive做为Hadoop的数据仓库处理工具,它所有的数据都存储在Hadoop兼容的文件系统中。Hive在加载数据过程中不会对数据进行任何的修改,只是将数据移动到HDFS中Hive设定的目录下,因此,Hive不支持对数据的改写和添加,所有的数据都是在加载的时候确定的。Hive的设计特点如下。支持索引,加快数据查询。不同的存储类型,例如,纯文本文件、HBase中的文件。将元数据保存在关系数据库中,减少了在查询中执行语义检查时间。可以直接使用存储在Hadoop文件系统中的数据。内置大量用户函数UDF来操作时间、字符串和其他的数据挖掘工具,支持用户扩展UDF函数来完成内置函数无法实现的操作。类SQL的查询方式,将SQL查询转换为MapReduce的job在Hadoop集群上执行。编码跟Hadoop同样使用UTF-8字符集。Hive体系结构用户接口CLI:Cli启动的时候,会同时启动一个Hive副本。JDBC客户端:封装了Thrift,java应用程序,可以通过指定的主机和端口连接到在另一个进程中运行的hive服务器ODBC客户端:ODBC驱动允许支持ODBC协议的应用程序连接到Hive。WUI接口:是通过浏览器访问HiveThrift服务器基于socket通讯,支持跨语言。HiveThrift服务简化了在多编程语言中运行Hive的命令。绑定支持C++,Java,PHP,Python和Ruby语言。HiveHadoopThrift服务器解析器编译器优化器执行器元数据库MapReduceHDFS数据仓库用户接口CLI接口JDBC/ODBC客户端WEB接口Hive体系结构解析器编译器:完成HQL语句从词法分析、语法分析、编译、优化以及执行计划的生成。优化器是一个演化组件,当前它的规则是:列修剪,谓词下压。执行器会顺序执行所有的Job。如果Task链不存在依赖关系,可以采用并发执行的方式执行Job。元数据库Hive的数据由两部分组成:数据文件和元数据。元数据用于存放Hive库的基础信息,它存储在关系数据库中,如mysql、derby。元数据包括:数据库信息、表的名字,表的列和分区及其属性,表的属性,表的数据所在目录等。HadoopHive的数据文件存储在HDFS中,大部分的查询由MapReduce完成。(对于包含*的查询,比如select*fromtbl不会生成MapRedcue作业)HiveHadoopThrift服务器解析器编译器优化器执行器元数据库MapReduceHDFS数据仓库用户接口CLI接口JDBC/ODBC客户端WEB接口HadoopHive的运行机制hive①用户通过用户接口连接Hive,发布HiveSQL②Hive解析查询并制定查询计划③Hive将查询转换成MapReduce作业④Hive在Hadoop上执行MapReduce作业sqlMap/Reducehdfs•table1•table2•table3......用户用户接口1234Hive编译器的运行机制(Hive的核心)语义解析器将查询字符串转换成解析树表达式。语法解析器将解析树转换成基于语句块的内部查询表达式。逻辑计划生成器将内部查询表达式转换为逻辑计划,这些计划由逻辑操作树组成,操作符是Hive的最小处理单元,每个操作符处理代表一道HDFS操作或者是MR作业。查询计划生成器将逻辑计划转化成物理计划(MRJob)。Hive的应用场景-Hive的优势解决了传统关系数据库在大数据处理上的瓶颈。适合大数据的批量处理。充分利用集群的CPU计算资源、存储资源,实现并行计算。Hive支持标准SQL语法,免去了编写MR程序的过程,减少了开发成本。具有良好的扩展性,拓展功能方便。Hive的优势-上百行MR程序与一条HQL的对比Hive的应用场景-Hive的缺点Hive的HQL表达能力有限:有些复杂运算用HQL不易表达。Hive效率低:Hive自动生成MR作业,通常不够智能;HQL调优困难,粒度较粗;可控性差。针对Hive运行效率低下的问题,促使人们去寻找一种更快,更具交互性的分析框架。SparkSQL的出现则有效的提高了Sql在Hadoop上的分析运行效率。Hive的应用场景适用场景海量数据的存储处理数据挖掘海量数据的离线分析不适用场景复杂的机器学习算法复杂的科学计算联机交互式实时查询Hive开发使用-Hive的连接HiveServer2目前Hive的Thrift服务端通常使用HiveServer2,它是HiveServer改进版本,它提供了新的ThriftAPI来处理JDBC或者ODBC客户端,可以进行Kerberos身份验证,支持多个客户端并发。BeeLineHiveServer2还提供了新的CLI:BeeLine,它是Hive0.11引入的新的交互式CLI,基于SQLLine,可以作为HiveJDBCClient端访问HievServer2。通过BeeLine连接hivehive安装目录/bin/./beeline-ujdbc:hive2://hiveServer2所在ip:端口号-n用户名例如:./beeline-ujdbc:hive2://127.0.0.1:10000-nrootHive开发使用-Hive的基本数据类型基本类型大小描述TINYINT1个字节有符号整数SMALLINT2个字节有符号整数INT4个字节有符号整数BIGINT8个字节有符号整数STRING最大2GB字符串,类似SQL中的VARCHAR类型FLOAT4个字节单精度浮点型DOUBLE8个字节双精度浮点型BOOLEAN~TRUE/FALSEHive开发使用-Hive的复杂数据类型Hive开发使用-Hive元数据库表简介表名说明关联键DBS元数据库信息,存放HDFS路径信息DB_IDTBLS所有hive表的基本信息TBL_ID,SD_ID,DB_IDTABLE_PARAM表级属性,如是否外部表,表注释等TBL_IDCOLUMNS_V2Hive表字段信息(字段注释,字段名,字段类型,字段序号)CD_IDSDS所有hive表、表分区所对应的hdfs数据目录和数据格式SD_ID,SERDE_IDSERDESHive表的序列化类型SERDE_IDSERDE_PARAM序列化反序列化信息,如行分隔符、列分隔符、NULL的表示字符等SERDE_IDPARTITIONSHive表分区信息PART_ID,SD_ID,TBL_IDPARTITION_KEYSHive分区表分区键TBL_IDPARTITION_KEY_VALSHive表分区名(键值)PART_IDSEQUENCE_TABLE保存Hive对象的下一个可用ID,包括数据库,表,字段,分区等对象的下一个ID。默认ID每次+5SEQUENCE_NAME,NEXT_VALHive开发使用-Hive的数据模型Hive数据库类似传统数据库的DataBase,在元数据库里实际是一张表。对应于HDFS上的数据仓库目录下是一个文件夹。数据仓库目录路径,由hive-site.xml中${hive.metastore.warehouse.dir}参数指定。创建数据库示例:createdatabase数据库名;元数据库中查询数据库列表:select*fromdbs;如下图:Hive开发使用-Hive的数据模型内部表内部表与关系数据库中的Table在概念上类似。每一个Table在Hive中都有一个相应的目录存储数据。所有的Table数据(不包括ExternalTable)都保存在这个目录中。删除表时,元数据与数据都会被删除。元数据库中查询数据表列表:HDFS下对应存储目录:Hive开发使用-Hive的数据模型外部表外部表指向已经在HDFS中存在的数据,可以创建Partition。它和内部表在元数据的组织上是相同的,而实际数据的存储则有较大的差异。内部表的创建过程和数据加载过程这两个过程可以分别独立完成,也可以在同一个语句中完成,在加载数据的过程中,实际数据会被移动到数据仓库目录中;之后对数据访问将会直接在数据仓库目录中完成。删除表时,表中的数据和元数据将会被同时删除。而外部表只有一个过程,加载数据和创建表同时完成(CREATEEXTERNALTABLE……LOCATION),实际数据是存储在LOCATION后面指定的HDFS路径中,并不会移动到数据仓库目录中。当删除一个ExternalTable时,仅删除该链接。Hive开发使用-Hive的数据模型如何选择使用内部表或外部表?如果所有处理都由hive来完成,则使用内部表如果需要用hive和外部其他工具处理同一组数据集,则使用外部表。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是将表的列通过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。如果想应用很多的Map任务这样是不错的选择。Hive开发使用-Hive的数据模型Hive的视图视图与传统数据库的视图类似。视图是只读的,它基于的基本表,如果改变,数据增加不会影响视图的呈现;如果删除,会出现问题。如
本文标题:Hive入门+实战
链接地址:https://www.777doc.com/doc-4348570 .html