代码改变世界

随笔分类 -  hive

Hive Explain(翻译自Hive wiki)

2013-07-19 10:27 by java20130722, 338 阅读, 收藏,
摘要: EXPLAIN语法Hive提供EXPLAIN命令,显示查询的执行计划。语法如下:EXPLAIN [EXTENDED] queryEXPLAIN语句使用EXTENDED,提供执行计划关于操作的额外的信息。这是典型的物理信息,如文件名。Hive查询被转换成序列(这是一个有向无环图)阶段。这些阶段可能是mapper/reducer阶段,或者做metastore或文件系统的操作,如移动和重命名的阶段。 EXPLAIN的输出包括三个部分:查询的抽象语法树执行计划计划的不同阶段之间的依赖关系每个场景的描述场景的描述,显示了与元数据相关操作的操作序列。元数据会包括FilterOperator的过滤器表达式, 阅读全文

hive array、map、struct使用

2013-07-17 17:33 by java20130722, 760 阅读, 收藏,
摘要: hive提供了复合数据类型:Structs: structs内部的数据可以通过DOT(.)来存取,例如,表中一列c的类型为STRUCT{a INT; b INT},我们可以通过c.a来访问域aMaps(K-V对):访问指定域可以通过["指定域名称"]进行,例如,一个Map M包含了一个group-》gid的kv对,gid的值可以通过M['group']来获取Arrays:array中的数据为相同类型,例如,假如array A中元素['a','b','c'],则A[1]的值为'b'Struct使用 阅读全文

HIVE RCFile高效存储结构

2013-07-12 15:23 by java20130722, 261 阅读, 收藏,
摘要: 本文介绍了Facebook公司数据分析系统中的RCFile存储结构,该结构集行存储和列存储的优点于一身,在 MapReduce环境下的大规模数据分析中扮演重要角色。Facebook曾在2010 ICDE(IEEE International Conference on Data Engineering)会议上介绍了数据仓库Hive。Hive存储海量数据在Hadoop系统中,提供了一套类数据库的数据存储和处理机制。它采用类 SQL语言对数据进行自动化管理和处理,经过语句解析和转换,最终生成基于Hadoop的MapReduce任务,通过执行这些任务完成数据处理。图1显 示了Hive数据仓库的系统结 阅读全文

hive中的bucket table

2013-07-12 15:14 by java20130722, 328 阅读, 收藏,
摘要: 当数据量比较大,我们需要更快的完成任务,多个map和reduce进程是唯一的选择。但是如果输入文件是一个的话,map任务只能启动一个。此时bucket table是个很好的选择,通过指定CLUSTERED的字段,将文件通过hash打散成多个小文件。create table sunwg_test11(id int,name string)CLUSTERED BY(id) SORTED BY(name) INTO 32 BUCKETSROW FORMAT DELIMITEDFIELDS TERMINATED BY ‘/t’;执行insert前不要忘记设置set hive.enforce.bucke 阅读全文

hive bucket

2013-07-12 15:13 by java20130722, 586 阅读, 收藏,
摘要: BucketBuckets对指定列计算hash,根据hash值切分数据,目的是为了并行,每一个Bucket对应一个文件。将user列分散至32个bucket,首先对user列的值计算hash,对应hash值为0的HDFS目录为:/wh/pvs/ds=20090801/ctry=US/part-00000;hash值为20的HDFS目录为:/wh/pvs/ds=20090801/ctry=US/part-00020。hive中table可以拆分成partition,table和partition可以通过‘CLUSTERED BY’进一步分bucket,bucket中的数据可以通过‘SORT BY 阅读全文

hive中的静态分区与动态分区

2013-07-12 12:42 by java20130722, 388 阅读, 收藏,
摘要: hive中创建分区表没有什么复杂的分区类型(范围分区、列表分区、hash分区、混合分区等)。分区列也不是表中的一个实际的字段,而是一个或者多个伪列。意思是说在表的数据文件中实际上并不保存分区列的信息与数据。下面的语句创建了一个简单的分区表:create table partition_test(member_id string,name string)partitioned by (stat_date string,province string)ROW FORMAT DELIMITED FIELDS TERMINATED BY ',';这个例子中创建了stat_date和pr 阅读全文

hive中select 走与不走mapreduce

2013-07-11 14:43 by java20130722, 641 阅读, 收藏,
摘要: hive 0.10.0为了执行效率考虑,简单的查询,就是只是select,不带count,sum,group by这样的,都不走map/reduce,直接读取hdfs文件进行filter过滤。这样做的好处就是不新开mr任务,执行效率要提高不少,但是不好的地方就是用户界面不友好,有时候数据量大还是要等很长时间,但是又没有任何返回。改这个很简单,在hive-site.xml里面有个配置参数叫hive.fetch.task.conversion将这个参数设置为more,简单查询就不走map/reduce了,设置为minimal,就任何简单select都会走map/reduce 阅读全文

Hive内部自定义函数UDF

2013-07-11 14:30 by java20130722, 490 阅读, 收藏,
摘要: HIVE UDF整理(一)关系运算等值比较: =语法:A = B 操作类型: 所有基本类型描述: 如果表达式A与表达式B相等,则为TRUE;否则为FALSE举例:hive> select 1 from dual where 1=1;1不等值比较: 语法: A B 操作类型: 所有基本类型描述: 如果表达式A为NULL,或者表达式B为NULL,返回NULL;如果表达式A与表达式B不相等,则为TRUE;否则为FALSE举例:hive> select 1 from dual where 1 2;1小于比较: select 1 from dual where 1 select 1 from 阅读全文

Hive输出文件的间隔符

2013-07-10 17:35 by java20130722, 703 阅读, 收藏,
摘要: 1.insert 语法格式为:基本的插入语法:INSERT OVERWRITE TABLE tablename [PARTITON(partcol1=val1,partclo2=val2)]select_statement FROM from_statementinsert overwrite table test_insert select * from test_table;对多个表进行插入操作:FROM fromstatteINSERT OVERWRITE TABLE tablename1 [PARTITON(partcol1=val1,partclo2=val2)]select_sta 阅读全文

Hive SQL使用和数据加载的一点总结

2013-07-10 10:40 by java20130722, 284 阅读, 收藏,
摘要: Hive 是facebook开源的一个基于hadoop框架的查询工具,也就是说,需要用hive的话,就要先安装hadoop。这次是小结一下最近用hive的心得,经验分享。hadoop和hive,pig,hbase的安装配置以后专门另开个连载说比较好。所以,我假设你已经有hive了。1.字段的数据类型。hive实际上为了数据挖掘的需要,对hive表的字段设置了数据类型,对于经常where的,还可以设置index。数据类型分以下几种STRING 不定长字符串TINYINT 3位长整型数SMALLINT 5位长整型INT 10位整型BIGINT 19位整型FLOAT 浮点数DOUBLE 双精度BOO 阅读全文

hive中UDF、UDAF和UDTF使用

2013-06-28 15:46 by java20130722, 1192 阅读, 收藏,
摘要: Hive进行UDF开发十分简单,此处所说UDF为Temporary的function,所以需要hive版本在0.4.0以上才可以。一、背景:Hive是基于Hadoop中的MapReduce,提供HQL查询的数据仓库。Hive是一个很开放的系统,很多内容都支持用户定制,包括:a)文件格式:Text File,Sequence Fileb)内存中的数据格式: Java Integer/String, Hadoop IntWritable/Textc)用户提供的 map/reduce 脚本:不管什么语言,利用 stdin/stdout 传输数据d)用户自定义函数: Substr, Trim, 1 – 阅读全文

hive处理日志,自定义inputformat

2013-06-26 17:16 by java20130722, 943 阅读, 收藏,
摘要: 开放环境,hadoop-0.20.2,hive-0.6 1.日志分隔符 Xml代码 2010-05-3110:50:17|||61.132.4.82|||http://www.360buy.com/product/201185.html2010-05-31 10:50:17|||61.132.4.82|||http://www.360buy.com/product/201185.html分隔符是“ ||| ”,这是为了尽可能防止日志正文出现与分隔符相同的字符而导致数据混淆。 hive 的内部分隔符是“ \001 ”,所以我们需要做一下转换 2.编写自定义InputFormat Java代码 p 阅读全文

hive cli命令行选项

2013-06-05 23:45 by java20130722, 499 阅读, 收藏,
摘要: Hive Command line OptionsUsage: Usage: hive [-hiveconf x=y]* []* [|] [-S] -i Initialization Sql from file (executed automatically and silently before any other commands) -e 'quoted query string' Sql from command line -f Sql from file -S Sil... 阅读全文

hive -e "show tables"提示cannot recognize input near 'show' '<EOF>' '<EOF>' in ddl statement

2013-06-05 23:44 by java20130722, 3252 阅读, 收藏,
摘要: 一、前言 项目需要,需要知道hive的支持的最大并发用户数目是否满足需求,因此,写了个小程序测试 ,方式是java调用命令行程序的方式进行。即:[java]view plaincopyProcessexecutor=Runtime.getRuntime().exec(command,env);但是这样做面临一个问题,就是在命令行输入hive -e "show tables"一切正常,如下所示。[plain]view plaincopy[niy@niy-computer/]$hive-e"showtables"Logginginitializedusing 阅读全文

HIVE 查询显示列名 及 行转列显示

2013-06-05 23:44 by java20130722, 748 阅读, 收藏,
摘要: hive默认查询不会显示列名, 当一个表字段比较多的时候,往往看不出值与列之间的对应关系,对日常查错及定位问题带来不便,应同事要求,看了HIVE CLI源码,做了下些许调整, 加入列头打印及行转列显示功能未开启行转列功能之前:hive>>> select * from example_table where dt='2012-03-31-02' limit 2;OK1333133185 0cf49387a23d9cec25da3d76d6988546 3CD5E9A1721861AE6688260ED26206C2 guanwang 1.1 3d3b0a5ec 阅读全文

hive的元数据存储在mysql后,报错的解决方法

2013-05-22 23:10 by java20130722, 301 阅读, 收藏,
摘要: hive的元数据存储在mysql后,报错的解决方法! 最近,因为工作的需要,一直在研究hadoop系统。许多分析工作都将通过hive来解决,所以特将所碰到的问题和解决方案,陆续整理出来,既做为回顾又供需要的朋友参考! 因为要实现多人开发Hive,所以需要将hive的元数据存储在mysql。配置完成后,配置之前hive中创建的数据表在show tables时都不会出现,但hdfs数据文件都还在。 当在hive中drop table 时如果报以下错时 FAILED: Error in metadata: javax.jdo.JDODataStoreException: Error(s) were 阅读全文

hive开发环境搭建体验

2013-05-22 14:26 by java20130722, 623 阅读, 收藏,
摘要: 最近为了规范hadoop团队的开发流程,所以已经在Eclipse里进行相关的hive开发工作。但是目前在运行hive的时候,有几个问题需要注意下:第一个问题:直接运行CliDriver类报错,信息如下:WARNING: org.apache.hadoop.metrics.jvm.EventCounter is deprecated. Please use org.apache.hadoop.log.metrics.EventCounter in all the log4j.properties files.Exception in thread "main" java.la 阅读全文

关于HIVE的SELECT count(*) 优化

2013-05-17 16:00 by java20130722, 1600 阅读, 收藏,
摘要: 刚刚下载了一份HIVE的最新源码。印象最深的是HIVE将表的大小作为了元数据保存在了关系数据库中。譬如在老版本中执行如下的语句:from base insert overwrite table user select * ;你会发现日志的末尾会有 “999 ROWD LOADED INTO TABLE USER” 的字样代表有999条目记录保存在了user表中。在而在新版本中,执行最后的日志展示了USER表的元数据,其中会有ROW_COUNT:999的字样一看MYSQL中,999这个数据确实被保存了起来。也就是说大家以后不必再用“select count(*) from user ”去查询us 阅读全文

GettingStarted EclipseSetup (官网资料:hive+eclipse设置)

2013-05-16 13:00 by java20130722, 200 阅读, 收藏,
摘要: After checking out the source code run the following command from the top-level directory: $ ant clean package eclipse-files Now open up Eclipse and do the following:File->Import->General->Existing Projects Into Workspace->Select root directory (point to )Make sure that Eclipse Java Comp 阅读全文

hive使用小技巧-如何往Hive SQL中传入参数

2013-05-02 14:10 by java20130722, 1145 阅读, 收藏,
摘要: 很多SQL需要重复执行,可能是每天执行一次,而需要修改的只是SQL中的日期字段,这种情况下可以使用 参数代入使用的方式$hive-d key1=value1 -d key2=value -d key3=value3 ...复制代码例子-1:hive -d shell_date_1='20120425' -d shell_date_2='20120426'hive> set shell_date_1;shell_date_1=20120425hive> set shell_date_2;shell_date_2=20120426hive> exp 阅读全文