Mit der Java-API habe ich versucht, den Hbase-Server zu verbinden. Während der ersten Verbindung mit der Tabelle dauerte es mehr als 600ms, unabhängig von den Operationen put, scan oder get.Zugriff auf HBase mit Java-API, die erste Verbindung ist sehr langsam. Es ist normal?
Für die nachfolgende Verbindung dauerte es weniger als 10 ms. Warum gibt es große Verzögerung für die erste Verbindung.
Ob ich org.apache.hadoop.hbase.client.HTable oder org.apache.hadoop.hbase.client.ConnectionFactory für die erste Verbindung verwende, dauerte es mehr Zeit im Vergleich zur nachfolgenden Verbindung. Es ist normal?
Unten ist Beispielcode, den ich verwendet habe.
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;
}
}
Ausgang:
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
Sie mir bitte erklären, warum es für die erste Verbindung mehr Zeit in Anspruch nahm?
Vielen Dank im Voraus