有一个并行作业由一个数据集,一个顺序文件和一个连接它们的查找阶段组成。当达到4GB时,并行作业在查找阶段失败
顺序文件包含15,811行。它进口得很好(我可以在日志中看到这一点)。
问题是与查找阶段 - 它引发以下错误:正如我在IBM的网站和其他论坛一个可能的解决办法是增加节点的数量阅读
LOOKUP,0: Could not map table file "/var/opt/ascential/adm/DataSet1/lookuptable.20140330.spzjazc (size 4191844864 bytes)": Not enough space
Error finalizing/saving table /tmp/dynLUT18950c3139ce
。所以我改变了我的APT文件从1点到6个节点:
{
node "node1"
{
fastname "xxx"
pools ""
resource disk "/var/opt/ascential/adm/DataSet1" {pools ""}
resource scratchdisk "/var/opt/ascential/adm/Scratch1" {pools ""}
}
node "node2"
{
fastname "xxx"
pools ""
resource disk "/var/opt/ascential/adm/DataSet2" {pools ""}
resource scratchdisk "/var/opt/ascential/adm/Scratch2" {pools ""}
}
node "node3"
{
fastname "xxx"
pools ""
resource disk "/var/opt/ascential/adm/DataSet3" {pools ""}
resource scratchdisk "/var/opt/ascential/adm/Scratch3" {pools ""}
}
node "node4"
{
fastname "xxx"
pools ""
resource disk "/var/opt/ascential/adm/DataSet4" {pools ""}
resource scratchdisk "/var/opt/ascential/adm/Scratch4" {pools ""}
}
node "node5"
{
fastname "xxx"
pools ""
resource disk "/var/opt/ascential/adm/DataSet5" {pools ""}
resource scratchdisk "/var/opt/ascential/adm/Scratch5" {pools ""}
}
node "node6"
{
fastname "xxx"
pools ""
resource disk "/var/opt/ascential/adm/DataSet6" {pools ""}
resource scratchdisk "/var/opt/ascential/adm/Scratch6" {pools ""}
}
}
不过,我得到了同样的错误,我发现作业只写在第一个数据集文件夹(有一个名为/ var/opt文件/ascential/adm/DataSet1/lookuptable.20140330.spzjazc,它的大小会增加,直到达到〜4GB,然后作业失败并且文件被删除)。
由于只有1个文件,我假设这个作业实际上并没有在多个节点上运行。它是否正确?我如何强制它在所有6个节点上运行,以便我可以克服4 GB的限制?
有没有其他的解决方法呢?
虽然我无法克服4GB限制,但我设法通过将其中一个输入列的大小从VARCHAR(762)更改为VARCHAR(20)来解决此问题。这似乎对DataSet文件的文件大小和作业持续时间(作业持续时间从15分钟减少到2分钟)有很大影响。此外,似乎使用Join而不是Lookup阶段也可以做到这一点,(我测试了一个更小的数据量,它工作正常)。更多细节:http://tinyurl.com/omzm8ux – Razvan