今天就跟大家聊聊有关Filter、Project及Pushdowns实例分析,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。
我们注重客户提出的每个要求,我们充分考虑每一个细节,我们积极的做好成都网站设计、成都网站建设服务,我们努力开拓更好的视野,通过不懈的努力,创新互联公司赢得了业内的良好声誉,这一切,也不断的激励着我们更好的服务客户。 主要业务:网站建设,网站制作,网站设计,微信小程序定制开发,网站开发,技术开发实力,DIV+CSS,PHP及ASP,ASP.Net,SQL数据库的技术开发工程师。
1. Filter(过滤) 和 Project(映射)
在传统的 OLAP 系统中,在进行 Join 的时候使用过滤和映射会极大的提高性能。同样的,在 Hadoop 中使用 Filter 和 Projection 同样可以提高效率,由于减少了一个管道需要处理的数据量。在Hadoop中减少处理的数据量是至关重要的,尤其当需要通过网络和本地磁盘进行处理的时候。我们都知道,MapReduce 的shuffle 过程会将数据通过网络写入到磁盘中,所以拥有更少的数据就意味着Job 和 MapReduce 框架的工作量也就越少,这样Job的数据传输也会更快,CPU、磁盘、网络设备的压力也会减少。使用 filters 和 projection 来减少数据大小Filter 和 projections 最后靠近数据源进行执行;在MapReduce中,最好在mapper中执行。以下代码显示了一个排除30岁以下的用户,并且只映射他们的姓名和状态:
public static class JoinMap extends Mapper {
@Override
protected void map(LongWritable offset, Text value, Context context)
throws IOException, InterruptedException {
User user = User.fromText(value);
if (user.getAge() >= 30) {
context.write(new Text(user.getName()),
new Text(user.getState()));
}
}
}
在 Join 中使用 filter 需要注意的是,并不是所有连接的数据集都包含你需要过滤的字段。对于这种情况,你需要使用Bloom filter 方法。2. Pushdowns
谓词下推(predicate pushdown)属于逻辑优化。优化器可以将谓词过滤下推到数据源,从而使物理执行跳过无关数据。在使用Parquet的情况下,更可能存在文件被整块跳过的情况,同时系统还通过字典编码把字符串对比转换为开销更小的整数对比。在关系型数据库中,谓词则被下推到外部数据库用以减少数据传输。通过以下这张图,我们可以发现,谓词下推在逻辑层面可以理解为利用where 条件中的过滤条件将无用的数据进行筛选掉最终得到需要的行列。
投影和谓词下推通过对存储格式的映射和谓词的推送而进一步来进行过滤。针对 Parquet 这样的存储格式,我们可以直接跳过整个记录或者整个块,这样极大的提高了 Job 的性能并且减少了不必要的开销。
这里需要注意的是,Avro 是基于行列的存储格式。1. 对 Inner Join 来说,Hive 只支持等值连接,不支持不等值连接。因为不等值连接在 MapReduce Job 转换起来很麻烦。2. 虽然 Hive 不支持等值连接,但是在 Cross Join 和 Where条件中仍然可以使用。下面是 Cross Join发生的条件:看完上述内容,你们对Filter、Project及Pushdowns实例分析有进一步的了解吗?如果还想了解更多知识或者相关内容,请关注创新互联行业资讯频道,感谢大家的支持。
文章名称:Filter、Project及Pushdowns实例分析
网页链接:
http://chengdu.cdxwcx.cn/article/jdigji.html