您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 信息化管理 > 第7讲:Hive数据仓库
第7讲Hive数据仓库数据分析者面临的问题•数据日趋庞大,无论是入库和查询,都出现性能瓶颈•用户的应用和分析结果呈整合趋势,对实时性和响应时间要求越来越高•使用的模型越来越复杂,计算量指数级上升数据分析者期待的解决方案•完美解决性能瓶颈,在可见未来不容易出现新瓶颈•过去所拥有的技能可以平稳过渡。比如SQL、R•转移平台的成本有多高?平台软硬件成本,再开发成本,技能再培养成本,维护成本Hive简介•起源自facebook由JeffHammerbacher领导的团队•构建在Hadoop上的数据仓库框架•设计目的是让SQL技能良好,但Java技能较弱的分析师可以查询海量数据•2008年facebook把hive项目贡献给ApacheHive•数据仓库工具。可以把Hadoop下的原始结构化数据变成Hive中的表•支持一种与SQL几乎完全相同的语言HiveQL。除了不支持更新、索引和事务,几乎SQL的其它特征都能支持•可以看成是从SQL到Map-Reduce的映射器•提供shell、JDBC/ODBC、Thrift、Web等接口•Hive不适合用于联机事务处理,也不提供实时查询功能。最适合应用在基于大量不可变数据的批处理作业。Hive是建立在Hadoop上的数据仓库基础构架。它提供了一系列的工具,可以用来进行数据提取转化加载(ETL),这是一种可以存储、查询和分析存储在Hadoop中的大规模数据的机制。Hive定义了简单的类SQL查询语言,称为HQL,它允许熟悉SQL的用户查询数据。同时,这个语言也允许熟悉MapReduce开发者的开发自定义的mapper和reducer来处理内建的mapper和reducer无法完成的复杂的分析工作。Hive现状•Hadoop生态圈中的重要项目•企业级数据仓库的主流架构之一•解决“即席查询”的问题•注意Cloudera的Impala项目,号称比Hive要快3-30倍•兼容SQL是目前大数据产品的风向标体系结构图•1、用户接口主要有三个:命令行(CLI),客户端(Client)和WEB界面(WUI)。其中最常用的是CLI,Cli启动的时候,会同时启动一个Hive服务。Client是Hive的客户端,用户连接至HiveServer。在启动Client模式的时候,需要指出HiveServer所在节点,并且在该节点启动HiveServer。WUI是通过浏览器访问Hive。•2、元数据存储。Hive将元数据存储在数据库中,如mysql、derby嵌入式数据库。Hive中的元数据包括表的名字,表的列和分区及其属性,表的属性(是否为外部表等),表的数据所在目录等。•3、执行。解释器、编译器、优化器完成HiveQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。•4、HDFS存储。Hive的数据存储在HDFS中,大部分的查询由MapReduce完成(包含*的查询,比如select*fromtbl不会生成MapRedcue任务)。Hive元数据存储Hive将元数据存储在RDBMS中,有三种模式可以连接到数据库:SingleUserMode:此模式连接到一个In-memory的数据库Derby,一般用于UnitTest。Hive安装•内嵌模式:元数据保持在内嵌的Derby模式,只允许一个会话连接•本地独立模式:在本地安装Mysql,把元数据放到Mysql内•远程模式:元数据放置在远程的Mysql数据库内嵌模式安装下载并解压Hive设置环境变量(修改profile文件)配置文件hive-env.sh•cphive-env.sh.templatehive-env.shhive-site.xml•cphive-default.xml.templatehive-site.xml启动hiveHive命令行启动方式:直接输入/hive/bin/hive命令,或者输入hive-servicecli命令。Hiveweb界面启动方式:输入hive-servicehwi命令。Hive采用远程服务启动方式:远程服务的端口号为10000,采用hive--servicehiveserver命令。Hive采用远程后台启动方式:关闭Hive终端,但是Hive服务不退出,采用nohuphive--servicehiveserver命令。简单建删表测试一个常见错误解决方法•修改hadoop-env.shHive安装:独立模式•可参考网络资源:••的服务•Hive不仅仅是一个shell,通过配置,还可以提供Thrift服务器、Web接口、元数据和JDBC/ODBC服务,具有强大的功能和良好的可扩展性。•1、Hiveshell•执行HiveQL(大约相当于SQL92标准)•查看或临时设置Hive参数,只对当前会话有效•创建函数•导入jar包HiveQL查询语言•HiveQL是一种类似SQL的语言查询语言HQLSQL数据存储位置HDFSRawDevice或者LocalFS数据格式用户定义系统决定数据更新不支持支持索引无有执行MapRedcueExecutor执行延迟高低可扩展性高低数据规模大小HiveQL查询语言•1.查询语言。由于SQL被广泛的应用在数据仓库中,因此,专门针对Hive的特性设计了类SQL的查询语言HQL。熟悉SQL开发的开发者可以很方便的使用Hive进行开发。•2.数据存储位置。Hive是建立在Hadoop之上的,所有Hive的数据都是存储在HDFS中的。而数据库则可以将数据保存在块设备或者本地文件系统中。•3.数据格式。Hive中没有定义专门的数据格式,数据格式可以由用户指定,用户定义数据格式需要指定三个属性:列分隔符(通常为空格、”\t”、”\x001″)、行分隔符(”\n”)以及读取文件数据的方法(Hive中默认有三个文件格式TextFile,SequenceFile以及RCFile)。由于在加载数据的过程中,不需要从用户数据格式到Hive定义的数据格式的转换,因此,Hive在加载的过程中不会对数据本身进行任何修改,而只是将数据内容复制或者移动到相应的HDFS目录中。而在数据库中,不同的数据库有不同的存储引擎,定义了自己的数据格式。所有数据都会按照一定的组织存储,因此,数据库加载数据的过程会比较耗时。HiveQL查询语言•4.数据更新。由于Hive是针对数据仓库应用设计的,而数据仓库的内容是读多写少的。因此,Hive中不支持对数据的改写和添加,所有的数据都是在加载的时候中确定好的。而数据库中的数据通常是需要经常进行修改的,因此可以使用INSERTINTO...VALUES添加数据,使用UPDATE...SET修改数据•5.索引。之前已经说过,Hive在加载数据的过程中不会对数据进行任何处理,甚至不会对数据进行扫描,因此也没有对数据中的某些Key建立索引。Hive要访问数据中满足条件的特定值时,需要暴力扫描整个数据,因此访问延迟较高。由于MapReduce的引入,Hive可以并行访问数据,因此即使没有索引,对于大数据量的访问,Hive仍然可以体现出优势。数据库中,通常会针对一个或者几个列建立索引,因此对于少量的特定条件的数据的访问,数据库可以有很高的效率,较低的延迟。由于数据的访问延迟较高,决定了Hive不适合在线数据查询。•6.执行。Hive中大多数查询的执行是通过Hadoop提供的MapReduce来实现的(类似select*fromtbl的查询不需要MapReduce)。而数据库通常有自己的执行引擎。HiveQL查询语言•7.执行延迟。之前提到,Hive在查询数据的时候,由于没有索引,需要扫描整个表,因此延迟较高。另外一个导致Hive执行延迟高的因素是MapReduce框架。由于MapReduce本身具有较高的延迟,因此在利用MapReduce执行Hive查询时,也会有较高的延迟。相对的,数据库的执行延迟较低。当然,这个低是有条件的,即数据规模较小,当数据规模大到超过数据库的处理能力的时候,Hive的并行计算显然能体现出优势。•8.可扩展性。由于Hive是建立在Hadoop之上的,因此Hive的可扩展性是和Hadoop的可扩展性是一致的。而数据库由于ACID语义的严格限制,扩展行非常有限。•9.数据规模。由于Hive建立在集群上并可以利用MapReduce进行并行计算,因此可以支持很大规模的数据;对应的,数据库可以支持的数据规模较小。HiveQL查询语言•Hive安装与部署成功之后,在命令行输入hive进入shell。•1、退出shell:•Hivequit;•2、查看已有表•Hiveshowtables;•3、查看表结构•Hivedescribetablename;建表•CreateTable•CREATE[EXTERNAL]TABLE[IFNOTEXISTS]table_name•[(col_namedata_type[COMMENTcol_comment],...)]•[COMMENTtable_comment]•[PARTITIONEDBY(col_namedata_type•[COMMENTcol_comment],...)]•[CLUSTEREDBY(col_name,col_name,...)•[SORTEDBY(col_name[ASC|DESC],...)]•INTOnum_bucketsBUCKETS]•[ROWFORMATrow_format]•[STOREDASfile_format]•[LOCATIONhdfs_path]•CREATETABLE创建一个指定名字的表。如果相同名字的表已经存在,则抛出异常;用户可以用IFNOTEXIST选项来忽略这个异常。•EXTERNAL关键字可以让用户创建一个外部表,在建表的同时指定一个指向实际数据的路径(LOCATION),Hive创建内部表时,会将数据移动到数据仓库指向的路径;若创建外部表,仅记录数据所在的路径,不对数据的位置做任何改变。在删除表的时候,内部表的元数据和数据会被一起删除,而外部表只删除元数据,不删除数据。•LIKE允许用户复制现有的表结构,但是不复制数据。•用户在建表的时候可以自定义SerDe或者使用自带的SerDe。如果没有指定ROWFORMAT或者ROWFORMATDELIMITED,将会使用自带的SerDe。在建表的时候,用户还需要为表指定列,用户在指定表的列的同时也会指定自定义的SerDe,Hive通过SerDe确定表的具体的列的数据。•如果文件数据是纯文本,可以使用STOREDASTEXTFILE。如果数据需要压缩,使用STOREDASSEQUENCE。•有分区的表可以在创建的时候使用PARTITIONEDBY语句。一个表可以拥有一个或者多个分区,每一个分区单独存在一个目录下。而且,表和分区都可以对某个列进行CLUSTEREDBY操作,将若干个列放入一个桶(bucket)中。也可以利用SORTBY对数据进行排序。这样可以为特定应用提高性能。•表名和列名不区分大小写,SerDe和属性名区分大小写。表和列的注释是字符串。创建表创建表列类型•Hive支持的数据类型如下:•原生类型:•TINYINT•SMALLINT•INT•BIGINT•BOOLEAN•FLOAT•DOUBLE•STRING•BINARY(Hive0.8.0以上才可用)•TIMESTAMP(Hive0.8.0以上才可用)•复合类型:•arrays:ARRAYdata_type•maps:MAPprimitive_type,data_type•structs:STRUCTcol_name:data_type[COMMENTcol_comment],
本文标题:第7讲:Hive数据仓库
链接地址:https://www.777doc.com/doc-5551357 .html