数据仓库技术应用全套课件_第1页
数据仓库技术应用全套课件_第2页
数据仓库技术应用全套课件_第3页
数据仓库技术应用全套课件_第4页
数据仓库技术应用全套课件_第5页
已阅读5页,还剩334页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

《数据仓库技术应用》

岗前知识培训

目录数据仓库概念传统数据仓库面临的挑战Hive简介Hive与Hadoop生态系统中其他组件的关系Hive与传统数据库的对比分析1 数据仓库概念数据仓库(DataWarehouse)是一个面向主题的(SubjectOriented)、集成的(Integrated)、相对稳定的(Non-Volatile)、反映历史变化(TimeVariant)的数据集合,用于支持管理决策。图1数据仓库的体系结构(1)无法满足快速增长的海量数据存储需求(2)无法有效处理不同类型的数据(3)计算和处理能力不足2传统数据仓库面临的挑战3Hive简介Hive是一个构建于Hadoop顶层的数据仓库工具支持大规模数据存储、分析,具有良好的可扩展性某种程度上可以看作是用户编程接口,本身不存储和处理数据依赖分布式文件系统HDFS存储数据依赖分布式并行计算模型MapReduce处理数据定义了简单的类似SQL的查询语言——HiveQL用户可以通过编写的HiveQL语句运行MapReduce任务可以很容易把原来构建在关系数据库上的数据仓库应用程序移植到Hadoop平台上是一个可以提供有效、合理、直观组织和使用数据的分析工具3Hive简介Hive具有的特点非常适用于数据仓库采用批处理方式处理海量数据Hive需要把HiveQL语句转换成MapReduce任务进行运行数据仓库存储的是静态数据,对静态数据的分析适合采用批处理方式,不需要快速响应给出结果,而且数据本身也不会频繁变化提供适合数据仓库操作的工具Hive本身提供了一系列对数据进行提取、转换、加载(ETL)的工具,可以存储、查询和分析存储在Hadoop中的大规模数据这些工具能够很好地满足数据仓库各种应用场景4Hive与Hadoop生态系统中其他组件的关系Hive依赖于HDFS存储数据Hive依赖于MapReduce处理数据在某些场景下Pig可以作为Hive的替代工具HBase提供数据的实时访问5Hive在企业中的部署和应用图2企业中一种常见的大数据分析平台部署框架1.Hive在企业大数据分析平台中的应用Hive在企业中的部署和应用图3Facebook的数据仓库架构基于Oracle的数据仓库系统已经无法满足激增的业务需求Facebook公司开发了数据仓库工具Hive,并在企业内部进行了大量部署2.Hive在Facebook公司中的应用《数据仓库技术应用》

岗前知识培训

Hive运行原理

目录2.1HiveQL介绍2.2Hive工作原理2.3Hive接口和运行模式2.4Hive与传统数据库的比较2.1HiveQL介绍HiveQL是一种类似SQL的语言,它与大部分的SQL语法兼容,但是并不完全支持SQL标准,如HiveQL早期版本不支持更新操作,也不支持索引和事务,它的子查询和join操作也很局限,这是因其底层依赖于Hadoop分布式平台这一特性决定的,但其有些特点是SQL所无法企及的。例如多表查询、支持createtableasselect和集成MapReduce脚本等。Hive将通过CLI接入,JDBC/ODBC接入,或者HWI接入的相关查询,通过Driver(Complier、Optimizer和Executor),进行编译,分析优化,最后变成可执行的MapReduce。MapReduce开发人员可以把自己写的Mapper和Reducer作为插件支持Hive做更复杂的数据分析。13Hive体系架构14Hive的体系结构可以分为四个部分,如下图所示:(1)用户接口。(2)元数据存储。(3)解释器、编译器、优化器。(4)数据存储。Hive系统架构(1)用户接口。Hive的用户接口主要有三个:命令行接口(CLI)、Web界面(WUI)和远程服务方式(Client)。其中最常用的是CLI,以命令行的形式输入SQL语句进行数据操作,CLI启动时会同时启动一个Hive副本。WUI是通过浏览器方式访问Hive。Client是Hive的客户端,用户连接至HiveServer,通过JDBC等方式进行访问。在启动Client模式的时候,需要指出HiveServer所在节点,并且在该节点启动HiveServer。(2)元数据存储Hive将元数据存储在数据库中,如MySql、Derby。Hive中的元数据包括表的名称,表的列,表的分区,表的属性(是否为外部表等)以及表的数据所在目录等。15Hive体系架构(3)驱动模块:解释器、编译器、优化器。

分别完成HiveQL查询语句从词法分析、语法分析、编译、优化以及查询计划的生成。生成的查询计划存储在HDFS中,并在随后有MapReduce调用执行。(4)数据存储。Hive的数据存储在HDFS中,大部分的查询、计算由MapReduce完成(包含*的查询,比如select*fromtbl不会生成MapReduce任务)162.2Hive工作原理2.2Hive的工作原理Hive的工作原理如下图所示。2.2Hive工作原理Hive的整体工作流程如下:(1)执行查询。Hive接口,如命令行或WebUI发送查询驱动程序(任何数据库驱动程序,如JDBC,ODBC等)来执行。(2)获取计划。在驱动程序帮助下查询编译器,分析查询检查语法和查询计划或查询的要求。(3)获取元数据。编译器发送元数据请求到Metastore(任何数据库)。(4)发送元数据。MetaStore将元数据作为对编译器的响应发送出去。(5)发送计划。编译器检查要求,并重新发送计划给驱动程序。到此为止,查询解析和编译完成。(6)执行计划。驱动程序发送执行计划到执行引擎。在内部,执行作业的过程是一个MapReduce工作。执行引擎发送作业给主节点JobTracker(或ResourceManager),主节点分配作业任务给从节点TaskTracker(或NodeManager),从节点也就是数据节点。在数据节点上查询执行MapReduce工作。(6.1)元数据操作。与此同时,在执行时,执行引擎可以通过Metastore执行元数据操作。(7)获得结果。执行引擎接收来自数据节点的结果。(8)发送结果给驱动程序。执行引擎发送这些结果值给驱动程序。(9)驱动程序再将结果发送至Hive接口。最后由驱动程序将结果发送给Hive接口。2.3Hive接口和运行模式(1)Hive用户接口Hive对外提供了三种服务模式,即CLI、WUI和Client。对这些服务的用法进行介绍。Hive命令行模式这种方式进行Hive速度快且比较灵活,它允许方便地剪切和粘贴代码,执行HQL文件,且不容易出错。Hive命令行模式启动有两种方式。执行这条命令的前提是要配置Hive的环境变量。

HiveWeb模式HiveWeb模式是基于web界面的,主要用于查看当前HiveServer2服务链接的会话、服务日志、配置参数等信息。Hive的远程服务远程服务(默认端口号10000)启动方式命令如下,“nohup...&”是Linux命令,表示命令在后台运行。2.4Hive与传统数据库的比较Hive的设计目的是为了那些精通SQL技能的分析师能够对存放在HDFS上的大规模数据集上进行查询。Hive在很多方面和传统数据库类似,比如说它支持SQL接口;但是由于其它底层设计的原因,对HDFS和Mapreduce有很强的依赖,这也就意味这Hive的体系结构和传统数据库有很大的区别。这些区别又间接的影响到Hive所支持的一些特性。下表从多个方面列出Hive和传统数据库的差异。

Hive传统数据库查询语言HQLSQL数据存储位置HDFSRawDevice或者LocalFS数据格式用户定义系统决定数据更新不支持支持索引无有执行MapReduceExecutor执行延迟高低可扩展性高低数据规模大小小结本项目的主要任务是Hive的相关知识介绍,包括Hive、HBase、HDFS以及Hive工作原理与体系架构。通过本项目,应该了解Hive与HDFS和HBase的关系,以及Hive的应用场景,掌握Hive的工作原理及体系架构,掌握Hive架构中相关组件的使用方式,为后续Hive的安装部署与运行以及Hive的深入应用打下基础。《数据仓库技术应用》项目1数据仓库环境部署任务1.1部署Hive本地模式01理解Hive的部署方法02掌握Hive的本地模式部署过程学习目标03掌握Hive格式化和启动相关命令任务1.1部署Hive本地模式【任务场景】经理:Hive目前是Hadoop生态圈中最常用的数据仓库工具,大部分互联网公司使用Hive进行日志分析,包括百度、淘宝等。咱们的日志系统数据分析可以基于Hive来做。小张:好的,我马上开始研究Hive数据仓库。经理:Hive是一种建立在Hadoop文件系统上的数据仓库架构,并对存储在HDFS中的数据进行分析和管理;它可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,所以你熟悉SQL语言,Hive分析上手应该非常快。小张:好的,我先基于咱们现有的Hadoop平台把Hive安装部署好。经理:好。任务1.1部署Hive本地模式【任务布置】根据使用场景不同,Hive的安装部署模式分为三种,分别是内嵌模式、本地模式和远程模式。Hive内嵌模式由于只支持单会话连接,所以很少使用。Hive本地安装模式和远程模式都是常见的安装和部署方法。此任务要求完成Hive本地模式的安装部署,安装完成后通过命令格式化Hive元数据库,然后运行和访问Hive。任务1.1部署Hive本地模式8.1.1Hive介绍Hive是建立在Hadoop之上的数据仓库,可对存储在HDFS上的文件中的数据集进行数据整理、特殊查询和分析处理。Hive最初是应Facebook每天产生的海量新兴社会网络数据进行管理和机器学习的需求而产生和发展的。Hive定义了一种类似SQL的查询语言,被称为HQL,对于熟悉SQL的用户可以直接利用Hive来查询数据,但HiveQL不完全支持SQL标准,如不支持更新操作、索引和事务,其子查询和连接操作也存在很多限制。同时,这个语言也允许熟悉MapReduce开发者们开发自定义的mappers和reducers来处理内建的mappers和reducers无法完成的复杂的分析工作。任务1.1部署Hive本地模式Hive是Hadoop生态系统的一个组成部分,Hive在Hadoop生态系统的位置如下图所示:任务1.1部署Hive本地模式Hive与HDFS、HBase的关系:Hive可以直接操作HDFS中的文件作为它的表的数据,也可以使用Hbase数据库作为它的表。Hive和HBase的数据流描述如下图所示。数据源经过ETL工具被抽取到HDFS存储;再由Hive对原始数据进行清洗、处理和计算;Hive清洗处理后的结果,如果是面向海量数据随机查询场景的可存入Hbase,进而展开具体的数据应用。Hive和HBase数据流关系如下图所示:任务1.1部署Hive本地模式Hive与HBase的区别:(1)Hive中的表是纯逻辑表,就只是表的定义等,即表的元数据。Hive本身不存储数据,它完全依赖HDFS和MapReduce。

(2)Hive是基于MapReduce来处理数据;

HBase处理数据是基于列的而不是基于行的模式,适合海量数据的随机访问。(3)HBase的表是疏松的存储的,因此用户可以给行定义各种不同的列;而Hive表是稠密型,即定义多少列,每一行有存储固定列数的数据。(4)Hive使用Hadoop来分析处理数据,而Hadoop系统是批处理系统,因此不能保证处理的低迟延问题;而HBase是近实时系统,支持实时查询。(5)Hive不提供行级别的更新,它适用于大量append-only数据集(如日志)的批任务处理。而基于HBase的查询,支持行级别的更新。(6)Hive提供完整的SQL实现,通常被用来做一些基于历史数据的挖掘、分析。而HBase是一个NoSQL,不适用与有join,多级索引,表关系复杂的应用场景。任务1.1部署Hive本地模式8.1.2Hive安装方式

Hive中有两类数据:表数据和元数据。和关系型数据库一样,元数据可以看做是描述数据的数据,包括Hive表的数据库名、表名、字段名称与类型、分区字段与类型、表及分区的属性、存放位置等都属于元数据。在项目一中我们知道Hive常用的元数据库有Hive自带的Derby数据库和独立安装的MySQL数据库。元数据存储路径分为本地和远程,可通过hive-site.xml文件设置。根据Hive不同的应用场景,以及元数据库的使用方式不同,可以将Hive的安装方式分为三种,三种方式及具体特点如下表所示:序号安装方式特点1内嵌模式元数据保存在内嵌的Derby数据库,允许一个会话链接,多个会话链接会报错)2本地模式独立安装MySQL替代Derby存储元数据3远程模式MetaStore服务和Hive服务不在同一个节点,远程安装MySQL替代Derby存储元数据任务1.1部署Hive本地模式(1)内嵌模式内嵌模式是Hive默认的配置模式,配置简单,但是一次只能一个客户端连接,只适用于实验,不适用于生产环境。内嵌模式的结构图如下图所示:任务1.1部署Hive本地模式Hive本地模式的结构图如下图所示:(2)本地模式Hive的本地模式不再使用内嵌的Derby作为元数据的存储介质,而是使用其他数据库比如MySQL来存储元数据。Hive服务和MetaStore服务运行在同一个进程中,MySQL是单独的进程,可以和Hive部署在同一台机器,也可以将MySQL部署在远程机器上。这种方式是一个多用户的模式,运行多个用户client连接到一个数据库中。本地模式部署的Hive一般用于公司内部多用户同时访问和操作。每一个用户必须要有对MySQL的访问权利,即每一个客户端使用者都需要知道MySQL的用户名和密码。Hive可以通过本地模式在单台机器上处理所有的任务。对于小数据集,执行时间会明显缩短。任务1.1部署Hive本地模式(3)Hive远程模式:

是将存储元数据的MySQL数据库部署到集群中其他节点的机器,作为元数据服务器。实现了MySQL服务器和Hive服务器分别部署在不同机器上。在远程模式下,Hive服务和MetaStore服务是运行在不同的进程或不同机器上的,在元数据服务器端启动MetaStoreServer,客户端通过MetaStoreServer访问元数据库MySQL。Hive远程模式的访问结构如下图所示:任务1.1部署Hive本地模式【工作流程】部署Hive本地模式的主要工作流程包括:1.安装和配置MySQL;2.安装和配置Hive。其中安装和配置Hive的具体流程包括:(1)解压安装包并配置环境变量;(2)修改Hive的配置文件;(3)在Hive安装目录下创建tmp目录;(4)部署jdbc驱动包;(5)对Hive元数据库进行初始化;(6)启动Hive客户端,测试Hive部署是否成功。任务1.1部署Hive本地模式【操作步骤】Hive本地模式的安装需要将Hive和元数据库MySQL都安装在master节点上。1.安装和配置MySQL具体步骤如下:(1)检查MySQL是否已安装 首先删除linux上已经安装的mysql相关库信息。

[root@master01opt]#rpm-emysql--nodeps

执行命令检查是否删除干净

[root@master01opt]#rpm-qa|grepmysql(2)使用yum源安装mysqlCentOS7的yum源中默认没有mysql,需要首先执行wget命令下载mysql的repo源,具体命令如下所示:

[root@master01opt]#wgethttp:///mysql-community-release-el7-5.noarch.rpm【小提示】如果执行上面命令时提示wget未安装,则需要先安装wget命令,使用yum安装即可,安装命令如下所示:

[root@master01opt]#yuminstall–ywget

安装mysql-community-release-el7-5.noarch.rpm包

[root@master01opt]#rpm-ivhmysql-community-release-el7-5.noarch.rpm

安装mysql服务器端:

[root@master01opt]#yuminstall–ymysql-server任务1.1部署Hive本地模式(3)连接MySQL

启动MySQL服务:

[root@master01opt]#systemctlstartmysql

在shell命令行状态下执行下面命令连接MySQL:

[root@master01opt]#mysql

运行以下命令授予远程访问权限:

mysql>grantallprivilegeson*.*to'root'@'%'identifiedby'root'withgrantoption;

运行以下命令刷新授权表:

mysql>flushprivileges;

运行以下命令创建hive数据库用于存储Hive元数据:

mysql>createdatabasehive; 运行以下命令退出MySQL数据库: mysql>exit;任务1.1部署Hive本地模式2.安装并配置Hive(1)解压安装包并配置环境变量 将下载好的Hive安装包进行解压,并且改为短名,如下两条命令所示:

[root@master01opt]#tarzxvfapache-hive-3.1.2-bin.tar.gz [root@master01opt]#mvapache-hive-3.1.2-binhive

在master节点节点上,编辑/etc/profile文件,添加以下两行内容,配置Hive的环境变量:

exportHIVE_HOME=/opt/hive exportPATH=$PATH:$HIVE_HOME/bin:$HIVE_HOME/conf

运行以下命令,使配置的环境变量生效:

[root@master01opt]#source/etc/profile(2)修改Hive的配置文件Hive的配置文件都存放在Hive安装目录的$HIVE_HOME/conf目录下。进入hive的conf目录,进行以下配置文件的修改:①修改hive-env.sh在hive-env.sh文件中添加以下四个环境变量的配置:

exportJAVA_HOME=/usr/lib/kvm/java##Java路径

exportHADOOP_HOME=/opt/hadoop##Hadoop安装路径

exportHIVE_HOME=/opt/hive##Hive安装路径

exportHIVE_CONF_DIR=${HIVE_HOME}/conf##Hive配置文件路径任务1.1部署Hive本地模式②新建并修改hive-site.xml在Hive的conf目录下新建hive-site.xml文件,并在文件中配置MySQL数据库连接信息。

<configuration> <property> <name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&characterEncoding=UTF-8&useSSL=false</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> </configuration>任务1.1部署Hive本地模式(3)在终端运行以下命令,在Hive安装目录下创建tmp目录,用于存放hive的临时数据和文件。

[root@master01conf]#mkdir-p/opt/hive/tmp(4)部署jdbc驱动包可以在网络上下载mysql的jdbc驱动包mysql-connector-java-5.1.25-bin.jar(或其他版本jar包也可以),下载完成后把jar包拷贝到Hive安装目录的$HIVE_HOME/lib目录下。(5)对hive元数据库进行初始化,在linux终端执行以下命令:

[root@master01conf]#schematool-dbTypemysql–initSchema(6)检测Hive是否安装成功,直接在安装Hive本地模式的机器的shell终端运行hive命令即可启动Hive客户端。注意:启动Hive之前需要确保Hadoop进程正常启动。启动Hive客户端如下所示:任务总结本项目的主要任务是深入理解Hive的3种不同安装和部署方式以及区别。完成Hive本地模式安装部署。

掌握Hive的启动和访问方法。通过本项目的学习,可以理解Hive和Hadoop的依赖关系,能够自主完成Hive的部署规划和安装,并具备Hive的启动和访问操作能力《数据仓库技术应用》项目2数据仓库环境部署任务1.2部署Hive远程模式学习任务任务1.2部署Hive远程模式【任务场景】小张:经理,我已经完成了Hive的安装部署,采用的本地模式,目前把元数据库MySQL和Hive都安装到了一个节点上。经理:这样可能存在安全隐患,基于公司的Hadoop集群,我建议最好把元数据库和Hive分开部署在不同节点上,也就是采用远程模式进行部署。小张:好的,我尽快改造完成。经理:好。任务1.2部署Hive远程模式【任务布置】此任务要求完成Hive远程模式的安装和部署,将Hive的元数据库和Hive服务器安装在不同的机器节点上。安装完成后启动Hive的后台服务,客户端进行连接和访问Hive。任务1.2部署Hive远程模式Hive远程模式部署:是指远程部署MySQL数据库来代替Hive自带的Derby数据库,使得Hive服务器和元数据MySQL服务器运行在不同的节点上,Hive服务和MetaStore服务运行在不同的进程或不同机器上。Hive远程模式是企业实际产生环境下常用的一种部署方式,安装部署过程比本地模式相对复杂一些,访问方式也不太一样,需要特别注意。

此任务需要完成Hive远程模式的安装,基于已经完成Hadoop集群部署的三台机器master、worker1和worker2进行部署。Hive远程模式安装部署的规划如下表所示:节点名称用途masterHiveClient客户端worker1HiveServer服务器worker2元数据服务器:安装MySQLServer任务1.2部署Hive远程模式远程模式需要在hive-site.xml配置文件中将hive.metastore.local设置为false,并将hive.metastore.uris设置为MetaStore服务器URI,如有多个MetaStore服务器,URI之间用逗号分隔。MetaStore服务器URI的格式为thrift://host:port,如下所示:

其实仅连接远程的MySQL元数据库服务器并不能称之为“远程模式”,是否远程指的是MetaStore和Hive服务是否在同一进程内,也就是说,“远”指的是MetaStore服务和Hive服务离得“远”。

<property> <name>hive.metastore.uris</name> <value>thrift://:9083</value></property>任务1.2部署Hive远程模式【工作流程】部署Hive远程模式的主要工作流程包括:1.在master和worker1节点部署Hive;2.worker1作为hiveserver进行配置;3.master作为客户端进行配置;4.在worker2节点上安装MySQL服务器;5.启动Hive。任务1.2部署Hive远程模式【操作步骤】1.在master和worker1节点部署Hive将Hive安装包下载并存放到master节点的/usr/local/soft目录下,下面先在master节点中对hive进行解压,然后将其复制到worker1节点中。(1)master节点中创建工作路径,并解压Hive到此路径下,操作命令如下:mkdir-p/usr/hivetar-zxvf/usr/local/soft/apache-hive-2.1.1-bin.tar.gz-C/usr/hive/(2)接下来在worker1节点上建立文件夹/usr/hive,将master中的Hive解压包远程复制到worker1。scp-r/usr/hive/apache-hive-2.1.1-binroot@worker1:/usr/hive/(3)在master和worker1节点修改/etc/profile文件,设置Hive环境变量。在/etc/profile文件中增加以下两行:exportHIVE_HOME=/usr/hive/apache-hive-2.1.1-binexportPATH=$PATH:$HIVE_HOME/bin

运行以下命令使环境变量生效:source/etc/profile任务1.2部署Hive远程模式2.worker1作为hiveserver进行配置(1)worker1节点为Hive服务器端需要和元数据库MySQL通信,所以worker1节点需要使用MySQL的驱动jar包,可以在网上下载mysql-connector-java-5.1.25-bin.jar驱动包,并将此驱动包拷贝到worker1节点的$HIVE_HOME/lib目录下。(2)修改worker1节点的hive-env.sh文件中HADOOP_HOME环境变量。进入hive配置目录,因为hive中已经给出配置文件的范本hive-env.sh.template,直接将其复制一份进行修改即可,主要命令如下所示:cd$HIVE_HOME/confcphive-env.sh.templatehive-env.shvimhive-env.sh(3)编辑hive-env.sh文件,根据hadoop的实际安装路径配置HADOOP_HOME环境变量,在文件中添加如下一行:HADOOP_HOME=/usr/local/hadoop/(4)在worker1节点的$HIVE_HOME/conf目录下新建hive-site.xml,并配置hive-site.xml文件的内容:vimhive-site.xml任务1.2部署Hive远程模式

在hive-site.xml文件中添加以下内容:

<configuration> <!--Hive产生的元数据存放位置--> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive_remote/warehouse</value> </property> <!--数据库连接JDBC的URL地址--> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://worker2:3306/hive?createDatabaseIfNotExist=true</value>#连接MySQL所在的ip(主机名)及端口

</property> <!--数据库连接driver,即MySQL驱动--> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property>

任务1.2部署Hive远程模式<!--MySQL数据库用户名--> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>root</value> </property> <!--MySQL数据库密码--> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>123456</value> </property><property><name>hive.metastore.schema.verification</name><value>false</value></property><property><name>datanucleus.schema.autoCreateAll</name><value>true</value></property></configuration>任务1.2部署Hive远程模式3.master作为客户端进行配置(1)由于客户端需要和Hadoop通信,首先需要解决Hive和Hadoop通信jar包版本冲突和jar包依赖问题。更改Hadoop中jline的版本。即保留一个高版本的jlinejar包,从hive的lib包中拷贝到Hadoop中$HADOOP_HOME/share/hadoop/yarn/lib目录下。执行命令如下:cp/usr/hive/apache-hive-2.1.1-bin/lib/jline-2.12.jar/usr/local/hadoop/share/hadoop/yarn/lib/(2)接下来,修改master节点的hive-env.sh中HADOOP_HOME环境变量:HADOOP_HOME=/usr/local/hadoop(3)在master节点创建hive-site.xml文件,文件中配置内容如下:<configuration><!--Hive产生的元数据存放位置--><property><name>hive.metastore.warehouse.dir</name><value>/user/hive_remote/warehouse</value></property><!---使用本地服务连接Hive,默认为true--><property><name>hive.metastore.local</name><value>false</value></property>任务1.2部署Hive远程模式

<!--连接服务器--> <property> <name>hive.metastore.uris</name> <value>thrift://worker1:9083</value>#hive客户端通过thrift服务器服务连接MySQL数据库,这里的thrift服务器就是worker1的ip(主机名)

</property></configuration>4.在worker2节点上安装MySQL服务器MySQL服务器的安装方法具体可以参照本项目任务1中MySQL安装和配置相关内容,在此不再重复赘述。5.启动Hive经过以上的安装和配置,Hive的远程模式即部署完成,接下来将按照以下步骤完成Hive启动。(1)worker1作为服务器端,执行以下命令开启hiveserver:bin/hive--servicemetastore任务1.2部署Hive远程模式(2)master作为客户端,在客户端执行以下命令启动Hive。hive【小提示】启动命令为全小写。(3)在hive客户端下运行showdatabases命令,测试Hive是否启动成功:• hive>showdatabases;通过上图可以看出,master节点作为hive客户端,启动客户端命令hive,通过showdatabases命令可以查看到MySQL服务器,说明连接MySQL成功。hive的远程模式部署成功。项目总结本项目的主要任务是深入理解Hive的3种不同安装和部署方式以及区别。分别完成Hive本地模式和远程模式的安装部署。

掌握不同安装模式下,Hive的启动和访问方法。通过本项目的学习,可以理解Hive和Hadoop的依赖关系,能够自主完成Hive的部署规划和安装,并具备Hive的启动和访问操作能力《数据仓库技术应用》项目2基于DDL的学员信息系统操作01了解Hive数据模型的相关概念02掌握数据库相关操作,能够创建和管理Hive数据库学习目标任务1学员信息数据仓库操作【任务描述】本任务在前面已完成安装Hive的基础上,需要读者了解Hive数据模型的相关概念基础上,完成Hive数据库的创建和管理。【任务分析】此任务将完成在Hive当中创建存放学员信息的数据库,并完成数据库的修改、查询、删除等管理操作。数据库可以看成是一个存储数据对象的一个容器,Hive中数据库的概念本质上仅仅是表的一个目录或者命名空间,本任务用命令行方式来创建和管理数据库。任务1学员信息数据仓库操作Hive的数据模型和各种关系数据库非常相似,Hive中所有的数据都存储在分布式文件系统(HDFS)中。Hive的数据模型主要用于组织数据元素,并且按照某种关系使各个数据元素之间进行相互关联。数据模型主要有数据库(database)、表(table)、partition(分区)和bucket(桶)四部分组成,结构图如图2-1所示,这些对象都是定义在HiveMetastore的元数据层中的逻辑单元。其中,逻辑单元是由各种数据类型组成,这些数据类型将文件中的实际数据与模式中的列关联起来。任务1学员信息数据仓库操作1. 数据库(database)Hive数据库与我们熟悉的RDBMS领域的数据库略有不同,类似于数据库中表的一个目录或者是命名空间,本质上是一个用于保存一组表的元数据信息的命名空间。主要用于实现用户和数据库应用的相互隔离,通过此模型我们可以将两者分别隔离到两个互不相同的数据库或者模式中。Hive数据库提供了创建数据库、使用数据库、删除数据库等相关数据库命令。用户可以使用createdatabase命令在系统中创建一个新的数据库,该命令的完整语法如下:CREATE(DATABASE|SCHEMA)[IFNOTEXISTS]DATABASE_NAME[COMMENTDATABASE_COMMENT][LOCATIONHDFS_PATH][WITHDBPROPERTIES(PROPERTY_NAME=PROPERTY_VALUE,…)];任务1学员信息数据仓库操作语法格式说明:语法中“[]”内为可选项,(|)表示二选一。语句中的大写单词为命令动词,输入命令时,不能更改命令动词含义,输入命令与大小写无关。语法说明:数据库名(DATABASE_NAME):命令中的数据库名字必须符合操作系统文件夹命名规则。IFNOTEXISTS:在建数据库时进行判断,只有该数据库目前尚不在Hive中存在时,系统才会执行CREATEDATABASE操作。用此选项可以避免出现数据库已经存在而新建的错误。LOCATION:需要指定Hive数据库的存储位置时,可以用此选项来定义该数据库的存储位置。WITHDBPROPERTIES:可以用此选项将任何自定义属性指派给我们新建的数据库。注意:第一次安装Hive时,Hive会创建一个名为default的默认数据库,这个是系统数据库,Hive数据库的系统信息都存储在这个数据库中。如果删除了这些数据库,Hive将不能正常的工作。对于用户的数据,我们需要创建新的数据库来存放。任务1学员信息数据仓库操作创建了数据库之后,用户可以使用use命令,来打开某一个数据库,该命令的完整语法如下:USEDATABASE_NAME;数据库创建后,如果我们需要修改数据库参数,可以使用ALTERDATABASE命令,其语法格式如下:ALTER[DATABASE|SCHEMA]DATABASE_NAMESETDBPROPERTIES(PROPERTY_NAME=PROPERTY_VALUE,…);如果需要删除已经创建的数据库,可以使用DROPDATABASE命令,该命令的完整语法如下:DROPDATABASE[IFEXISTS]DATABASE_NAME[RESTRICT|CASCADE];任务1学员信息数据仓库操作2.表(table)Hive表主要是由表中存储的数据和元数据两部分组成。表中存储的数据一般存放在分布式文件系统中,如HDFS;元数据通常存储在关系数据库中,如MySQL,元数据是在创建数据库表之后,还没有加载数据时产生,主要用于记录表的相关描述信息。Hive表一般分为内部表和外部表两种。3.分区(partition)数据分区的概念已经存在很长时间了,它的存在形式是多种多样的,我们通常使用分区来水平的分散用户获取信息的压力,将频繁使用的数据从物理上转移离用户更近的地方。Hive中的分区主要是指分区表,我们可以根据“分区列”的值对表的数据进行大概粗略的划分,将数据以一种比较符合逻辑的方式进行组织,比如分层存储。分区表在Hive存储当中应用比较广泛,比如在表的主目录(Hive的表实际显示就是一个文件夹)下的一个子目录,这个主目录(或文件夹)的名字就是我们在Hive中定义的分区列的名字,对于一个没有实际操作经验的人,则他可能会认为分区列只是Hive表中的某个字段,其实这种想法是错误的,Hive中的分区列是独立的列,单独存在的,我们可以根据这个列来存储表里面的数据文件。任务1学员信息数据仓库操作分区的主要作用是为了加快数据查询的速度,当我们在查询某一个分区列当中的数据时候,没必要对全表进行查询扫描,我们只需要使用条件语句Where,通过关键字来查询某一个数据信息,下面我们列举一个Hive中的分区实例。具体例子如下:(1)创建一个分区表partition_table,以time为分区列:createtablePartition_table(idint,namestring)partitionedby(timestring)rowformatdelimitedfieldsterminatedby't'storedastextfile;(2)将数据添加到时间为2019-04-28这个分区中:loaddatalocalinpath'/home/hadoop/Desktop/data.txt'overwriteintotablepartition_tablepartition(time='2019-04-28');(3)从一个分区中查询数据:select*frompartition_tablewheretime='2019-04-28';(4)往一个分区表的某一个分区中添加数据:insertoverwritetablepartition_tablepartition(time='2019-04-28')selectid,max(name)fromtestgroupbyid;(5)可以查看分区的具体情况,使用命令:hadoopfs-ls/home/hadoop.Hive/warehouse/partition_table或者showpartitionstablename;任务1学员信息数据仓库操作4.桶(bucket)前面我们讲到的数据模型中的表和分区都是目录级别的对数据进行拆分,而桶则是对源数据文件本身进行的一种数据拆分。对于一个表或者一个分区,Hive可以将其进一步划分为更细的数据块-桶,使用桶的表会将源数据文件按一定规律拆分成多个文件,物理上,每个桶就是表(或分区)目录里的一个文件。桶经典的采用了分而治之的思想,主要是为了解决大表和大表之间的连接问题。Hive和分区一样也是针对某一列进行桶的组织,这里的列字段是对应于数据文件中具体的某个列。在Hive中,分桶的方式采取的是:对列的值进行hash除以桶的数量取余。我们把表(或者分区)组织成桶(Bucket)的优点是:(1)提升查询处理效率。桶为表加上了额外的结构,Hive在处理有些查询时能利用这个结构。(2)使取样(sampling)更高效。在处理大规模数据集时,使用桶可以节省我们很多时间,提高查找数据的效率。任务1学员信息数据仓库操作1.创建数据库创建一个名为Student的数据库,用于存放学员信息:

小提示:该命令将在HiveMetastore中创建一个名为Student的新的命名空间,在本例子当中由于我们没有在HDFS上指定该数据库的位置,它将在Hive.metastore.warehouse.dir中定义的默认顶层目录下创建一个名为Studentdatabase的目录,文件名为Studentdatabase.db。2.使用完整语法创建一个数据库sopdm,指定存放位置。createdatabaseifnotexistssopdmcomment‘thisistestdatabase’withdbproperties(‘creator’=’gxw’,’date’=’2014-11-12’):location‘/my/preferred/directory’;。任务1学员信息数据仓库操作3.查看Hive中全部的数据库显示Hive中已经建立的数据库,可以使用showdatabases命令,例如将当前Metastore中所有的数据库罗列出来,该命令的完整语法如下:Hive>showdatabases;此命令没有用户变量,执行showdatabases命令效果如下所示小提示:如果在Hive中创建了多个数据库,我们可以使用“like”关键字模糊匹配数据库名称,将所需要的数据库筛选出来,如下所示语句,我们可以将D开头的所有数据库列举出来:Hive>showdatabaseslike‘D.*’;任务1学员信息数据仓库操作4.查看数据库信息可以通过describedatabasedefault命令查看当前某一个数据库的相关信息,该命令的完整语法如下:Hive>describedatabasedefault;5.查看我们创建的Student数据库信息Hive>describedatabaseStudent;6.使用或者切换数据库例如要对Student数据库进行操作,可以先执行“useStudent;”命令,将Student数据库指定为当前数据库,如果所示。任务1学员信息数据仓库操作7.删除数据库删除Hive当中的数据库StudentHive>dropdatabaseifexistsStudent;任务1拓展【任务拓展】1.请描述Hive中创建数据库、修改数据、删除数据库都用哪些操作命令?2.思考Hive数据库存储和Hadoop存储有何关系?任务2学员数据模型创建与操作【任务描述】本任务我们将继续HiveQLDDL的学习,在了解Hive数据模型的基础上,深入学习Hive的数据类型,表格类型,并完成学院信息表的创建,查询和删除等操作。【任务分析】在任务1中,我们通过认识数据类型和表格类型,理解并掌握如何在Hive当中查看、创建、修改、删除不同类型的表格,是Hive当中的重点基础。任务2学员数据模型创建与操作1.Hive的数据类型Hive的内置数据类型可以分为基础数据类型和复杂数据类型两大类。Hive中的每一列都有对应的数据类型,其数据类型和Java基本相同。基础数据类型包括布尔型,整数型,浮点型,字符串等。表2-1中列出了在Hive中使用的基础数据类型。表2-1基本数据类型类别类型描述示例布尔型BOOLEANtrue/falseTRUE二进制BINARY可变长度字节和数组

整型TINYINT1字节的有符号整数45YSAMLLINT2个字节的有符号整数100SINT4个字节的带符号整数36BIGINT8字节带符号整数2000L浮点型FLOAT4字节单精度浮点数3.14159DOUBLE8字节双精度浮点数2.13DECIMAL任意精度的带符号小数-1.175字符串STRING可变长度字符串,最大2GB“hello,world”VARCHAR可变长度字符串“APPLE”CHAR固定长度字符串“zsD”时间戳TIMESTAMP时间戳,纳秒精度122327493795日期DATE日期,内容格式:YYYY­MM­DD‘2016-03-29’任务2学员数据模型创建与操作Hive中有以下四种复合数据类型:1.数组:数组(ARRAY)类型是由一系列相同数据类型的元素组成的有序复合集,这些元素可以通过下标来访问。数组的下标从0开始。例如,你可以声明一个ARRAY类型的变量FRUITS。hive>FRUITSARRAY<'APPLE','ORANGE','MANGO'>我们可以通过FRUITS[0]来访问元素APPLE,FRUITS[2]来访问元素MANGO,因为ARRAY类型的下标是从0开始的。2.映射:映射(MAP)类型是一种无序的键/值(key/value)对集合。其中MAP的键是基础数据类型,值可以是Hive中的任何数据类型。例如,你可以声明一个MAP类型的变量STUDENT。hive>STUDENTMAP<'PETER','95'>我们可以通过键来访问值,在这个类型当中PETER是key,95是value;那么我们可以通过STUDENT['PETER']来得到这个学生对应的分数95。任务2学员数据模型创建与操作3.结构体:结构体STRUCT类型是一种含有多个字段的数据类型,这些字段可以是任何数据类型。例如SS,可以使用STRUCT存储用户的详细地址。hive>ADRESSSTRUCT<number:STRING,street:STRING,city:STRING>4.联合体:联合体UNION类型提供了一种方法,可以不同的数据类型出存在同一个字段的不同行。例如,如果数据文件存放了客户的联系信息,但是每条联系信息中包含了一个或多个电话或邮箱地址,那么可以声明一个CONTACT变量来存储这条信息。hive>CONTACTUNIONTYPE<int,array<int>,string,array<string>>任务2学员数据模型创建与操作2.Hive表的分类Hive是基于Hadoop的一个数据仓库,可以将结构化的数据文件映射为一张表,并提供类似于SQL的查询功能,Hive底层将SQL语句转化为MapReduce任务运行。Hive是一个数据仓库,不支持行级插入、更新以及删除操作。Hive共有四种表,分别是内部表、外部表、分区表和桶表。内部表(table)内部表有时也被称为管理表。这种表会控制着数据的生命周期,Hive默认情况下会将这些表的数据存储在/user/hive/warehouse子目录下,由hive自身管理,删除内部表会同时删除存储数据和元数据所定义的目录的子目录下。当我们删除内部表时,同时会删除这个表中的数据。因此内部表不方便与其他工具共享数据。外部表(externaltable)外部表指向特定目录的一份数据,Hive并不对该数据具有所有权。数据存储位置由用户自己指定,由HDFS管理,删除外部表时仅仅会删除元数据,存储数据不会受到影响。数据可以被多个工具共享。即外部表只是对数据进行逻辑管理。任务2学员数据模型创建与操作分区表(partition)分区表是一种内部表。将数据按照某个字段或者关键字分成多个子目录来存储。通过指定一个或多个分区键(partitionkey),决定数据存放方式,进而优化数据的查询。每个表可以指定多个分区键,每个分区键在Hive中以文件夹的形式存在。如下所示是对数据的年份进行分区,每个年份对应一个目录,年份相同的数据会放到同一个目录下(图2-2):图2-2

对Hive表中数据按照年份进行分区任务2学员数据模型创建与操作桶表(bucket)桶表也是内部表,它将数据分割成更小的片段一遍我们更高效的访问查找数据。在Hive分区表中,分区中的数据量过于庞大时,建议使用桶。分桶后的查询效率比分区后的查询效率更高。分桶表是对列值取哈希值的方式,将不同数据放到不同文件中存储由列的哈希值除以桶的个数来决定每条数据划分在哪个桶中。图2-3

对Hive表中数据按照ID进行分桶任务2学员数据模型创建与操作创建表格1).内部表(table)Hive中的内部表与数据库中的Table在概念上是类似的,创建一个名为Stu_table_name的内部表可以用如下语句:#字段之间以逗号分隔

hive>createtableStu_table_name(idint,namestring)rowformatdelimitedfieldsterminatedby‘,’;

创建完成后使用showtables命令查看是否创建成功。hive>showtables;任务2学员数据模型创建与操作2).外部表(externaltable)对于外部表,在创建的时候,需要加上EXTERNAL关键字,不使用EXTERNAL关键字创建的表为内部表,如创建一个名为Ext_Stu_table的外部表:#字段之间以逗号分隔hive>createexternaltableExt_Stu_table(idint,namestring)rowformatdelimitedfieldsterminatedby‘,’;任务2学员数据模型创建与操作3).Partition分区表创建分区表的时候,要通过关键字partitionedby(namestring)声明该表是分区表,并且是按照字段name进行分区,name值一致的所有记录存放在一个分区中,分区属性name的类型是string类型。当然,可以依据多个列进行分区,即对某个分区的数据按照某些列继续分区。在查询时候通过where子句中条件指定相应的分区。创建分区表时要注意开启允许动态分区设置,必要的时候还需要设置允许创建的最大分区数。分区设置的基本语法如图2-4。任务2学员数据模型创建与操作创建一个Stu_Partition_table的分区表可以用以下语句:#字段之间以逗号分隔hive>createtableStu_Partition_table(idint,namestring)partitonedby(yearint)rowformatdelimitedfieldsterminatedby‘,’;4).BucketTable桶表桶表在创建的时候使用关键词CLUSTEREDBY来指定划分桶所用列和划分桶的个数。HIVE对key的hash值除bucket个数取余数,保证数据均匀随机分布在所有bucket里。使用关键词SORTEDBY对桶中的一个或多个列另外排序。创建一个名为Stu_Bucket_table的桶表可以使用以下语句:#字段之间以逗号分隔

hive>createtableStu_Bucket_table(idint,namestring)partitonedby(yearint)clusteredby(idint)rowformatdelimitedfieldsterminatedby‘,’;任务2学员数据模型创建与操作2.查看表的结构信息1).查看数据库命令:showdatabases/showschemas例如:显示数据库信息。hive>showdatabases;OKtpcds_parquetTimetaken:1.7seconds,Fetched:3row(s)hive>showdatabaseslike'tpc*';OKtpcds_parquetTimetaken:0.017seconds,Fetched:1row(s)显示配置单元显示架构信息。hive>showschemas;OKtpcds_parquetTimetaken:0.02seconds,Fetched:3row(s)任务2学员数据模型创建与操作2).查看表命令:showtables

例如:查看数据库中的所有表格。hive>showtables;OKTimetaken:0.029seconds,Fetched:18row(s)hive>showtablesindefault;OKTimetaken:0.021seconds,Fetched:18row(s)hive>showtables'test*';OKTimetaken:0.021seconds,Fetched:9row(s)任务2学员数据模型创建与操作3).查看表结构命令:desctable_name;例如:表格test的结构如图2-5所示。任务2学员数据模型创建与操作4).查看表详细属性命令:descformattedtest;例如:表格test的详细属性如图2-6所示:任务2学员数据模型创建与操作5)查看分区表的信息命令:showpartitions;例如:显示一个分区test_partition的信息。hive>showpartitionstest_partition;OKdt=201412

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

最新文档

评论

0/150

提交评论