/** * Constructor. * * @param context Task attempt context. * @param lgLayout Layout of the locality group. * @throws IOException on I/O error. */ public LocalityGroupRecordWriter(TaskAttemptContext context, LocalityGroupLayout lgLayout) throws IOException { mLGLayout = Preconditions.checkNotNull(lgLayout); mFamily = lgLayout.getId().toString(); // These parameters might be specific to each locality group: mMaxFileSizeBytes = mConf.getLong(CONF_HREGION_MAX_FILESIZE, DEFAULT_HREGION_MAX_FILESIZE); mBlockSizeBytes = mConf.getInt(CONF_HFILE_BLOCKSIZE, DEFAULT_HFILE_BLOCKSIZE); mFamilyDir = new Path(mOutputDir, mFamily); if (!mFileSystem.exists(mFamilyDir)) { if (!mFileSystem.mkdirs(mFamilyDir)) { throw new IOException(String.format( "Unable to create output directory: %s", mFamilyDir)); } } mCompressionType = mLGLayout.getDesc().getCompressionType().toString().toLowerCase(Locale.ROOT); mWriter = openNewWriter(); }
/** {@inheritDoc} */ @Override public byte[] toHBaseFamilyName(LocalityGroupLayout localityGroup) { return Bytes.toBytes(localityGroup.getId().toString()); }
layout.getFamilyMap().get(columnRequest.getFamily()).getLocalityGroup().getId(); localityGroups.add(localityGroupId);
if (lgLayout.getId() != null) { final String previous = idMap.put(lgLayout.getId(), lgLayout.getName()); Preconditions.checkState(previous == null, String.format("Duplicate locality group ID '%s' associated to '%s' and '%s'.", lgLayout.getId(), lgLayout.getName(), previous)); } else { unassigned.add(lgLayout); Preconditions.checkState(localityGroup.getId() == null); while (true) { final ColumnId columnId = new ColumnId(nextColumnId);
final ColumnId lgid = flayout.getLocalityGroup().getId();
layout.getFamilyMap().get(column.getFamily()).getLocalityGroup().getId(); final CassandraTableName tableName = CassandraTableName.getLocalityGroupTableName(tableURI, localityGroupId);
CassandraTableName.getLocalityGroupTableName( tableURI, familyLayout.getLocalityGroup().getId());
tables.add(CassandraTableName.getLocalityGroupTableName(tableURI, localityGroup.getId()));
final ColumnId localityGroupID = family.getLocalityGroup().getId(); final ColumnId familyID = family.getId();
CassandraTableName.getLocalityGroupTableName( tableURI, familyLayout.getLocalityGroup().getId());
CassandraTableName.getLocalityGroupTableName( tableURI, familyLayout.getLocalityGroup().getId());
/** * Delete all cells from a row with a timestamp less than or equal to the specified timestamp. * * <p>Note HBase does not represent row deletions with individual (cross-family) * tombstones. Instead, this method issues a family delete for each locality group * individually.</p> * * @param entityId Entity ID of the row to delete data from. * @param upToTimestamp Delete cells with a timestamp older or equal to this parameter. * @throws IOException on I/O error. */ @Override public void deleteRow(EntityId entityId, long upToTimestamp) throws IOException { for (LocalityGroupLayout localityGroupLayout : mTable.getLayout().getLocalityGroups()) { final HFileKeyValue mrKey = new HFileKeyValue( entityId.getHBaseRowKey(), localityGroupLayout.getId().toByteArray(), HConstants.EMPTY_BYTE_ARRAY, upToTimestamp, HFileKeyValue.Type.DeleteFamily, HConstants.EMPTY_BYTE_ARRAY); write(mrKey); } }
/** {@inheritDoc} */ @Override public void deleteTable(String tableName) throws IOException { final State state = mState.get(); Preconditions.checkState(state == State.OPEN, "Cannot delete table in Fiji instance %s in state %s.", this, state); // Delete from Cassandra. final FijiURI tableURI = FijiURI.newBuilder(mURI).withTableName(tableName).build(); final FijiTableLayout layout = mMetaTable.getTableLayout(tableName); final List<ResultSetFuture> futures = Lists.newArrayListWithCapacity(layout.getLocalityGroups().size()); for (LocalityGroupLayout localityGroup : layout.getLocalityGroups()) { final String delete = CQLUtils.getDropTableStatement( CassandraTableName.getLocalityGroupTableName(tableURI, localityGroup.getId())); futures.add(mAdmin.executeAsync(delete)); } // Delete from the meta table getMetaTable().deleteTable(tableName); for (ResultSetFuture future : futures) { future.getUninterruptibly(); } }
/** {@inheritDoc} */ @Override public void deleteRow(final EntityId entityId) throws IOException { synchronized (mMonitor) { final FijiTableLayout layout = mCapsule.getLayout(); final CassandraFijiTable tableURI = mTable; for (LocalityGroupLayout localityGroup : layout.getLocalityGroups()) { final CassandraTableName table = CassandraTableName.getLocalityGroupTableName(tableURI.getURI(), localityGroup.getId()); final Statement delete = mTable.getStatementCache().createLocalityGroupDeleteStatement(table, entityId); mBufferedStatements.put(table, delete); mCurrentWriteBufferSize += 1; } if (mCurrentWriteBufferSize > mMaxWriteBufferSize) { flush(); } } }