我已经尝试多次运行这个作业,每次都遇到许多与配额相关的警告(并且每次都请求增加),但最后它总是以失败告终并显示此错误消息,我认为这是我的原因造成的数据集太大,但我不确定。 Dataprep 应该能够处理任何规模的 ETL 作业,而这甚至不是那么大的作业。无论如何,这是错误消息,我们将不胜感激:
java.lang.RuntimeException: org.apache.beam.sdk.util.UserCodeException: java.lang.RuntimeException: java.io.IOException: INVALID_ARGUMENT: Shuffle key too large:2001941 > 1572864
at com.google.cloud.dataflow.worker.GroupAlsoByWindowsParDoFn$1.output(GroupAlsoByWindowsParDoFn.java:182)
at com.google.cloud.dataflow.worker.GroupAlsoByWindowFnRunner$1.outputWindowedValue(GroupAlsoByWindowFnRunner.java:104)
at com.google.cloud.dataflow.worker.util.BatchGroupAlsoByWindowViaIteratorsFn.processElement(BatchGroupAlsoByWindowViaIteratorsFn.java:121)
at com.google.cloud.dataflow.worker.util.BatchGroupAlsoByWindowViaIteratorsFn.processElement(BatchGroupAlsoByWindowViaIteratorsFn.java:53)
at com.google.cloud.dataflow.worker.GroupAlsoByWindowFnRunner.invokeProcessElement(GroupAlsoByWindowFnRunner.java:117)
...
完整的错误信息可以在这里找到:https://pastebin.com/raw/QTtmm5D2
我已经增加了几次配额,虽然这让工作比以前继续进行,但它仍然以同样的错误结束(尽管洗牌键的大小更大。)它现在似乎没有撞墙,因为与配额相关的问题。
除了放弃 Dataprep 并回到 map reduce 之外,还有什么想法吗?
最佳答案
在我看来,这更可能是单个列中的单个值太大而不是数据集太大的错误。你有这么长的值的列吗? (这里显然大约 2MB)
也就是说,我认为这应该作为错误报告给 Dataprep。看起来他们按列值执行分组,他们可能应该在分组之前将它们修剪成更小的尺寸。我不知道他们是否在关注 StackOverflow。
关于java - Google Dataflow/Dataprep Shuffle key 太大 (INVALID_ARGUMENT),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49078146/