有一个并行作业,由一个数据集,一个顺序文件和一个连接它们的查找阶段组成。
顺序文件包含15,811行。它导入得很好(我可以在日志中看到这一点)。
问题在于查找阶段 - 它会引发以下错误:
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
当我在IBM网站和其他论坛上阅读时,可能的解决方案可能是增加节点数量。所以我将我的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 ""}
}
}
仍然,我得到相同的错误,我注意到作业只写入第一个DataSet文件夹(有一个名为/var/opt/ascential/adm/DataSet1/lookuptable.20140330.spzjazc的文件,其大小一直在增长它达到~4GB然后作业失败并删除文件。
我假设作业实际上并没有在多个节点上运行,因为只有一个文件。它是否正确?如何强制它在所有6个节点上运行,以便我可以克服4 GB的限制?
还有其他解决方法吗?
答案 0 :(得分:1)
查找阶段加载内存中的所有数据。 所以你在这里完全正常。 也许您可以将其更改为合并阶段或加入阶段。
答案 1 :(得分:0)
随机是正确的。
如果您使用Datastage PX为左连接建模并且右侧表的数据量很大或不可预测,那么您需要使用连接阶段而不是查找阶段。
合并阶段是一种专门/优化的连接,大多数人不需要也不应该使用。
答案 2 :(得分:0)
查找阶段应该用于处理少量数据: Join vs Lookup
顺序文件以顺序模式(仅使用一个节点)呈现,您是否可以添加将顺序转换为数据集文件的作业?数据集文件使用并行模式(许多节点)。
否则,您可以使用连接阶段,因为左链接为其分配的资源多于严格链接,因此将左链接设置为包含大多数数据的文件。