问题标签 [partitioner]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
hadoop - Hadoop 操作顺序
根据在雅虎的hadoop教程上找到的附图,操作的顺序是map > combine > partition,应该遵循reduce
这是我的 map 操作发出的示例键
假设有 100 个相同类型的键,这应该组合为
所以这是我的流媒体命令
这是我得到的错误
我看起来partitioner在combiner之前运行。有什么想法吗?
hadoop - Partitioner 类中的参数 numPartitions
大师!
任何人都可以回答:Partitioner 类中的参数 numPartitions 在哪里定义(这个参数的值)?
hadoop - Hadoop 向所有 reducer 发送记录
如何将特定记录发送给我的所有减速器?
我知道 Partitioner 类及其作用,但我没有看到任何简单的方法可以确保记录发送到所有减速器。
基本上,Partitioner 有这个方法:
我的第一个想法是让 Partitioner 和 Mapper 协作如下:Mapper 不断输出记录的次数等于 reduce 任务的数量,并且 Partitioner 以这种方式返回所有整数(从 0 到 numPartitions-1)确保记录到达所有分区。
有没有其他更聪明的方法来解决这个问题?例如,我为需要发送到所有分区的记录返回 -1,并且框架在看到返回的 -1 时为我执行此操作。
java - 在 Hadoop Map-Reduce 中,是否有任何类在排序之后和分区之前看到整个键列表?
我正在使用 Hadoop 分析非常不均匀的数据分布。有些键有数千个值,但大多数只有一个。例如,与 IP 地址相关联的网络流量将有许多数据包与一些健谈的 IP 相关联,而只有少数与大多数 IP 相关联。另一种说法是基尼指数非常高。
为了有效地处理这个问题,每个reducer 应该获得一些高音量键或大量低音量键,以便获得大致均匀的负载。如果我正在编写分区过程,我知道该怎么做:我将获取keys
映射器生成的(包括所有重复键)的排序列表以及减速器的数量,N
并将拆分放在
Reduceri
将获得k
诸如split[i] <= k < split[i+1]
for0 <= i < N-1
和split[i] <= k
for 的键i == N-1
。
我愿意用 Java 编写自己的分区器,但Partitioner<KEY,VALUE>类似乎一次只能访问一个键值记录,而不是整个列表。我知道 Hadoop 对映射器生成的记录进行排序,所以这个列表必须存在于某个地方。它可能分布在几个分区器节点中,在这种情况下,我会在其中一个子列表上执行拆分过程,并以某种方式将结果传达给所有其他分区器节点。(假设选择的分区节点看到一个随机子集,结果仍然是近似负载平衡的。) 有谁知道排序的键列表存储在哪里,以及如何访问它?
我不想编写两个 map-reduce 作业,一个是查找拆分,另一个是实际使用它们,因为这看起来很浪费。(映射器必须做两次相同的工作。)这似乎是一个普遍的问题:不均匀分布很常见。
hadoop - 输出收集器如何工作?
我试图分析默认的 map reduce 作业,它没有定义 mapper 或 reducer。即一个使用 IdentityMapper 和 IdentityReducer 为了让自己清楚我刚刚写了我的身份缩减器
我的输入文件是:
我的观点是,由于聚合是由程序员在 reducer 的 while 循环中完成的,然后写入 outputcollector。我的印象是传递给 outputcollector 的减速器的键总是唯一的,因为如果我不聚合,最后一个键的值会覆盖前一个值。显然不是这样。有人可以给我一个更好的输出收集器,它是如何工作的以及它如何处理所有的键。我在 hadoop src 代码中看到了许多 outputcollector 的实现。我可以编写自己的输出收集器来完成我所期望的吗?
hadoop - MapReduce 中的地图工作者如何分区文件与中间值?
我正在尝试理解 MapReduce 模型,我需要建议,因为我不确定如何使用 map 函数的中间结果对文件进行排序和分区。我从Jeffrey Dean 和 Sanjay Ghemawat 的 MapReduce 论文以及 Hadoop: The Definitive Guide 中获得了关于 MapReduce 的最多知识。
具有map函数中间结果的文件是小型排序和分区文件的组合。这些小文件被划分为对应于reduce worker的partition。然后将小文件合并为一个文件。我需要知道小文件的分区是如何完成的。首先,我认为每个分区都有一定范围的键。
例如:如果我们将键作为整数在 <1;100> 范围内,并且文件分为三个分区,那么第一个分区可以包含键在 <1,33> 范围内的值,第二个分区可以包含键在 <1,33> 范围内的值34;66> 和第三分区 <67;100>。合并文件中也有相同的分区。
但我不确定。每个分区都被发送到相应的reduce worker。在我们的示例中,如果我们有两个 reduce 工作人员,则可以将具有前两个键范围(<1,33> 和 <34;66>)的分区发送给第一个工作人员,将最后一个分区发送给第三个工作人员。但是,如果我错了并且文件以另一种方式划分(我的意思是分区没有自己的可能键范围),那么每个 reduce 工作人员都可以得到相同键的结果。所以我需要以某种方式合并这些减少工作者的结果,对吗?我可以将这些结果发送到主节点并在那里合并吗?
简而言之:我需要解释 map 阶段的文件是如何划分的(如果我的描述是错误的),并解释我如何以及在哪里可以处理 reduce 工作人员的结果。
我希望我描述了我的问题足以理解。当然,我可以解释更多。
非常感谢你的回答。
hadoop - Hadoop 自定义分区问题
根据自定义分区程序的“getPartition”方法的输出,我遇到了一个自定义中间键没有出现在我期望的分区中的问题。我可以在我的映射器日志文件中看到分区器生成预期的分区号,但是有时具有公共分区号的键不会在同一个减速器中结束。
具有公共“getPartition”输出的键如何在不同的减速器中结束?
我在映射器日志文件中注意到,在对自定义中间键“hashCode”和“compareTo”方法进行了多次调用之后,所有“getPartition”调用都被调用了。映射器只是在分区排序中进行还是可能是问题的一部分?
我附上了自定义中间键和分区器的代码。注意:我确切知道 1/2 的键将“useBothGUIDFlag”设置为 true,而 1/2 的键将此设置为 false(这就是为什么我将这些键分区为分区空间的一半)。我也知道键似乎没有跨入分区的另一半(即,“useBothGUIDFlag”键不会出现在“!useBothGUIDFlag”分区中,反之亦然),而是它们在它们的一半内混合分区。
hadoop - 自定义分区错误
我正在编写自己的自定义 Partitioner(Old Api) 下面是我扩展 Partitioner 类的代码:
设置 JobConf:
WordPair 类包含:
私有文本字;
私人文本邻居;
问题:
1. 我收到错误:“实际参数类 (WordPairPartitioner) 无法转换为类 (?extends Partitioner)
。2. 这是编写自定义分区器的正确方法,还是我还需要覆盖其他一些功能?
hadoop - Hadoop Partitioner 中的自定义计数器
我想在自定义分区器(甚至是默认的 HashPartitioner)中捕获一些关于键及其值的信息。
我可以通过访问“上下文”变量在映射器和减速器中使用自定义计数器。但是,在 Partitioner 内部,无法访问“context”变量。
有没有办法:-1- 从 Partitioner 访问“context”变量?或-2-如何向分区器添加计数器?
谢谢你。
cassandra - 如何允许不同的键空间在 Cassandra 中使用不同的分区器?
我是 Cassandra 的新手,对它的分区器有一个基本的问题。
根据Cassandra 文档,集群的分区器应该在 cassandra.yaml 文件中设置。我的问题是:这是否意味着 Cassandra 集群中的所有键空间都必须使用相同的分区器?如果不是,如何允许不同的键空间使用不同的分区器?