- 浏览: 358592 次
- 性别:
- 来自: 上海
最新评论
-
希恩杰:
采样器的目的是啥?使数据均匀分布到所有分区?使key的数量均匀 ...
Hadoop深入学习:Hadoop全排序中的Sampler采样器 -
lawlietwf:
三篇文章中有两篇链接地址一样,po主看下
Hadoop中的快速排序算法 -
坏小四:
...
《Hbase权威指南》深入学习hbase:表,列族,列标识,版本和cell -
fbwfbi:
发现使用pika-0.9.13的版本依然出错:Tracebac ...
RabbitMQ:使用python发布/订阅消息 -
hehu158:
centos6.5 chmod +x qq2012.tra.g ...
CentOS 6.4安装qq2012
文章列表
相对于最小优先队列,最大优先队列的代码如下:
package org.test;
/*************************************************************************
* Compilation: javac IndexMaxPQ.java
* Execution: java IndexMaxPQ
*
* Maximum-oriented indexed PQ implementation using a binary heap.
*
***************** ...
在很多应用中,会允许引用优先队列中的数据,我们可以把这种数据结构看作是能够快速访问其最小元素的数组。
package org.test;
/*************************************************************************
* Compilation: javac IndexMinPQ.java
* Execution: java IndexMinPQ
*
* Minimum-oriented indexed PQ implementation using a binary h ...
HiveQL是一种声明式语言,最终会被编译为MapReduce job提交到Hadoop执行。大多情况下,用户并不需要知道Hive是如何运作——只关注手头的业务处理问题就行了。虽然Hive引擎会在在HiveQL语句编译过程中最许多的复杂的工作 ...
对那些使用传统数据库的用户来说,Hive看上去和使用上都很向传统的关系型数据库:有相似的命名法,和传统SQL特别是MySQL方言很相似的HiveQL方言,然而Hive在实现上和使用上都和之前的传统数据库有很大的不同。通常情况下,用户尝试使用关系数据库世界的范式,实际上是Hive反模式。
本节我们重点介绍一些用户可能已使用过的模式和尽量要避免的反模式。
Table-by-Day
Table-by-Day是一个被定义为“表名 + 日期”的Hive表的模式,比如supply_2013-05-19、supply_2013-05-20等。T ...
为了满足用户的个性化需求,Hive被设计成了一个很开放的系统,很多内容都可以定制,主要包括:
1)、文件格式;
2)、内存中的数据格式,如Hadoop的Writable/Text;
3)、用户提供的MapReduce脚本,不管使用何种语言都可以通过标准的stdin/stdout传输数据;
4)、用户自定义函数。
本节我们主要学习用户自定义函数。虽然Hive已经提供了很多内存的函数,但是还是不能,满足用户的需求,因此有提供了自定义函数供用户 ...
在当前的基于Hadoop系统的数据仓库中,数据存储格式是影响数据仓库性能的一个重要因素。Facebook于是提出了集行存储和列存储的优点于一身的RCFile文件存储格式,据说当前在Facebook公司内部,其数据仓库的文件存储格 ...
Hive使用的是Hadoop的文件系统和文件格式,比如TEXTFILE,SEQUENCEFILE等。
在Hive中对中间数据或最终数据数据做压缩,是提高数据吞吐量和性能的一种手段。对数据做压缩,可以大量减少磁盘的存储空间,比 ...
Hive提供有限的索引功能,这不像传统的关系型数据库那样有“键(key)”的概念,用户可以在某些列上创建索引来加速某些操作,给一个表创建的索引数据被保存在另外的表中。
Hive的索引功能现在还相对较晚,提供的选项还较少。但是,索引被设计为可使用内置的可插拔的java代码来定制,用户可以扩展这个功能来满足自己的需求。
当然不是说有的查询都会受惠于Hive索引。用户可以使用EXPLAIN语法来分析HiveQL语句是否可以使用索引来提升用户查询的性能。像RDBMS中的索引一样,需要评估索引创建的是否合理,毕竟,索引需要更多的磁盘空间,并且创建维护索引也会 ...
DISTRIBUTE BY
我们都知道,MapReduce模型是默认是通过hashPartitioner()函数将key/value的keys的hash值来数据分发到对应的Reducers,DISTRIBUTE BY可以让用户来控制如何将key/value对分发到哪个Reducer。
这在大多数 ...
浮点比较陷阱
在WHERE查询条件中:在比较不同类型的数值(如FLOAT vs DOUBLE)时,会引发浮点比较陷阱。
看下面的HiveQL语句,本来只想要查询Federal Taxes > 0.2,但是返回结果如下:
hive> SELECT name,salary,deductions['Federal Taxes']
> FROM employees WHERE deductions['Federal Taxes'] > 0.2;
...
前几章已经学习过Hive表的定义和数据操纵,本章我们开始学习HiveQL查询。
SELECT ... FROM ...查询
SELECT在SQL中是一个投影操作。让我们从新来看之前定义过的分区表employees:
CREATE TABLE employees (
name STRING,
salary FLOAT,
subordinates ARRAY<STRING> COMMENT '下属' ...
本节继续讨论HiveQL,Hive查询语言,如何向Hive表中添加数据,操纵数据和从表中将数据提取到文件系统。
之前已经学习过Hive表的创建,本节主要关注向表中填充数据,使表中有数据可供查询。
...
在现实的生活工作中,有许多情况下都要处理有序的元素,但又不要求全部有序,再或者不要求一次就将它们全部排序,这种情况下一种叫“优先队列”的算法就派上了用场。比如说,不要求全排序一个大数据集合的 ...
在之前的《快速排序及改进》中,已经对快速排序做了改进;但是在实际的工作环境中,经常会遇到含有大量重复元素的数组,也经常会对这样的数组排序,对这样的数组排序,快速排序性能还可以,但是可以有更大的性能改进,将快速排序的的时间复杂度有对数级提高到线性级别。
三向切分的快速排序是对快速排序算法改进,特别适用于有大量重复元素的数组的排序,其时间复杂度介于N - NlogN之间,最好的时间复杂度接近于O(N),在没有重复元素的情况下有最坏的时间复杂度,空间复杂度为lgN。
三向切分的快速排序算法在包括重复元素很多的情况下,要比归并排序和其他排序方法有更好的性能 ...
找出一个组元素中的中位数(中间值,它不大于一半的元素也不小于另一半的元素),是一个和排序有关但又不需要完全排序的重要应用。查找中位数在统计和许多数据处理中很常见。
可以把查找中位数看成是一种特殊的选择:在数组中查找第k个小或大的元素。我们可以回想前面《快速排序及改进》中的partition(Comparable[] a,int lo,int hi)方法,它会将数组的a[lo]到a[hi]重新排列(局部排序)并返回一个整数j,使得:
a[lo ... j - 1] <= a[j] <= a[j + 1 ... hi]
...