今天想跟大家讨论一下以下几个概念:Filter , Projections, 和 Puchdowns。
1. Filter(过滤) 和 Project(映射)
在传统的 OLAP 系统中,在进行 Join 的时候使用过滤和映射会极大的提高性能。同样的,在 Hadoop 中使用 Filter 和 Projection 同样可以提高效率,由于减少了一个管道需要处理的数据量。在Hadoop中减少处理的数据量是至关重要的,尤其当需要通过网络和本地磁盘进行处理的时候。我们都知道,MapReduce 的shuffle 过程会将数据通过网络写入到磁盘中,所以拥有更少的数据就意味着Job 和 MapReduce 框架的工作量也就越少,这样Job的数据传输也会更快,CPU、磁盘、网络设备的压力也会减少。
使用 filters 和 projection 来减少数据大小
Filter 和 projections 最后靠近数据源进行执行;在MapReduce中,最好在mapper中执行。以下代码显示了一个排除30岁以下的用户,并且只映射他们的姓名和状态:
源码路径:https://github.com/Hanmourang/hiped2/blob/master/src/main/java/hip/ch6/joins/FilterProjection.java
public static class JoinMap extends Mapper<LongWritable, Text, Text, Text> {
@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 中使用