public static HoodieCompactionPlan getCompactionPlan(HoodieTableMetaClient metaClient, String compactionInstant) throws IOException { HoodieCompactionPlan compactionPlan = AvroUtils.deserializeCompactionPlan( metaClient.getActiveTimeline().getInstantAuxiliaryDetails( HoodieTimeline.getCompactionRequestedInstant(compactionInstant)).get()); return compactionPlan; }
/** * Construction Compaction Plan from compaction instant */ private static HoodieCompactionPlan getCompactionPlan(HoodieTableMetaClient metaClient, String compactionInstant) throws IOException { HoodieCompactionPlan compactionPlan = AvroUtils.deserializeCompactionPlan( metaClient.getActiveTimeline().getInstantAuxiliaryDetails( HoodieTimeline.getCompactionRequestedInstant(compactionInstant)).get()); return compactionPlan; }
/** * Commit a compaction operation. Allow passing additional meta-data to be stored in commit instant file. */ public void commitCompaction(String compactionInstantTime, JavaRDD<WriteStatus> writeStatuses, Optional<Map<String, String>> extraMetadata) throws IOException { HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), config.getBasePath(), true); HoodieTable<T> table = HoodieTable.getHoodieTable(metaClient, config, jsc); HoodieActiveTimeline timeline = metaClient.getActiveTimeline(); HoodieCompactionPlan compactionPlan = AvroUtils.deserializeCompactionPlan( timeline.getInstantAuxiliaryDetails(HoodieTimeline.getCompactionRequestedInstant(compactionInstantTime)).get()); // Merge extra meta-data passed by user with the one already in inflight compaction Optional<Map<String, String>> mergedMetaData = extraMetadata.map(m -> { Map<String, String> merged = new HashMap<>(); Map<String, String> extraMetaDataFromInstantFile = compactionPlan.getExtraMetadata(); if (extraMetaDataFromInstantFile != null) { merged.putAll(extraMetaDataFromInstantFile); } // Overwrite/Merge with the user-passed meta-data merged.putAll(m); return Optional.of(merged); }).orElseGet(() -> Optional.ofNullable(compactionPlan.getExtraMetadata())); commitCompaction(writeStatuses, table, compactionInstantTime, true, mergedMetaData); }
/** * Commit a compaction operation. Allow passing additional meta-data to be stored in commit instant file. */ public void commitCompaction(String compactionInstantTime, JavaRDD<WriteStatus> writeStatuses, Optional<Map<String, String>> extraMetadata) throws IOException { HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), config.getBasePath(), true); HoodieTable<T> table = HoodieTable.getHoodieTable(metaClient, config, jsc); HoodieActiveTimeline timeline = metaClient.getActiveTimeline(); HoodieCompactionPlan compactionPlan = AvroUtils.deserializeCompactionPlan( timeline.getInstantAuxiliaryDetails(HoodieTimeline.getCompactionRequestedInstant(compactionInstantTime)).get()); // Merge extra meta-data passed by user with the one already in inflight compaction Optional<Map<String, String>> mergedMetaData = extraMetadata.map(m -> { Map<String, String> merged = new HashMap<>(); Map<String, String> extraMetaDataFromInstantFile = compactionPlan.getExtraMetadata(); if (extraMetaDataFromInstantFile != null) { merged.putAll(extraMetaDataFromInstantFile); } // Overwrite/Merge with the user-passed meta-data merged.putAll(m); return Optional.of(merged); }).orElseGet(() -> Optional.ofNullable(compactionPlan.getExtraMetadata())); commitCompaction(writeStatuses, table, compactionInstantTime, true, mergedMetaData); }
activeTimeline.getInstantAuxiliaryDetails( HoodieTimeline.getCompactionRequestedInstant(instant.getTimestamp())).get()); } catch (HoodieIOException ioe) { workload = AvroUtils.deserializeCompactionPlan(activeTimeline.getInstantAuxiliaryDetails( HoodieTimeline.getCompactionRequestedInstant(instant.getTimestamp())).get());
/** * Perform compaction operations as specified in the compaction commit file * * @param compactionInstant Compacton Instant time * @param activeTimeline Active Timeline * @param autoCommit Commit after compaction * @return RDD of Write Status */ private JavaRDD<WriteStatus> runCompaction( HoodieInstant compactionInstant, HoodieActiveTimeline activeTimeline, boolean autoCommit) throws IOException { HoodieCompactionPlan compactionPlan = AvroUtils.deserializeCompactionPlan( activeTimeline.getInstantAuxiliaryDetails(compactionInstant).get()); // Mark instant as compaction inflight activeTimeline.transitionCompactionRequestedToInflight(compactionInstant); compactionTimer = metrics.getCompactionCtx(); // Create a Hoodie table which encapsulated the commits and files visible HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), config.getBasePath(), true); HoodieTable<T> table = HoodieTable.getHoodieTable(metaClient, config, jsc); JavaRDD<WriteStatus> statuses = table.compact(jsc, compactionInstant.getTimestamp(), compactionPlan); // Force compaction action statuses.persist(config.getWriteStatusStorageLevel()); // pass extra-metada so that it gets stored in commit file automatically commitCompaction(statuses, table, compactionInstant.getTimestamp(), autoCommit, Optional.ofNullable(compactionPlan.getExtraMetadata())); return statuses; }
private void moveCompactionFromRequestedToInflight(String compactionInstantTime, HoodieWriteClient client, HoodieWriteConfig cfg) throws IOException { HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), cfg.getBasePath()); HoodieInstant compactionInstant = HoodieTimeline.getCompactionRequestedInstant(compactionInstantTime); HoodieCompactionPlan workload = AvroUtils.deserializeCompactionPlan( metaClient.getActiveTimeline().getInstantAuxiliaryDetails(compactionInstant).get()); metaClient.getActiveTimeline().transitionCompactionRequestedToInflight(compactionInstant); HoodieInstant instant = metaClient.getActiveTimeline().reload().filterPendingCompactionTimeline().getInstants() .filter(in -> in.getTimestamp().equals(compactionInstantTime)).findAny().get(); assertTrue("Instant must be marked inflight", instant.isInflight()); }
/** * Perform compaction operations as specified in the compaction commit file * * @param compactionInstant Compacton Instant time * @param activeTimeline Active Timeline * @param autoCommit Commit after compaction * @return RDD of Write Status */ private JavaRDD<WriteStatus> runCompaction( HoodieInstant compactionInstant, HoodieActiveTimeline activeTimeline, boolean autoCommit) throws IOException { HoodieCompactionPlan compactionPlan = AvroUtils.deserializeCompactionPlan( activeTimeline.getInstantAuxiliaryDetails(compactionInstant).get()); // Mark instant as compaction inflight activeTimeline.transitionCompactionRequestedToInflight(compactionInstant); compactionTimer = metrics.getCompactionCtx(); // Create a Hoodie table which encapsulated the commits and files visible HoodieTableMetaClient metaClient = new HoodieTableMetaClient(jsc.hadoopConfiguration(), config.getBasePath(), true); HoodieTable<T> table = HoodieTable.getHoodieTable(metaClient, config, jsc); JavaRDD<WriteStatus> statuses = table.compact(jsc, compactionInstant.getTimestamp(), compactionPlan); // Force compaction action statuses.persist(config.getWriteStatusStorageLevel()); // pass extra-metada so that it gets stored in commit file automatically commitCompaction(statuses, table, compactionInstant.getTimestamp(), autoCommit, Optional.ofNullable(compactionPlan.getExtraMetadata())); return statuses; }
HoodieActiveTimeline activeTimeline = HoodieCLI.tableMetadata.getActiveTimeline(); HoodieCompactionPlan workload = AvroUtils.deserializeCompactionPlan( activeTimeline.getInstantAuxiliaryDetails( HoodieTimeline.getCompactionRequestedInstant(compactionInstantTime)).get());