public void insert(Table table, Put put, long keyBase) {
      long start = EnvironmentEdgeManager.currentTime();
      try {
        put = (Put) dataGenerator.beforeMutate(keyBase, put);
        table.put(put);
        totalOpTimeMs.addAndGet(EnvironmentEdgeManager.currentTime() - start);
      } catch (IOException e) {
        failedKeySet.add(keyBase);
        String exceptionInfo;
        if (e instanceof RetriesExhaustedWithDetailsException) {
          RetriesExhaustedWithDetailsException aggEx = (RetriesExhaustedWithDetailsException) e;
          exceptionInfo = aggEx.getExhaustiveDescription();
        } else {
          StringWriter stackWriter = new StringWriter();
          PrintWriter pw = new PrintWriter(stackWriter);
          e.printStackTrace(pw);
          pw.flush();
          exceptionInfo = StringUtils.stringifyException(e);
        }
        LOG.error("Failed to insert: " + keyBase + " after "
          + (EnvironmentEdgeManager.currentTime() - start) + "ms; region information: "
          + getRegionDebugInfoSafe(table, put.getRow()) + "; errors: " + exceptionInfo);
      }
    }
Use multi-puts vs. separate puts for every column in a row
hbase-diagnostics/src/main/java/org/apache/hadoop/hbase/util/MultiThreadedWriter.java