Details
Description
This should be committed to when Hive moves to Hadoop 2.8
In Hadoop 2.8.0 TDE trash collection was fixed through HDFS-8831. This enables us to make drop table calls for Hive managed tables where Hive metastore warehouse directory is in encrypted zone. However even with the feature in HDFS, Hive drop table currently fail:
$ hdfs crypto -listZones /apps/hive/warehouse key2 $ hdfs dfs -ls /apps/hive/warehouse Found 1 items drwxrwxrwt - hdfs hdfs 0 2016-09-01 02:54 /apps/hive/warehouse/.Trash hive> create table abc(a string, b int); OK Time taken: 5.538 seconds hive> dfs -ls /apps/hive/warehouse; Found 2 items drwxrwxrwt - hdfs hdfs 0 2016-09-01 02:54 /apps/hive/warehouse/.Trash drwxrwxrwx - deepesh hdfs 0 2016-09-01 17:15 /apps/hive/warehouse/abc hive> drop table if exists abc; FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. MetaException(message:Unable to drop default.abc because it is in an encryption zone and trash is enabled. Use PURGE option to skip trash.)
The problem lies here:
private void checkTrashPurgeCombination(Path pathToData, String objectName, boolean ifPurge) ... if (trashEnabled) { try { HadoopShims.HdfsEncryptionShim shim = ShimLoader.getHadoopShims().createHdfsEncryptionShim(FileSystem.get(hiveConf), hiveConf); if (shim.isPathEncrypted(pathToData)) { throw new MetaException("Unable to drop " + objectName + " because it is in an encryption zone" + " and trash is enabled. Use PURGE option to skip trash."); } } catch (IOException ex) { MetaException e = new MetaException(ex.getMessage()); e.initCause(ex); throw e; } }
As we can see that we are making an assumption that delete wouldn't be successful in encrypted zone. We need to modify this logic.
Attachments
Attachments
Issue Links
- relates to
-
HIVE-14319 update encryption_move_tbl.q when switching Hive to use Hadoop 2.7
- Resolved
-
HIVE-14380 Queries on tables with remote HDFS paths fail in "encryption" checks.
- Closed