Description
The OpenStack/swift filesystem produces incorrect output when the written objects exceed the configured partition size. After job completion, the expected files in the swift container have length == 0 and a collection of temporary files remain with names that appear to be URLs.
This can be replicated with teragen against the minicluster using the following command line:
bin/hadoop jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-3.0.0-SNAPSHOT.jar teragen 100000 swift://mycontainer.myservice/teradata
Where core-site.xml contains:
<property>
<name>fs.swift.impl</name>
<value>org.apache.hadoop.fs.swift.snative.SwiftNativeFileSystem</value>
</property>
<property>
<name>fs.swift.partsize</name>
<value>1024</value>
</property>
<property>
<name>fs.swift.service.myservice.auth.url</name>
<value>https://auth.api.rackspacecloud.com/v2.0/tokens</value>
</property>
<property>
<name>fs.swift.service.myservice.username</name>
<value>[[your-cloud-username]]</value>
</property>
<property>
<name>fs.swift.service.myservice.region</name>
<value>DFW</value>
</property>
<property>
<name>fs.swift.service.myservice.apikey</name>
<value>[[your-api-key]]</value>
</property>
<property>
<name>fs.swift.service.myservice.public</name>
<value>true</value>
</property>
Container "mycontainer" should have a collection of objects with names starting with "teradata/part-m-00000". Instead, that file is empty and there is a collection of objects with names like "swift://mycontainer.myservice/teradata/_temporary/0/_temporary/attempt_local415043862_0001_m_000000_0/part-m-00000/000010"