`
coolsunchen
  • 浏览: 62048 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
文章分类
社区版块
存档分类
最新评论

hive使用心得

 
阅读更多
最近使用hive一个多月下来(终于完成第一期数据分析迁移工作了),当时使用的0.8的版本(现在最新版本是0.8.1),一个多月下来收获很多。从安装环境、

调试、开发、业务理解、技术攻关、业务实现等,一一都体验了一把!

总的来说,除了目前网上所介绍的常规hive使用和优化外。

因为目前hive只支持0.20的相关版本,所以我们的环境还是使用的0.20版本的hadoop来进行搭建。
使用hive和hadoop是一种综合能力的体现,之前我在使用的过程当中,还涉及到很多系统层面的问题。如果让hive和hadoop结合的更紧密,个人认为是从以下几个角度进行:
第一:hive的类SQL语句本身进行调优
第二:就是hive的参数调优
第三:hadoop里的hdfs的参数调优(存储格式、压缩格式、RPC调用、连接数控制)
第四:hadoop里的map/reduce的调优(datanode间的数据传输、处理大小、每个child的相关JVM设置等)
第五:就是hadoop环境里的网络传输的调优(硬件环境)
第六:就是hdfs的存储格式调优(文本格式、顺序格式等)
第七:操作系统层面的磁盘I/O调优(多路复用等)
第八:操作系统层面的网络调优(缓冲区大小、连接数放大等)
第九:操作系统层面的内存调优(虚拟内存设置、内存控制等)
第十:hadoop的容错机制的掌握,因为正常的运行到没什么,怕就是出现异常时,有相应的应对方案(调度器、队列等)
第十一:hadoop的管理(包括datanode失效、namenode失效、加入或删除datanode、负载均衡、集群等)

另外网上更多的是基于SUN的JVM来搭建hadoop环境,但我在使用的过程中是用jrockit的JVM来搭建hadooop环境,主要是考虑到目前在jrockit 6.0的版本上性能比较强劲(体现在网络传输、线程、GC回收等)。

另一方面是使用到了多种程序语言,如SQL(不过还是跟真正在数据库的SQL语法有区别的)、java、python(还好之前有用过python做过开发)、shell等。
现在先说说hive,毕竟在这次的开发过程中,hive使用比例很大。关于hive其中有些参数的使用和搭配,目前我还在测试过程当中(几个关键参数),以后再详细讲解。
hive个人觉得更适合做一些聚合场景的相关处理,其自定义函数UDAF更能体现这样的一个特点。
关于UDF这种自定义函数比较适合做一些字段上的转换处理,例如一个Text类型转换成一个array类型;另外就是可以实现更为丰富的解码方式,如在URL中有些参数使用了UTF-8编码或者GBK编码的方式。
还支持自定义的map/reduce方式(相关关键字)。

/*mapjoin*/这种标识(这里描述有误,mapjoin是提供了一种提高join的方式)。
支持多种存储格式,如:行格式、文件格式等,hdfs里也支持多种存储格式。
支持导入/导出数据,这里需要提醒下,使用hive命令的导出,会把一行数据进行合并,也就看不出字段;所以一般都采用 hive -e 'select * from t' >> 123.txt这样形式命令,才能使导出的字段由空格进行分割(后来验证过,这是我的一个使用失误,其实里面还是有\001的符号,只是显示的时候不显示而已,所以两种方式都适合)。
NULL和空值的区别,在hive的处理时需要注意(特别是与python这样的脚本结合使用,另外还有在python中的字段切割问题)。

现在总结下hive不擅长的地方
因为我这次的开发任务是将有些用SAS计算的任务迁移到hadoop上面进行数据分析,因为SAS上有很多强劲的功能,在做数据分析时很有帮助;但在hive上面就没有这样的功能了。举例如下:
SAS上有类似与游标的概念的东东,可以操作记录行,并对记录里一某个字段进行移动(如将某个字段移到前一条记录上面)
SAS有排重功能(也就是根据几个字段,去掉重复数据)
SAS可以轻松进行分组后,前取每个分组里的前10条记录(备注:这里后来我了解可以通过UDAF处理,SQL语句本身是不支持的)
SAS不好的地方就是进行解码转换(如经过UTF-8或者GBK编码的方式,这里主要指的是URL里,就比较麻烦)
常见场景等,另外还有几种情况描述起来较为复杂,这里略之。

关于之前描述的前三种情况,如果只是简单的用HIVE本身的SQL语句方式那是很难实现的,三种情况的共同点就是如何操作一行记录。
hadoop里有一种方式叫streaming,就是一行一行的读取,然后通过脚本的方式进行处理,在这里刚好hive是支持脚本的,所以可以用脚本来实现操作一行记录(我这里使用的是python脚本)
关于排重功能,在SAS实现的原理基本就是按照几个关键字进行排序,然后进行排重处理(因为排序之后,重复的数据肯定是在一起的,这样做排重处理就比较方便了)。
所以在hive这边,首先也是进行按几个关键字排序,然后采用脚本方式进行去掉重复数据。
虽然脚本的运行时间比纯java要慢,但是因为脚本满足了业务需求,所以运行慢的缺陷我们是可以忽略的,毕竟hive后期调优中,也有关键字的支持map、reduce。
关于如何用脚本进行取每个分组的前10条记录(给一个简单的业务场景,取每个地区(按上海、北京、深圳、广州等)的销售量前十名的业务员),由读者自己可以思考下。
第四个场景,关于URL参数解码问题,很简单,就自定义一个UDF,然后通过java的方式来进行解决。这里有个比较麻烦的地方就是如何区分出这个URL是用UTF-8编码还是GBK编码。

另补充两点:

就是一个hiveSQL脚本,最好别太多SQL,不然会导致一些异常情况出现。最好进行拆分。如下:

1.sql

1_1.sql

1_2.sql

形式,这样方便在shell里进行控制。
第二个就是多看源码(hadoop源码、hive源码),发现有些参数配置,都在程序里,但文档中并没有体现。

这些就是大致使用下来的感觉,后续还有新的体验,再增加吧!
如有不懂的地方,可以提问。

这里是再次补充下这个项目有关hive的使用问题:

首先是去重问题,后来经过反复测试发现,map个数不能是多个,不然前一个split的最后一条记录,与后一个split的第一条记录,无法进行匹配去重。

所以当碰到这样的问题时,MR的优势将无法体现出来,目前采用的是最简单的方法就是map个数和redce个数都设置成1

但是不知道MR其中有一种chain方式是否可行。

综上所述,当碰到这种上下记录有关联的时候,如何利用MR这种模式,还是要好好琢磨和不断的测试的。
分享到:
评论

相关推荐

    Hive总结.docx

    Hive原理/Hive SQL/Hive 函数/数据仓库分层和建模/Hive sql优化/数据倾斜

    hive优化总结

    hive ,优化总结,本文涉及HIVE的参数设置,H—SQL关系的写法中需要注意的地方。

    hive实验报告.docx

    完成Hive工具的安装和配置 Hive工具能够正常启动运行 Hive控制台命令能够正常使用 够正常操作数据库,表,数据

    达观数据文辉:Hadoop和Hive使用经验

    近十年来,随着Hadoop生态系统的不断完善,Hadoop早已成为大数据事实上的行业标准之一。面对当今互联网产生的巨大的TB...本文将从Hive的原理、架构及优化等方面来分享Hive的一些心得和使用经验,希望对大家有所收货。

    hadoop,hive安装总结

    hive、hadoop安装详细过程;适用于初学者。

    Hadoop-0.20.0-HDFS+MapReduce+Hive+HBase十分钟快速入门

    Hadoop-0.20.0-HDFS+MapReduce+Hive+HBase十分钟快速入门

    hive开窗函数知识点总结.txt

    工作中用到了几个hive开窗函数,便想把hive开窗函数系统梳理一遍。 开窗函数 普通的聚合函数聚合的行集是组,开窗函数聚合的行集是窗口。因此,普通的聚合函数每组(Group by)只返回一个值,而开窗函数则可为窗口中的每...

    Hive学习总结及应用.pdf

    Hive学习总结及应用.pdf

    Hadoop-Zeppelin使用心得

    它就能满足上述要求,在使用了一段时间之后,这里给大家分享以下使用心得。首先,我们来了解一下这款工具的背景及用途。Zeppelin目前已托管于Apache基金会,但并未列为顶级项目,可以在其公布的官网访问。它提供了一...

    快速学习-DML数据操作

    hive> load data [local] inpath '/opt/module/datas/student.txt' [overwrite] | into table student [partition (partcol1=val1,…)]; (1)load data:表示加载数据 (2)local:表示从本地加载数据到 hive 表;...

    基于Hadoop网站流量日志数据分析系统.zip

    1、典型的离线流数据分析系统 2、技术分析 - Hadoop - nginx - flume - hive - mysql - springboot + mybatisplus+vcharts nginx + lua 日志文件埋点的 基于Hadoop网站流量日志数据分析系统 1、典型的离线流数据...

    R的极客理想:工具篇,完整扫描版

    书中结合作者的使用心得及案例分析,介绍了30多个R语言包,一定会解决R语言使用者的诸多困扰。, 本书是R语言入门后的进阶读物,为用户灵活使用R语言提供思路上的扩展,给出进阶的学习路线。书中内容来自作者在R语言...

    CM_CDH大数据集群搭建总结.zip

    集群运维搭建,搭建hdfs,hadoop,hbase,spark,oozie,sqoop,MR,zookeeper,hive

    搜狗搜索日志分析报告.docx

    本文利用搜狗搜索日志的500w条数据,对搜索日志进行了一系列的分析。主要分为两个阶段,第一阶段是数据准备、数据预处理和数据加载阶段,第二阶段为分析阶段。利用Hive等工具,完成30页的分析报告。

Global site tag (gtag.js) - Google Analytics