You are viewing a plain text version of this content. The canonical link for it is here.
Posted to issues@flink.apache.org by "Sachin Goel (JIRA)" <ji...@apache.org> on 2015/08/17 09:09:46 UTC
[jira] [Commented] (FLINK-2318) BroadcastVariable of unioned data
set fails
[ https://issues.apache.org/jira/browse/FLINK-2318?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=14699101#comment-14699101 ]
Sachin Goel commented on FLINK-2318:
------------------------------------
I was trying to debug this and found out that {{NUM_BROADCAST_INPUTS}} is incremented twice in {{TaskConfig.java}}. This shouldn't be the case.
However, making sure this field is incremented only once for one broadcast input leads to loss of data. Not all elements get through.
Changing
{code}
this.config.setInteger(NUM_BROADCAST_INPUTS, this.config.getInteger(NUM_BROADCAST_INPUTS, 0) + 1);
{code}
to
{code}
if(this.config.getInteger(grp, 0) == 1) {
this.config.setInteger(NUM_BROADCAST_INPUTS, this.config.getInteger(NUM_BROADCAST_INPUTS, 0) + 1);
}
{code}
and testing on:
{code}
DataSet<Long> d1 = env.generateSequence(1, 10);
DataSet<Long> d2 = env.generateSequence(10, 20);
DataSet<Long> d3 = env.generateSequence(20, 30);
d1.map(new RichMapFunction<Long, Long>() {
@Override
public void open(Configuration parameters) throws Exception{
List unioned = getRuntimeContext().getBroadcastVariable("UNION_BC");
List normal = getRuntimeContext().getBroadcastVariable("NORMAL_BC");
String output = "";
for(int i = 0; i < unioned.size(); i++){
output += (unioned.get(i) + "\n");
}
output += "-----\n";
for(int i = 0; i < normal.size(); i++){
output += (normal.get(i) + "\n");
}
System.out.println(output);
}
@Override
public Long map(Long value) throws Exception {
return value;
}}
)
.withBroadcastSet(d1.union(d2), "UNION_BC")
.withBroadcastSet(d3, "NORMAL_BC")
.output(new DiscardingOutputFormat<Long>());
{code}
this is the output from every task:
{code}
18
5
-----
20
21
29
26
27
24
25
30
28
22
23
{code}
Both the input gates are definitely set, however, all elements are not being read.
[The non-unioned broadcast variable is to ensure that everything else works fine.]
> BroadcastVariable of unioned data set fails
> -------------------------------------------
>
> Key: FLINK-2318
> URL: https://issues.apache.org/jira/browse/FLINK-2318
> Project: Flink
> Issue Type: Bug
> Components: Distributed Runtime, Optimizer
> Affects Versions: 0.9
> Reporter: Fabian Hueske
>
> Using a unioned data set as broadcast variable such as this:
> {code}
> DataSet d1 = [...]
> DataSet d2 = [...]
> DataSet d3 = [...]
> d1
> .map(new MyMapper())
> .withBroadcastSet(d2.union(d3), "myBroadcast");
> {code}
> throws an exception at runtime:
> {code}
> java.lang.Exception: Call to registerInputOutput() of invokable failed
> at org.apache.flink.runtime.taskmanager.Task.run(Task.java:504)
> at java.lang.Thread.run(Thread.java:745)
> Caused by: java.lang.RuntimeException: Initializing the input streams failed in Task MapPartition (MapPartition at translatHashJoinAsMap(FlinkFlowStep.java:755)): Illegal input group size in task configuration: -1
> at org.apache.flink.runtime.operators.RegularPactTask.registerInputOutput(RegularPactTask.java:246)
> at org.apache.flink.runtime.taskmanager.Task.run(Task.java:501)
> ... 1 more
> Caused by: java.lang.Exception: Illegal input group size in task configuration: -1
> at org.apache.flink.runtime.operators.RegularPactTask.initBroadcastInputReaders(RegularPactTask.java:783)
> at org.apache.flink.runtime.operators.RegularPactTask.registerInputOutput(RegularPactTask.java:243)
> ... 2 more
> {code}
> A simple workaround is to apply an identity mapper on the unioned data set.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)