我试图在bigtable中使用hbase orm(我正在bigtable模拟器上运行代码)。我一直有个例外:
org.apache.hadoop.hbase.DoNotRetryIOException: Failed to perform operation. Operation='put', projectId='projectId', tableName='citizens', rowKey='IND|1'
at com.google.cloud.bigtable.hbase.AbstractBigtableTable.logAndCreateIOException(AbstractBigtableTable.java:541)
at com.google.cloud.bigtable.hbase.AbstractBigtableTable.mutateRow(AbstractBigtableTable.java:478)
at com.google.cloud.bigtable.hbase.AbstractBigtableTable.put(AbstractBigtableTable.java:342)
at com.flipkart.hbaseobjectmapper.AbstractHBDAO.persist(AbstractHBDAO.java:627)
at Main.main(Main.java:10)
Caused by: io.grpc.StatusRuntimeException: INVALID_ARGUMENT: When parsing 'projects/projectId/instances/instanceId/tables/citizens' : Table name expected in the form 'projects/<project_id>/instances/<instance_id>/tables/<table_id>'.
at io.grpc.Status.asRuntimeException(Status.java:524)
at com.google.cloud.bigtable.grpc.async.AbstractRetryingOperation.getBlockingResult(AbstractRetryingOperation.java:449)
at com.google.cloud.bigtable.grpc.BigtableDataGrpcClient.mutateRow(BigtableDataGrpcClient.java:242)
at com.google.cloud.bigtable.grpc.BigtableDataClientWrapper.mutateRow(BigtableDataClientWrapper.java:70)
at com.google.cloud.bigtable.hbase.AbstractBigtableTable.mutateRow(AbstractBigtableTable.java:475)
... 3 more
下面是record类:
import com.flipkart.hbaseobjectmapper.*;
import com.flipkart.hbaseobjectmapper.codec.BestSuitCodec;
import java.util.Map;
import java.util.NavigableMap;
@HBTable(name = "citizens",
families = {
@Family(name = "main"),
@Family(name = "optional", versions = 3),
@Family(name = "tracked", versions = 10)
}
)
public class Citizen implements HBRecord<String> {
public Citizen() {
}
public Citizen(String countryCode, Integer uid, String name, Short age, Integer sal, Long counter) {
this.countryCode = countryCode;
this.uid = uid;
this.name = name;
this.age = age;
this.sal = sal;
this.counter = counter;
}
@HBRowKey
private String countryCode;
@HBRowKey
private Integer uid;
@HBColumn(family = "main", column = "name")
private String name;
@HBColumn(family = "optional", column = "age")
private Short age;
@HBColumn(family = "optional", column = "salary")
private Integer sal;
@HBColumn(family = "optional", column = "counter")
private Long counter;
@HBColumn(family = "optional", column = "custom_details")
private Map<String, Integer> customDetails;
@HBColumnMultiVersion(family = "tracked", column = "phone_number")
private NavigableMap<Long, Integer> phoneNumber;
@HBColumn(family = "optional", column = "pincode", codecFlags = {
@Flag(name = BestSuitCodec.SERIALIZE_AS_STRING, value = "true")
})
private Integer pincode;
@Override
public String composeRowKey() {
return String.format("%s|%d", countryCode, uid);
}
@Override
public void parseRowKey(String rowKey) {
String[] pieces = rowKey.split("|");
this.countryCode = pieces[0];
this.uid = Integer.parseInt(pieces[1]);
}
public String getCountryCode() {
return countryCode;
}
public void setCountryCode(String countryCode) {
this.countryCode = countryCode;
}
public Integer getUid() {
return uid;
}
public void setUid(Integer uid) {
this.uid = uid;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public Short getAge() {
return age;
}
public void setAge(Short age) {
this.age = age;
}
public Integer getSal() {
return sal;
}
public void setSal(Integer sal) {
this.sal = sal;
}
public Long getCounter() {
return counter;
}
public void setCounter(Long counter) {
this.counter = counter;
}
public Map<String, Integer> getCustomDetails() {
return customDetails;
}
public void setCustomDetails(Map<String, Integer> customDetails) {
this.customDetails = customDetails;
}
public NavigableMap<Long, Integer> getPhoneNumber() {
return phoneNumber;
}
public void setPhoneNumber(NavigableMap<Long, Integer> phoneNumber) {
this.phoneNumber = phoneNumber;
}
public Integer getPincode() {
return pincode;
}
public void setPincode(Integer pincode) {
this.pincode = pincode;
}
}
这里是道类:
import com.flipkart.hbaseobjectmapper.AbstractHBDAO;
import org.apache.hadoop.hbase.client.Connection;
import java.io.IOException;
public class CitizenDAO extends AbstractHBDAO<String, Citizen> {
public CitizenDAO(Connection connection) throws IOException {
super(connection);
}
}
以下是主要课程:
import com.google.cloud.bigtable.hbase.BigtableConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import java.io.IOException;
public class Main {
public static void main(String[] args) {
try (Connection connection = BigtableConfiguration.connect("projectId", "instanceId")) {
CitizenDAO citizenDao = new CitizenDAO(connection);
String rowKey = citizenDao.persist(new Citizen("IND", 1, "Suhaib", (short) 5, 15, 155L));
System.out.println(rowKey);
} catch (IOException e) {
e.printStackTrace();
}
}
}
有什么建议可以解决这个问题吗?我不知道我是否能在bigtable中使用hbase orm,因为我是bigtable和hbase的初学者。谢谢。
1条答案
按热度按时间dgenwo3n1#
我自己找到了解决方案,问题是连接到bigtable emulator的方式不对这里是正确的方式: