@Override
  public void start(CoprocessorEnvironment env) throws IOException {
    if (env instanceof RegionCoprocessorEnvironment) {
      this.env = (RegionCoprocessorEnvironment) env;
    } else {
      throw new CoprocessorException("Must be loaded on a table region!");
    }
  }
Defines a protocol to delete data in bulk based on a scan. The scan can be range scan or with
conditions(filters) etc.This can be used to delete rows, column family(s), column qualifier(s) or
version(s) of columns.When delete type is FAMILY or COLUMN, which all family(s) or column(s)
getting deleted will be determined by the Scan. Scan need to select all the families/qualifiers
which need to be deleted.When delete type is VERSION, Which column(s) and version(s) to be
deleted will be determined by the Scan. Scan need to select all the qualifiers and its versions
which needs to be deleted.When a timestamp is passed only one version at that timestamp will be
deleted(even if Scan fetches many versions). When timestamp passed as null, all the versions
which the Scan selects will get deleted. <br>
Example:

<pre>
<code>
Scan scan = new Scan();
// set scan properties(rowkey range, filters, timerange etc).
HTable ht = ...;
long noOfDeletedRows = 0L;
Batch.Call&lt;BulkDeleteService, BulkDeleteResponse&gt; callable =
    new Batch.Call&lt;BulkDeleteService, BulkDeleteResponse&gt;() {
  ServerRpcController controller = new ServerRpcController();
  BlockingRpcCallback&lt;BulkDeleteResponse&gt; rpcCallback =
    new BlockingRpcCallback&lt;BulkDeleteResponse&gt;();

  public BulkDeleteResponse call(BulkDeleteService service) throws IOException {
    Builder builder = BulkDeleteRequest.newBuilder();
    builder.setScan(ProtobufUtil.toScan(scan));
    builder.setDeleteType(DeleteType.VERSION);
    builder.setRowBatchSize(rowBatchSize);
    // Set optional timestamp if needed
    builder.setTimestamp(timeStamp);
    service.delete(controller, builder.build(), rpcCallback);
    return rpcCallback.get();
  }
};
Map&lt;byte[], BulkDeleteResponse&gt; result = ht.coprocessorService(BulkDeleteService.class,
 scan.getStartRow(), scan.getStopRow(), callable);
for (BulkDeleteResponse response : result.values()) {
  noOfDeletedRows += response.getRowsDeleted();
}
</code>
</pre>
hbase-examples/src/main/java/org/apache/hadoop/hbase/coprocessor/example/BulkDeleteEndpoint.java