2014-03-30 36 views
0

有一个并行作业由一个数据集,一个顺序文件和一个连接它们的查找阶段组成。当达到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. 由于只有1个文件,我假设这个作业实际上并没有在多个节点上运行。它是否正确?我如何强制它在所有6个节点上运行,以便我可以克服4 GB的限制?

  2. 有没有其他的解决方法呢?

+0

虽然我无法克服4GB限制,但我设法通过将其中一个输入列的大小从VARCHAR(762)更改为VARCHAR(20)来解决此问题。这似乎对DataSet文件的文件大小和作业持续时间(作业持续时间从15分钟减少到2分钟)有很大影响。此外,似乎使用Join而不是Lookup阶段也可以做到这一点,(我测试了一个更小的数据量,它工作正常)。更多细节:http://tinyurl.com/omzm8ux – Razvan

回答

1

查找阶段加载内存中的所有数据。 所以这是你在这里完全正常的。 也许你可以改变它来合并阶段或加入阶段。

0

随机是正确的。

如果您使用Datastage PX来建模左连接,并且右表的数据量很大或不可预知,那么您需要使用连接阶段而不是查找阶段。

合并阶段是一个专门的/优化的连接,大多数人不需要也不应该使用。

0

查找阶段应被用来处理数据的小ammount的: Join vs Lookup

顺序文件按序方式readed(只使用一个节点),您可以加入的顺序转换成一个数据集工作文件?数据集文件使用并行模式(许多节点)。

否则,您可以使用加入阶段,因为左侧链接指定比左侧链接更多的资源,因此可以将左侧链接设置为大多数数据。

相关问题