Java APIを使用して、Hbaseサーバーに接続しようとしました。テーブルへの最初の接続を取得している間、それは置く、スキャンするまたはgetoperationsにかかわらず600ミリ秒より多くかかりました。Java APIを使用してHBaseにアクセスすると、最初の接続は非常に遅いです。それは普通ですか?
その後の接続では、10ms未満でした。なぜ最初に接続するための巨大な遅延がありますか?
最初の接続にorg.apache.hadoop.hbase.client.HTableまたはorg.apache.hadoop.hbase.client.ConnectionFactoryを使用するかどうかは、後続の接続に比べて時間がかかりました。それは普通ですか?
以下は、私が使用したサンプルコードです。
package sample;
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.client.Table;
import org.apache.hadoop.hbase.util.Bytes;
public class InsertData {
private static String TABLE_NAME = "DATA";
private static Long Id = 2222L;
private static String COLUMN_FAMILY = "CF”;
public static void main(String[] args) throws IOException {
for (int j = 0; j < 2; j++) {
Configuration config = HBaseConfiguration.create();
File folder = new File(“filename”);
File[] listOfFiles = folder.listFiles();
for (int i = 0; i < listOfFiles.length; i++) {
if (listOfFiles[i].isFile()) {
String fileName = listOfFiles[i].getName();
String[] fileSplit = fileName.split("_");
byte[] content = readContentIntoByteArray(new File(fileName));
long startTime = System.currentTimeMillis();
Connection connection = ConnectionFactory.createConnection(config);
Table hTable = connection.getTable(TableName.valueOf(TABLE_NAME));
Put put = new Put(Bytes.toBytes(Id + "_" + fileSplit[0]));
put.addColumn(Bytes.toBytes(COLUMN_FAMILY), Bytes.toBytes(fileSplit[1].substring(0, fileSplit[1].indexOf("."))), content);
HTable.validatePut(put, 10000000);
hTable.put(put);
System.out.println(System.currentTimeMillis() - startTime);
System.out.println("data inserted " + content.length + " filename " + fileName);
hTable.close();
connection.close();
}
}
}
}
private static byte[] readContentIntoByteArray(File file) {
FileInputStream fileInputStream = null;
byte[] bFile = new byte[(int) file.length()];
try {
// convert file into array of bytes
fileInputStream = new FileInputStream(file);
fileInputStream.read(bFile);
fileInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
return bFile;
}
}
出力:
732
data inserted 14562 filename 15003_15005.txt
8
data inserted 14968 filename 15033_15035.txt
9
data inserted 14968 filename 16003_16005.txt
8
data inserted 24330 filename 16003_16061.txt
9
data inserted 3642 filename 16003_16082.txt
8
data inserted 119544 filename 16033_16035.txt
9
data inserted 14562 filename 15003_15005.txt
8
data inserted 14968 filename 15033_15035.txt
9
data inserted 14968 filename 16003_16005.txt
8
data inserted 24330 filename 16003_16061.txt
9
data inserted 3642 filename 16003_16082.txt
8
data inserted 119544 filename 16033_16035.txt
、それは最初の接続のためのより多くの時間を要した理由を私に教えてください?あなたが最初にデータベースに接続するときには、確かに正常であり、事前