Currently, hive.exec.stagingdir can only be set as a relative directory name that, for operations like insert or insert overwrite, will be placed either under the table directory or the partition directory.
For cases where an HDFS cluster is small but the data being inserted is very large (greater than the capacity of the HDFS cluster, as mentioned in a comment by Ashutosh Chauhan on
HIVE-14270), the client may want to set their staging directory to be an explicit blobstore path (or any filesystem path), rather than relying on Hive to intelligently build the blobstore path based on an interpretation of the job. We may lose locality guarantees, but because renames are just as expensive on blobstores no matter what the prefix is, this isn't considered a terribly large loss (assuming only blobstore customers use this functionality).
Note that hive.blobstore.use.blobstore.as.scratchdir doesn't actually suffice in this case, as the stagingdir is not the same.
This commit enables Hive customers to set an absolute location for all staging directories. For instances where the configured stagingdir scheme is not the same as the scheme for the table location, the default stagingdir configuration is used. This avoids a cross-filesystem rename, which is impossible anyway.