Hive-如何基于分区优化

最近一直做系统优化,但从建模的角度今天有个小优化,原理比较简单,效果可能不是很大,但很有意思。

这种优化的好处是不用改变sql代码,对用户是透明的。

所以分享下。

-

由于hive在文件基础上,而会全部扫一个分区里面的内容。

hive表的概念是基于hadoop的文件系统hdfs,表其实是分布式文件里面的一个文件目录。

再加上没有索引,如果要取的表里面的某些字段就必须全部扫描该表对应的文件目录

-

如:建表way1:

create table if not exists t_hm_0501_test_01

(

uid string,

nick string

)

PARTITIONED BY (pt STRING , bc_seller string )

row format delimited

fields terminated by ‘/t’

lines terminated by ‘/n’

stored as textfile;

-

在hadoop的hdfs中其实是这样的目录

t_hm_0501_test_01表对应hdfs里的如下文件目录。

/t_hm_0501_test_01

—-

一级分区

/t_hm_0501_test_01/pt=20110501000000

/t_hm_0501_test_01/pt=20110502000000

二级分区

/t_hm_0501_test_01/pt=20110501000000/bc_seller=0

/t_hm_0501_test_01/pt=20110501000000/bc_seller=1

最后那个分区目录后面放的是真正的数据文件

如果有语句 select ,.. from t_hm_0501_test_01  where pt’=20110501000000’ and bc_seller=0

Hadoop只读取/t_hm_0501_test_01/pt=20110501000000/bc_seller=0 下面的数据,不用处理bc_seller = 1 的数据。

如果这个表where条件中的值不是分区字段,则会全部扫里面的内容。

如果我们把部分常用字段枚举成分区字段,则会减少扫的内容(条数)。

!!

Way2:

如果这样建表:

create table if not exists t_hm_0501_test_01

(

uid string,

nick string

)

PARTITIONED BY (pt STRING )

row format delimited

fields terminated by ‘/t’

lines terminated by ‘/n’

stored as textfile;

-

一级分区

/t_hm_0501_test_01/pt=20110501000000

/t_hm_0501_test_01/pt=20110502000000

同样的sql 语句:

select ,.. from t_hm_0501_test_01  where pt’=20110501000000’ and bc_seller=0

-

其实是扫的是:

/t_hm_0501_test_01/pt=20110501000000 所有东西,包括下面bc_seller=1的数据,增加了脏数据。

浪费了一些map 及其他资源。

-

这其实是一个树形结构,如果做得好就是个tree算法,可以最少的读取文件。

而且这种优化的好处是不用改变sql代码,对用户是透明的。

那么如何设定partition 及如何确定其分区值

就成了关键。

  1. 还可以凭借一些业务经验去确定,更科学的是通过系统自动的解决该问题。

这里通过对hive sql 元数据解析,写一下算法进行分析,得到更好的提出更优的分区

具体如何选择需要,需要改字段满足一些特性。

  1. 比较容易枚举
  2. 字段指相对固定
  3. 频率最高的过滤字段

————

如下例子:

如果你在数据分析的过程中,

你的用户表操作的性别过滤很多,可以以性别作为分区。

———-

如果你经常分析成交数据

大量分析计算30天的交易成交,其次是60天的成交。

你也可以时段进行分区,这样可以节省你很多成本。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: apache-hive-1.1.0-bin.tar.gz是一个Apache Hive的二进制发布版本。Apache Hive是一个建立在Apache Hadoop之上的数据仓库基础架构,用于提供数据汇总、查询和分析的功能。 这个二进制发布版本是经过编译的,可以直接在已经安装了Hadoop环境的机器上使用。用户可以通过下载并解压这个tar.gz文件,获得Hive的可执行文件、配置文件和其他必要的库文件。 Apache Hive提供了一种类似于传统关系型数据库的查询语言,称为HiveQL,使得用户可以使用类似SQL的语法来查询和分析存储在Hadoop集群中的数据HiveQL编译器将用户的查询转换为MapReduce任务,并在Hadoop上执行这些任务。 除了查询语言之外,Hive还提供了数据的存储与管理机制,包括表的创建、数据的导入导出以及分区和桶的管理等功能。这使得用户可以更方便地将结构化数据映射到Hadoop的分布式文件系统中。 Apache Hive主要用于处理大规模的结构化数据,如日志文件、社交网络数据和传感器数据等。它适用于那些需要对海量数据进行汇总、分析和挖掘的应用场景。 通过使用Apache Hive,用户可以充分利用Hadoop的强大分布式计算能力和存储能力,以更高效的方式进行数据处理和分析。它使得普通的开发人员和分析师可以利用Hadoop集群进行复杂的数据操作,而不需要深入了解Hadoop的底层技术细节。 ### 回答2: Apache Hive是建立在Apache Hadoop之上的一个数据仓库基础设施,它提供了一种将结构化数据存储在Hadoop上并进行查询和分析的方式。 "apache-hive-1.1.0-bin.tar.gz"是Apache Hive 1.1.0版本的二进制发布压缩文件。这个文件包含了Hive的二进制可执行文件和相关的库,可以用于安装和运行Hive。 要使用这个文件,首先需要将其下载到本地计算机中。然后,可以使用合适的解压缩工具(如WinRAR或tar命令)对压缩文件进行解压缩。 解压缩后,会得到一个包含Hive二进制文件、配置文件和其他必要文件的目录。通过修改配置文件,可以对Hive进行自定义设置,例如指定Hadoop集群的位置和其他相关参数。 安装完成后,可以使用Hive提供的命令行界面或其他Hive客户端工具连接到Hadoop集群并执行SQL查询。Hive支持类似于传统关系型数据库的SQL查询语言,称为HiveQL。 使用Hive,用户可以通过编写HiveQL查询来处理和分析大规模的结构化数据Hive提供了对数据的抽象和查询优化,以便将查询转化为适合在Hadoop集群上执行的任务。 简而言之,"apache-hive-1.1.0-bin.tar.gz"是Apache Hive的二进制发布压缩文件,通过安装和配置后,可以使用Hive来进行大规模结构化数据的存储、查询和分析。 ### 回答3: apache-hive-1.1.0-bin.tar.gz 是一个开源的数据仓库工具,用于在Hadoop上进行数据汇总、查询和分析。它是基于Apache Hadoop的一个数据仓库基础设施,为用户提供了一个类SQL的查询语言(HiveQL)来对存储在Hadoop集群中的数据进行查询和分析。 该软件包是以.tar.gz的压缩格式提供的,需要使用相关的解压缩软件将其解压缩。解压缩后会得到一个文件夹,里面包含了Hive的所有相关文件和目录。 Hive提供了一个用于管理和查询大规模分布式数据的平台,并支持海量数据的处理和分析。它基于Hadoop的HDFS存储和MapReduce计算模型,将用户提交的HiveQL语句转换为对Hadoop集群的MapReduce任务。 Hive的主要特点包括: 1. 可扩展性:Hive能够处理大规模的数据,并且能够方便地水平扩展集群规模,以满足不断增长的数据需求。 2. 易于使用:Hive提供了类似SQL的查询语言,使得用户可以更加方便地进行数据查询和分析,而无需编写复杂的MapReduce程序。 3. 多样的数据源:Hive可以处理多种不同的数据源,包括Hadoop HDFS、HBase、Amazon S3等,使得用户可以从不同的数据源中进行数据汇总和分析。 4. 扩展性:Hive提供了丰富的扩展接口,用户可以根据自己的需求编写自定义的函数、聚合操作和存储格式等。 5. 容错性:Hive在处理大规模数据时具备良好的容错性,能够自动处理节点故障或数据丢失等异常情况。 总之,apache-hive-1.1.0-bin.tar.gz是一个功能强大的数据仓库工具,为用户提供了一种简单、灵活和高效的方式来处理和分析大规模数据。它是基于Apache Hadoop的开源项目,广泛应用于各个行业的大数据处理和分析场景中。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值