细细品味Hadoop_Hadoop集群(第14期)_Hive应用开发

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

细细品味Hadoop——Hadoop集群(第14期)精华集锦csAxp虾皮工作室年7月3日创建时间:2012/3/24修改时间:2012/3/26修改次数:0Hadoop集群(第14期)——Hive应用开发1、Hive的服务Hive不仅仅是一个shell,通过配置,它可以提供诸如Thrift服务器、Web接口、元数据和JDBC/ODBC服务,具有强大的功能和良好的可扩展性。1.1HiveShellHiveShell是默认的服务,提供命令行接口,可以在此命令行上直接编写HiveQL语句执行,每条语句以分号结束,也可以在HiveShell上执行Hive自带的管理命令,例如导入jar包,加入临时环境变量等操作。1)执行Hive语句执行查询语句hiveselectnamefromxp;从上面的得知,在执行“select*fromxp;”时,可以看到启动了一个MapReducejob,建好表导入数据后,就可以浏览与Hive相关的目录。执行HDFS文件操作在Hive的shell上使用dfs命令可以查看HDFS上的文件。HDFS上的“/user/hive/warehouse”目录是Hive的数据仓库目录,每个表对应一个以表明命名的目录,目录下存放导入的文件、分区目录、桶目录等数据文件。Hive的查询日志默认保存在本地文件系统的“/tmp/user.name”目录下,Hive的MapReduce执行计划保河北工业大学——软件工程与理论实验室编辑:虾皮1创建时间:2012/3/24修改时间:2012/3/26修改次数:0存在本地的“/tmp/user.name/hive”中。这三个目录可以分别通过属性:hive.metastore.metadb.dir:(HDFS上的)数据目录hive.querylog.location:查询日志存放目录hive.exec.scratcher:(HDFS上的)临时文件目录2)设置和查看临时变量备注:设置只在当前会话有效,方便切换Hive的执行环境。hivesetfs.default.name=hdfs://192.168.1.2:9000hivesetfs.default.name;fs.default.name3)导入jar包(jar包存在)hiveaddjarhivejar.jarAddedhivejar.jartoclasspathAddedresource:hivejar.jar4)创建函数(类存在)hivecreatetemporaryfunctionudfTestas‘com.cstore.udfExample’;当然也可以在本地系统的命令行运行Hive的shell。$hive–e‘select*fromxp’(执行HiveQL语句)$hive–config/hive-0.8.1/conf(重新载入新的配置文件)$hive–servicehiveserver(启动服务)1.2JDBC/ODBC支持Hive提供了对JDBC和ODBC的支持,这一特性使基于JDBC/ODBC的应用能力以很小的代价平滑过渡到Hive平台。河北工业大学——软件工程与理论实验室编辑:虾皮2创建时间:2012/3/24修改时间:2012/3/26修改次数:01)JDBC在Hive的jar包中,“org.apache.hadoop.hive.jdbc.HiveDriver”负责提供JDBC接口,客户端程序有了这个包,就可以把Hive当成一个数据库来使用,大部分的操作与对传统数据库的操作相同,Hive允许支持JDBC协议的应用程序连接到Hive。当Hive在指定端口启动hiveserver服务后,客户端通过Java的Thrift和Hive服务器进行通信,连接过程如下:开启hiveserver服务$hive–servicehiveserver50000(50000)建立与Hive的连接Class.forName(“org.apache.hadoop.hive.jdbc.HiveDriver”);Connectioncon=DriverManager.getConnection(“jdbc:hive://ip:50000/default,”hive”,”hadoop”)默认只能连接到default,通过上面的两行代码建立连接后,其他的操作与传统数据库无太大差别。Hive的JDBC驱动目前还不太成熟,并不支持所有的JDBCAPI。1.3Thrift服务Hive的Thrift是一种跨语言服务的可伸缩软件框架。它结合了功能强大的软件堆栈的代码生成引擎,可以无缝地与C++、C#、Java、Python、PHP和Ruby结合。Thrift允许用户简单地定义文件中的数据类型和服务接口,编译器生成代码来实现RPC客户端和服务器之间的通信。Hive内部集成了Thrift服务,支持在多种编程语言中运行Hive命令,使客户端可以跨平台连接Hive。1.4Web接口HiveWebInterface,简称hwi,是Hive提供的Web接口。通过这个Web接口,可以方便地执行与Hiveshell的命令具有功能相同的操作。下面看看网络接口具有的特征:分离查询的执行在CLI下,如果我们要执行多个查询就要打开多个终端,而通过网络接口,可以同时执行多个查询,网络接口可以在网络服务器上管理会话(session)。不用本地安装Hive一个用户不需要本地安装Hive就可以通过网络浏览器访问Hive进行操作。一个用户如果想通过Web跟Hadoop和Hive交互,那么需要访问多个端口。而一个远程或VPN用户则只需要访问Hive网络接口所使用的“0.0.0.0tcp/9999”。使用Hive的网络接口需要修改配置文件。配置文件所在的位置为“usr/hive/conf/”目录下面,可以参考下面代码进行,添加到用户定义的配置文件“hive-site.xml”中。河北工业大学——软件工程与理论实验室编辑:虾皮3创建时间:2012/3/24修改时间:2012/3/26修改次数:0propertynamehive.hwi.war.file/namevaluelib/hive-hwi-0.8.1.war/valuedescriptionThissetsthepathtotheHWIwarfile,relativeto${HIVE_HOME}./description/propertypropertynamehive.hwi.listen.host/namevalue0.0.0.0/valuedescriptionThisisthehostaddresstheHiveWebInterfacewilllistenon/description/propertypropertynamehive.hwi.listen.port/namevalue9999/valuedescriptionThisistheporttheHiveWebInterfacewilllistenon/description/property开启Hive的Web服务:hive--servicehwi河北工业大学——软件工程与理论实验室编辑:虾皮4创建时间:2012/3/24修改时间:2012/3/26修改次数:0完成上述工作之后,在浏览器键入地址,即可进入Hive的Web页面,如图1.4-1所示。图1.4-1Hive的Web界面点击“CreateSession”创建会话,在如图1.4-2所示的界面中可以执行查询操作。图1.4-2查询页面可以看到Hive的网络接口拉近了用户和系统的距离,我们可以通过网络接口之间创建会话并进行查询。用户界面和功能展示非常直观,适合于刚接触到Hive的用户。2、HiveQL详解HiveQL是一种类似SQL的语言,它与大部分的SQL语法兼容,但是并不完全支持SQL标准,如HiveQL不支持更新操作,也不支持索引和事务,它的子查询和join操作也很局限,这是因其底层依赖于Hadoop云平台这一特性决定的,但其有些特点是SQL所无法企及的。例如多表查询、支持createtableasselect和集成MapReduce脚本等,本节主要介绍Hive的数据类型和常用的HiveQL操作。河北工业大学——软件工程与理论实验室编辑:虾皮5创建时间:2012/3/24修改时间:2012/3/26修改次数:02.1HiveQL的数据类型Hive支持基本数据类型和复杂类型,基本数据类型主要有数值类型、布尔型和字符串,复杂类型有三种:ARRAY、MAP和STRUCT,如表2.1-1所示。表2.1-1数据类型基本类型大小描述TINYINT1字节有符号整数SMALLINT2字节有符号整数INT4字节有符号整数BIGINT8字节有符号整数FLOAT4字节单精度浮点数DOUBLE8字节双精度浮点数BOOLEAN~去true/falseSTRING昀大2GB字符串,类似于sql中的varchar类型复杂类型大小描述ARRAY不限一组有序字段,字段类型必须相同MAP不限无序键值对,键值内部字段类型必须相同STRUCT不限一组字段,字段类型可以不同基本类型可以隐式向上转换,特别需要主要是的STRING类型可以转换为BOUBLE。2.2HIveQL的常用操作常用的HiveQL操作有如下几种。1)创建表首先建立三张供测试用的表:userinfo表中有两列,以tab键分割,分别存储用户的id和名字name;choice表中有两列,以tab键分割,分别存储用户的userid和选课名称classname;classinfo表中有两列,以tab键分割,分别存储课程老师teacher和课程名classname。createtableuserinfo(idint,namestring)rowformatdelimitedfieldsterminatedby‘\t’;河北工业大学——软件工程与理论实验室编辑:虾皮6创建时间:2012/3/24修改时间:2012/3/26修改次数:0createtablechoice(useridint,classnamestring)rowformatdelimitedfieldsterminatedby‘\t’;createtableclassinfo(teacherstring,classnamestring)rowformatdelimitedfieldsterminatedby‘\t’;显示刚才创建的数据表:“rowformatdelimitedfieldsterminatedby”是HiveQL特有的,用来指定数据的分割方式,如果不人为指定,则默认的格式如下。rowformatdelimitedfieldsterminatedby‘\001’collectionitemsterminatedby‘\002’mapkeysterminatedby‘\003’linesterminatedby‘\n’storedastextfile.上述“collectionitemsterminatedby‘\002’”用来指定集合类型中数据的分割方式,针对ARRY、STRUCT和MAP的key/value之间的分割;“mapkeysterminatedby‘\003’”针对MAP的key内的分割方式;“linesterminatedby‘\n’”制定了行之间以回车分割;“storedastextfile”指定以文本存储。分割方式和存储方式可以显示指定。Hive中的表可以分为托管表和外部表,托管表的数据移动到数据仓库目录下,由Hive管理,外部表的数据在指定位置,不在Hive的数据仓库中,只是在Hive元数据库中注册。上面创建的表都是托管表,创建外部表采用“crea

1 / 32
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功