Hadoop平台搭建与应用(第2版)(微课版)-教案 项目2 Hive环境搭建与基本操作_第1页
Hadoop平台搭建与应用(第2版)(微课版)-教案 项目2 Hive环境搭建与基本操作_第2页
Hadoop平台搭建与应用(第2版)(微课版)-教案 项目2 Hive环境搭建与基本操作_第3页
Hadoop平台搭建与应用(第2版)(微课版)-教案 项目2 Hive环境搭建与基本操作_第4页
Hadoop平台搭建与应用(第2版)(微课版)-教案 项目2 Hive环境搭建与基本操作_第5页
已阅读5页,还剩4页未读 继续免费阅读

下载本文档

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

文档简介

第4页Hadoop平台搭建与应用教案NO.2教师姓名授课班级授课形式理实一体化授课时间年月日第周授课时数6授课章节名称项目

2Hive环境搭建与基本操作教学目的(1)了解Hive产生的背景、Hive架构。(2)识记HiveSQL常用语句。(4)学会Hive的基本操作。教材分析教学重点教学难点Hive的基本操作更新、补充、删节内容课外作业熟练Hive的安装与配置教学过程教学提示项目

2Hive环境搭建与基本操作任务2.1Hive的安装与配置Hive是基于Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,将类SQL语句转换为MapReduce任务,如图2-1所示,并执行此任务。图2-1将类SQL语句转换为MapReduce任务1.Hive数据结构Hive中所有的数据都存储在HDFS中,Hive中包含以下数据结构。(1)Table:Hive中的Table和数据库中的Table在概念上是类似的,每一个Table在Hive中都有一个相应的目录存储数据。(2)Partition(可选):在Hive中,表中的一个Partition对应于表中的一个目录,所有的Partition的数据都存储在对应的目录中。(3)Bucket(可选):Bucket对指定列计算Hash,Partition根据某个列的Hash值散列到不同的Bucket中,目的是进行并行处理,每一个Bucket对应一个文件。2.Hive架构Hive架构如图2-2所示。Hadoop和MapReduce是Hive架构的基础。用户接口主要有CLI客户端、HiveServer客户端、HWI客户端和HUE客户端(开源的ApacheHadoopUI系统),其中最常用的是CLI客户端。在CLI客户端启动时,会同时启动一个Hive副本。在Windows中,可通过JDBC连接HiveServer的图形界面工具,包括SQuirrelSQLClient、OracleSQLDeveloper及DbVisualizer。HWI通过浏览器访问Hive,通过Web控制台与Hadoop集群进行交互来分析及处理数据。MetaStore用于存储和管理Hive的元数据,使用关系数据库来保存元数据信息(MySQL、Derby等),Hive中的元数据包括表的名称、表的列和分区及其属性、表的属性(是否为外部表等)、表的数据所在目录等。Hive通过解释器、编译器和优化器完成HQL查询语句从词法分析、语法分析、编译、优化到查询计划的生成。生成的查询计划存储在HDFS中,随后由MapReduce调用。大部分的查询、计算由MapReduce来完成。图2-2Hive架构3.Hive与传统关系型数据库的对比使用Hive的命令行接口很像操作关系型数据库,但是Hive和关系型数据库有很大的不同,具体如下。(1)Hive和关系型数据库存储文件的系统不同,Hive使用的是Hadoop的HDFS(Hadoop的分布式文件系统),关系型数据库使用的是服务器本地的文件系统。(2)Hive使用的计算模型是MapReduce,而关系型数据库使用的是自己设计的计算模型。(3)关系型数据库都是为实时查询的业务而设计的,而Hive是为海量数据进行数据挖掘而设计的,实时性很差。因此,Hive的应用场景和关系型数据库有很大的不同。(4)Hive架构的基础是Hadoop,因此很容易扩展自己的存储能力和计算能力,而关系型数据库在此方面要差很多。4.Hive的执行流程(1)(任意数据库驱动程序,如JDBC、ODBC等)中执行。(2)getPlan:Driver根据查询编译器解析Query语句,验证Query语句的语法、查询计划或者查询条件。(3)getMetaData:编译器将元数据请求发送给Metastore(任意数据库)。(4)sendMetaData:Metastore将元数据作为响应发送给编译器。(5)sendPlan:编译器检查要求并重新发送Driver的计划。此时,查询的解析和编译完成。(6)executePlan:Driver将执行计划发送到执行引擎,在该过程中的执行流程如下。(7)fetchResults:Hive界面从Driver中提取结果。(8)sendResults:执行引擎发送合成值到Driver。(9)fetchResult:Hive接口从执行引擎提取结果。Hive工具中默认使用的是Derby数据库,该数据库使用简单,操作灵活,但是存在一定的局限性,Hive支持使用第三方数据库(MySQL等),通过配置可以把MySQL集成到Hive工具中,MySQL功能更强大,企业应用也更广泛。1.MySQL的安装与配置(1)准备MySQL安装包,安装依赖软件在docker宿主机拷贝Mysql安装包到容器内。(2)安装MySQL。创建simple目录,并进入安装包所在目录,通过“ll”命令查看上一步拷贝到容器内的安装包。解压mysql安装包到“/simple”目录,解压后的目录重命名为mysql(重命名操作是为了后续操作方便)。(3)配置环境变量,执行命令“vim~/.bashrc”,在.bashrc文件最后增加配置如下。exportMYSQL_HOME=/simple/mysqlPATH=$PATH:$MYSQL_HOME/bin执行命令“source~/.bashrc”,使得环境变量立即生效。(4)用户及权限相关配置添加mysql组和mysql用户,执行命令“groupaddmysql”“useradd-r-gmysqlmysql”。进入mysql所在的目录,并更改其所属的组和用户。执行命令“chgrp-Rmysql.”和“chown-Rmysql.”。执行mysql_install_db脚本,对MySQL中的data目录进行初始化。注意,MySQL服务进程mysqld运行时会访问data目录,所以必须由启动mysqld进程的用户(即之前设置的mysql用户)执行此脚本,或者使用root用户执行此脚本。执行命令时应加上参数--user=mysql,启动过程中会生成密码,将密码复制并保存好,第一次登录时需要用到。最后一条信息中的“tZYvmX:zD1)j”是登录Mysql的初始密码。在mysql目录中,除了data目录外,将其余目录和文件均修改为root用户所有,mysql用户只需作为mysql/data目录中所有文件的所有者即可。(5)配置启动文件为了再次启动MySQL服务时,不需要切换到目录bin,并通过./mysqld_safe--user=mysql进行启动操作,对启动文件进行相应的配置操作,以便使服务可以通过执行“/etc/init.d/mysql.serverstart”命令进行启动。进入/etc/init.d目录,编辑mysql文件。修改mysql文件,在文件中修改2个目录的位置,设置“basedir=/simple/mysql”“datadir=/simple/mysql/data”。启动MySQL服务。执行命令“mysql-uroot-p”,登录MySQL,提示输入密码,将刚才复制的密码粘贴到冒号后面,按“Enter”键,进入MySQL命令行模式。进入命令行模式后,为了方便登录,需要修改密码,这里执行命令“setpasswordfor'root'@'localhost'=password('123456');”,将密码修改为“123456”(也可以根据需要自行设定)。(6)任务测试重新启动MySQL服务并进行登录(密码使用“123456”)。进入MYSQL命令行后创建数据库(提供给Hive使用)。如果登录时忘记了密码,则需要重新设定密码。在mysql服务停止状态下,可以执行命令“mysqld_safe--user=mysql--skip-grant-tables--skip-networking&”跳过密码验证,之后打开一个新的窗口,此时可以免密进入MySQL的命令行模式。免密登录mysql。在命令行中,使用“mysql”数据库,执行“UPDATEuserSETauthentication_string=PASSWORD('123456')whereUSER='root';”命令,重置密码,并执行命令“flushprivileges”刷新权限。2.基于HDFS和MySQL的Hive环境搭建(1)解压Hive进入存放安装包的目录,执行命令“tar–zxvfapache-hive-1.2.1-bin.tar.gz–C/simple/”,把Hive安装包解压到/simple目录中,执行完解压命令之后,在simple目录中可以查看到解压后的目录“apache-hive-1.2.1-bin”,修改目录名称为“hive1.2.1”。(2)配置Hive解压mysql-connector-java-5.1.40.tar.gz,进入解压目录,拷贝驱动文件“mysql-connector-java-5.1.40-bin.jar”到hive1.2.1目录的lib目录下。切换到目录/simple/hive1.2.1/conf,编辑配置文件hive-env.sh、hive-site.xml、hive-config.sh。编辑环境变量~/.bashrc。执行命令“source~/.bashrc”,使配置的环境变量立即生效。  随后,执行命令“start-all.sh”,启动Hadoop服务后,执行“./hive”命令。若正确进入HiveShell环境,则表示Hive安装配置成功。任务2.2Hive的应用1.创建表使用Hive创建表的语法格式如下。CREATE[TEMPORARY][EXTERNAL]TABLE[IFNOTEXISTS][db_name.]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][SKEWEDBY(col_name,col_name,...)]ON((col_value,col_value,...),(col_value,col_value,...),...)[STOREDASDIRECTORIES][[ROWFORMATrow_format][STOREDASfile_format]|STOREDBY''[WITHSERDEPROPERTIES(...)]][LOCATIONhdfs_path][TBLPROPERTIES(property_name=property_value,...)][ASselect_statement];2.修改表Hive中的修改表操作包括重命名表、添加列、更新列等。下面对Hive中的修改表操作进行说明。//重命名表操作ALTERTABLEtable_nameRENAMETOnew_table_name//将emp表重命名为emp_newALTERTABLEempRENAMETOemp_new;//添加/更新列操作ALTERTABLEtable_nameADD|REPLACECOLUMNS(col_namedata_type[COMMENTcol_comment],...)//创建测试表createtablestudent(idint,ageint,namestring)rowformatdelimitedfieldsterminatedby'\t';//添加一列addressaltertablestudentaddcolumns(addressstring);//更新所有的列altertablestudentreplacecolumns(idint,namestring);3.查看Hive数据库、表的相关信息下面对查看Hive数据库和表的相关信息的操作进行说明。//查看所有数据库showdatabases;//查看数据库中的表showtables;//查看表的所有分区信息showpartitionstable_name;//查看Hive支持的所有函数showfunctions;//查看表的信息descextendedt_name;//查看更加详细的表信息descformattedtable_name;4.使用LOAD将文本文件的数据加载到Hive表中LOAD语法的格式如下。LOADDATA[LOCAL]INPATH'filepath'[OVERWRITE]INTOTABLEtablename[PARTITION(partcol1=val1,partcol2=val2...)]LOAD操作只是单纯的复制/移动操作,将数据文件移动到Hive表对应的位置。filepath可以是相对路径,也可以是绝对路径。如果指定了LOCAL关键字,则LOAD命令会查找本地文件系统中的filepath;如果没有指定LOCAL关键字,则根据INPATH中的URI查找文件,此处需包含模式的完整URI。如果使用了OVERWRITE关键字,则目标表(或者分区)中的内容会被删除,并将filepath指向的文件/目录中的内容添加到表/分区中。如果目标表(分区)已经有一个文件,并且文件名和filepath中的文件名冲突,那么现有的文件会被新文件所覆盖。下面通过实例说明LOAD的相关操作。5.使用INSERT语句将查询结果插入到Hive表中INSERT语法的格式如下。INSERTOVERWRITETABLEtablename1[PARTITION(partcol1=val1,partcol2=val2...)]select_statement1FROMfrom_statement为测试操作创建原始数据表如下。DROPTABLEorder_4_partition;CREATETABLEorder_4_partition(orderNumberSTRING,event_timeSTRING)ROWFORMATDELIMITEDFIELDSTERMINATEDBY'\t';loaddatalocalinpath'/home/hadoop/data/order.txt'overwriteintotableorder_4_partition;insertoverwritetableorder_partitionpartition(event_month='2017-07')select*fromorder_4_partition;6.使用INSERT语句将Hive表中的数据导出到文件系统中使用INSERT语句将Hive表中的数据导出到文件系统中的语法格式如下。INSERTOVERWRITE[LOCAL]DIRECTORYdirectory1SELECT...FROM...7.基本的SELECT查询SELECT语法的格式如下。SELECT[ALL|DISTINCT]select_expr,select_expr,..FROMtable_reference[WHEREwhere_condition][GROUPBYcol_list[HAVINGcondition]][CLUSTERBYcol_list|[DISTRIBUTEBYcol_list][SORTBY|ORDERBYcol_list]][LIMITnumber]8.Hive函数字符串长度函数为length,语法格式为length(stringA)。字符串反转函数为reverse,语法格式为reverse(stringA)。字符串连接函数为concat,语法格式为concat(stringA,stringB…)。带分隔符字符串连接函数为concat_ws,语法格式为concat_ws(stringSEP,stringA,stringB…)。字符串截取函数为substr、substring,语法格式为substr(stringA,intstart)、substring(stringA,intstart)。返回指定字符个数的字符串截取函数为substr,语法格式为substr(stringA,intstart,intlen)。字字符串大写字母转换为小写字母的函数为lower,语法格式为lower(stringA)。删除字符串两侧空格的函数为trim,语法格式为trim(stringA)。删除字符串左侧空格的函数为ltrim,语法格式为ltrim(stringA)。删除字符串右侧空格的函数为rtrim,语法格式为rtrim(stringA)。正则表达式替换函数为regexp_replace,语法格式为regexp_replace(stringA,stringB,C),即将字符串A中的符合正则表达式B的部分替换为C。正则表达式解析函数为regexp_extract,语法格式为regexp_extract(stringsubject,stringpattern,intindex),即将字符串subject按照正则表达式pattern的规则拆分,返回指定的index字符。URL解析函数为parse_url,语法格式为parse_url(stringurlString,stringpartToExtract[,stringkeyToExtract]),该函数返回URL中指定的部分。partToExtract的有效值为HOST、PATH、QUERY、REF、PROTOCOL、AUTHORITY、FILE和USERINFO。JSON解析函数为get_json_object,语法格式为get_json_object(stringjson_string,stringpath),用于解析字符串json_string,返回path指定的内容;如果输入的JSON字符串无效,那么返回NULL。空格字符串函数为space,语法格式为space(intn)。重复字符串函数为repeat,语法格式为repeat(stringstr,intn)。首字符转换为ASCII的函数为ascii,语法格式为ascii(stringstr),用于返回字符串str第一个字符的ASCII。左补足函数为lpad,语法格式为lpad(stringstr,intlen,stringpad),用于将str用pad左补足到len位。右补足函数为rpad,语法格式为rpad(stringstr,intlen,stringpad),用于将str用pad右补足到len位。分割字符串函数为split,语法格式为split(stringstr,stringpat),用于按照pat字符串分割str,返回分割后的字符串数组。集返回str在strList中第一次出现的位置,strList是用逗号分割的字符串,如果没有找str字符,则返回0。9.分区表操作在Hive中,SELECT查询一般会扫描整张表的内容,该操作将会导致查询性能的下降,同时,大部分查询操作实际上只需要扫描表中部分数据,因此,为了解决这个问题,Hive在创建表时引入了partition概念。Hive中分区表指的是在创建表时指定的partition的分区空间。Hive可以将数据按照某列或者某些列进行分区管理,目前互联网应用每天都要存储大量的日志文件,其中存储日志必然会产生日志日期的属性,因此,在产生分区时,可以按照产生日志的日期列进行划分,把每天的日志当作一个分区。Hive将数据组织成分区,主要是为了提高数据的查询速度。而存储的每一条记录到底存储到哪个分区中是由用户决定的,即用户在加载数据的时候必须显式地指定该部分数据存储到哪个分区中。假设在Hive创建的表中存在id、content、d_date、d_time4列,其创建分区表的操作如下。在表定义时创建单分区表,按数据产生的日期属性进行分区。在表定义时创建双分区表,按数据产生的日期和时间属性进行分区。如果表已创建,则可以在此基础上添加分区,语法格式如下。ALTERTABLEtable_nameADDpartition_spec[LOCATION'location1']partition_spec[LOCATION'location2']...如果分区已经存在,则可以对分区进行删除操作,语法格式如下。ALTERTABLEtable_nameDROPpartition_spec,partition_spec,...将数据加载到分区表中的语法的格式如下。LOADDATA[LOCAL]INPA

温馨提示

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

评论

0/150

提交评论