繁体   English   中英

Hadoop Map减少对大型键空间的查询

[英]Hadoop Map Reduce queries for large key spaces

我需要定期处理十亿条记录。 唯一键可以在1000万范围内。 值是最大为200K字符的字符串。

这是我的问题:

  1. 密钥空间很大(一千万)。 Hadoop能够处理这么大的密钥空间吗? 每个键将有一个减速器,因此将有数百万个减速器。

  2. 我想在reducer本身中更新数据库。 在减速器中,我将合并值(说是当前值),从数据库中读取现有值(说是现有值),合并当前值和现有值并更新数据库。 这是正确的策略吗?

  3. 每个箱子可以同时运行多少个减速器? 它是可配置的吗? 如果每个框一次只能运行一个reducer,那将是个问题,因为我将无法非常快速地更新DB中键的状态。

  4. 我希望工作在2-3个小时内完成。 我需要多少个盒子(我最多可以保留50个盒子-64 GB RAM,8核机器)

谢谢

您的问题的答案:

一种。 您对归约器之间的键,值分配有错误的理解。 减速器的数量不等于唯一映射器输出键的数量。 这个概念是-与映射器中的键相关联的所有值都进入单个化简器。 这绝不意味着还原器将仅获得一个密钥。

例如,考虑以下映射器输出:

Mapper(k1,v1), Mapper(k1,v2), Mapper(k1,v3)
Mapper(k2,w1), Mapper(k2,w2)
Mapper(k3,u1), Mapper(k3,u2), Mapper(k3,u3), Mapper(k3,u4)

因此,与k1-v1,v2v3有关的值将进入单个化简器,即R1 ,并且不会拆分成多个化简器。 但这并不意味着R1仅需要处理1个密钥k1 它也可以具有k2k3的值。 但是对于任何一个化简器接收到的密钥,与该密钥相关联的所有值都将到达同一个化简器。 希望它清除您的疑问。

b。 您正在使用哪个数据库? 为了减少数据库调用或更新语句,可以在完成与特定键相关的值的循环之后,将查询放在reducer()的末尾。

例如:

public static class ReduceJob extends MapReduceBase implements Reducer<Text, Text, Text, Text> {

        @Override
        public synchronized void reduce(Text key, Iterator<Text> values, OutputCollector<Text, Text> output,
                Reporter reporter) throws IOException {


            while (values.hasNext()) {
                      // looping through the values
            }
            // have your DB update etc. query here to reduce DB calls
      }
}

C。 是的,减速器的数量是可配置的。 如果要基于作业设置它,则可以在作业代码run()方法中添加一行以设置减速器的数量。

jobConf.set("mapred.reduce.tasks", numReducers)

如果要基于机器设置它,即集群中每台机器应该有多少个reducer,那么您需要将集群的hadoop配置更改为:

mapred.tasktracker。{map | reduce} .tasks.maximum-分别在给定TaskTracker上同时运行的MapReduce任务的最大数量。 默认为2(2个映射和2个缩减),但根据您的硬件而有所不同。

此处有更多详细信息: http : //hadoop.apache.org/docs/stable/cluster_setup.html#Configuring+the+Hadoop+Daemons

d。 如果您的数据文件不是gZipped(hadoop InputSplit不适用于gZipped文件),那么按照您所说的,您有200 * 1024 * 10亿字节=大约204800 GB或204.800 TB数据,因此如果要获取它在2-3小时内完成,最好将所有50盒备用,如果减速器的内存占用量少,则根据最新答案增加每台机器的减速器数量。 另外,将InputSplit大小增加到128MB左右可能会有所帮助。

谢谢并恭祝安康。
Kartikeya Sinha

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM