人の顔は、どこに行くに愛を知らないと愛されます。
DataX
それは広くなど、オフラインデータ同期Alibabaのツール/プラットフォームで使用されMySQL
、Oracle
、SqlServer
、Postgre
、HDFS
、Hive
、ADS
、HBase
、TableStore(OTS)
、MaxCompute(ODPS)
、DRDS
および様々な異種データソースとの間の他の効率的なデータの同期。
最適化
次のように最適化:
デフォルトHbaseAbstractTask
。startWriter
メソッド
public void startWriter(RecordReceiver lineReceiver,TaskPluginCollector taskPluginCollector){
Record record;
try {
while ((record = lineReceiver.getFromReader()) != null) {
Put put;
try {
put = convertRecordToPut(record);
} catch (Exception e) {
taskPluginCollector.collectDirtyRecord(record, e);
continue;
}
try {
this.htable.put(put);
} catch (IllegalArgumentException e) {
if(e.getMessage().equals("No columns to insert") && nullMode.equals(NullModeType.Skip)){
LOG.info(String.format("record is empty, 您配置nullMode为[skip],将会忽略这条记录,record[%s]", record.toString()));
continue;
}else {
taskPluginCollector.collectDirtyRecord(record, e);
continue;
}
}
}
}catch (IOException e){
throw DataXException.asDataXException(Hbase094xWriterErrorCode.PUT_HBASE_ERROR,e);
}finally {
Hbase094xHelper.closeTable(this.htable);
}
}
复制代码
hbase
htable
api
サポートputList
次のように方法は、上記コードが修正されます。
public void startWriter(RecordReceiver lineReceiver,TaskPluginCollector taskPluginCollector){
Record record;
List<Put> putList = new ArrayList<>(2000);
Long begin = System.currentTimeMillis();
try {
while ((record = lineReceiver.getFromReader()) != null) {
Put put;
try {
put = convertRecordToPut(record);
} catch (Exception e) {
taskPluginCollector.collectDirtyRecord(record, e);
continue;
}
putList.add(put);
try {
if (putList.size() % 2000 == 0 || System.currentTimeMillis() - begin > 200) {
this.asyncTable.put(putList);
putList.clear();
begin = System.currentTimeMillis();
}
} catch (IllegalArgumentException e) {
if (e.getMessage().equals("No columns to insert") && nullMode.equals(NullModeType.Skip)) {
LOG.info(String.format("record is empty, 您配置nullMode为[skip],将会忽略这条记录,record[%s]", record.toString()));
continue;
} else {
taskPluginCollector.collectDirtyRecord(record, e);
continue;
}
}
}
} finally {
Hbase20xHelper.closeConn(future);
}
}
复制代码
変更要求を減らす、2000年、レコードごとに一度提出しました。
概要
あなたが使用している場合はwriter
提出をサポートバッチを、また、上記に応じて変更することができます