Java API 到 HBase exception:cannot 获取位置
Java API to HBase exception:cannot get location
我正在尝试使用 JAVA API 连接到 HBase。
我的代码如下所示:
public class Test {
public static void main(String[] args) throws IOException{
TableName tableName = TableName.valueOf("TABLE2");
Configuration conf = HBaseConfiguration.create();
conf.set("zookeeper.znode.parent", "/hbase-secure");
conf.set("hbase.zookeeper.property.clientPort", "2181");
conf.set("hbase.zookeeper.quorum", "xxxxxxxxxxxxxx");
conf.set("hbase.master", "xxxxxxxxxxxxx");
Connection conn = ConnectionFactory.createConnection(conf);
Admin admin = conn.getAdmin();
System.out.println(admin.toString());
if(!admin.tableExists(tableName)){
admin.createTable(new HTableDescriptor(tableName).addFamily(new HColumnDescriptor("cf")));
}
Table table = conn.getTable(tableName);
Put p = new Put(Bytes.toBytes("AAPL10232015"));
p.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("close"), Bytes.toBytes(119));
table.put(p);
Result r = table.get(new Get(Bytes.toBytes("AAPL10232015")));
System.out.println(r);
}
}
当我在集群中 运行 这个程序时,出现异常:
我 运行 这个并得到以下错误:
Exception in thread "main" org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the locations
at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.getRegionLocations(RpcRetryingCallerWithReadReplicas.java:312)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:151)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:59)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200)
at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:320)
at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:295)
at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:160)
at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:155)
at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:821)
at org.apache.hadoop.hbase.MetaTableAccessor.fullScan(MetaTableAccessor.java:602)
at org.apache.hadoop.hbase.MetaTableAccessor.tableExists(MetaTableAccessor.java:366)
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:303)
at java2hbase.Test.main(Test.java:31)
我运行这在HDP集群中,异常发生在hbaseAdmin实例化之后。 JAVA 客户端似乎无法使用zookeeper 连接到Hbase,但我可以使用命令"hbase zkcli" 打开shell 成功。
有谁知道有什么问题吗?有什么办法可以检查 zookeeper 好不好?感谢任何帮助。
这似乎是集群的问题。您能否确保 HBase 运行良好并且所有区域服务器都已启动并且 运行?
请打开shell并先列出表格以确保基本检查..
另外,检查是否有任何版本不匹配的罐子。
如果您 运行 来自下面的群集,请务必采用射击方法以避免任何意外。
Configuration conf = HBaseConfiguration.create();
conf.addResource("core-site.xml");
conf.addResource("hbase-site.xml");
conf.addResource("hdfs-site.xml");
还要检查您是 运行 java 客户
# export HADOOP_CLASSPATH=`./hbase classpath`
我认为这可能是因为升级集群时 API 已弃用。
建议使用org.apache.hadoop.hbase.client.Connection连接Hbase表
Connection 对象封装了较低级别的与实际服务器的连接以及与 zookeeper 的连接。
连接通过org.apache.hadoop.hbase.client.Connection工厂class实例化。
连接可以创建为:
this.configuration = HBaseConfiguration.create();
try {
connection = ConnectionFactory.createConnection(configuration);
} catch (IOException e) {
logger.error("Exception Occured While Creating Connection:" +
e.getMessage());
}
Table句柄可以获取为:
table = connection.getTable(TableName.valueOf(queryTable));
我早些时候也遇到了同样的错误
conf.set("hbase.zookeeper.quorum", "XXXX.XXXX.XXXX.XXXX.XXXX.XXXX");
conf.set("hbase.zookeeper.quorum", "XXXX.XXXX.XXXX.XXXX.XXXX.XXXX");
conf.set("hbase.zookeeper.quorum", "XXXX.XXXX.XXXX.XXXX.XXXX.XXXX");
我改成:
conf.set("zookeeper.znode.parent", "/hbase-secure");
conf.set("hbase.zookeeper.property.clientPort", "2181");
conf.set("hbase.zookeeper.quorum", "XXXX.XXXX.XXXX.XXXX.XXXX.XXXX");
conf.set("hbase.zookeeper.quorum", "XXXX.XXXX.XXXX.XXXX.XXXX.XXXX");
conf.set("hbase.zookeeper.quorum", "XXXX.XXXX.XXXX.XXXX.XXXX.XXXX");
现在可以了。
我正在尝试使用 JAVA API 连接到 HBase。 我的代码如下所示:
public class Test {
public static void main(String[] args) throws IOException{
TableName tableName = TableName.valueOf("TABLE2");
Configuration conf = HBaseConfiguration.create();
conf.set("zookeeper.znode.parent", "/hbase-secure");
conf.set("hbase.zookeeper.property.clientPort", "2181");
conf.set("hbase.zookeeper.quorum", "xxxxxxxxxxxxxx");
conf.set("hbase.master", "xxxxxxxxxxxxx");
Connection conn = ConnectionFactory.createConnection(conf);
Admin admin = conn.getAdmin();
System.out.println(admin.toString());
if(!admin.tableExists(tableName)){
admin.createTable(new HTableDescriptor(tableName).addFamily(new HColumnDescriptor("cf")));
}
Table table = conn.getTable(tableName);
Put p = new Put(Bytes.toBytes("AAPL10232015"));
p.addColumn(Bytes.toBytes("cf"), Bytes.toBytes("close"), Bytes.toBytes(119));
table.put(p);
Result r = table.get(new Get(Bytes.toBytes("AAPL10232015")));
System.out.println(r);
}
}
当我在集群中 运行 这个程序时,出现异常: 我 运行 这个并得到以下错误:
Exception in thread "main" org.apache.hadoop.hbase.client.RetriesExhaustedException: Can't get the locations
at org.apache.hadoop.hbase.client.RpcRetryingCallerWithReadReplicas.getRegionLocations(RpcRetryingCallerWithReadReplicas.java:312)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:151)
at org.apache.hadoop.hbase.client.ScannerCallableWithReplicas.call(ScannerCallableWithReplicas.java:59)
at org.apache.hadoop.hbase.client.RpcRetryingCaller.callWithoutRetries(RpcRetryingCaller.java:200)
at org.apache.hadoop.hbase.client.ClientScanner.call(ClientScanner.java:320)
at org.apache.hadoop.hbase.client.ClientScanner.nextScanner(ClientScanner.java:295)
at org.apache.hadoop.hbase.client.ClientScanner.initializeScannerInConstruction(ClientScanner.java:160)
at org.apache.hadoop.hbase.client.ClientScanner.<init>(ClientScanner.java:155)
at org.apache.hadoop.hbase.client.HTable.getScanner(HTable.java:821)
at org.apache.hadoop.hbase.MetaTableAccessor.fullScan(MetaTableAccessor.java:602)
at org.apache.hadoop.hbase.MetaTableAccessor.tableExists(MetaTableAccessor.java:366)
at org.apache.hadoop.hbase.client.HBaseAdmin.tableExists(HBaseAdmin.java:303)
at java2hbase.Test.main(Test.java:31)
我运行这在HDP集群中,异常发生在hbaseAdmin实例化之后。 JAVA 客户端似乎无法使用zookeeper 连接到Hbase,但我可以使用命令"hbase zkcli" 打开shell 成功。
有谁知道有什么问题吗?有什么办法可以检查 zookeeper 好不好?感谢任何帮助。
这似乎是集群的问题。您能否确保 HBase 运行良好并且所有区域服务器都已启动并且 运行?
请打开shell并先列出表格以确保基本检查.. 另外,检查是否有任何版本不匹配的罐子。
如果您 运行 来自下面的群集,请务必采用射击方法以避免任何意外。
Configuration conf = HBaseConfiguration.create();
conf.addResource("core-site.xml");
conf.addResource("hbase-site.xml");
conf.addResource("hdfs-site.xml");
还要检查您是 运行 java 客户
# export HADOOP_CLASSPATH=`./hbase classpath`
我认为这可能是因为升级集群时 API 已弃用。
建议使用org.apache.hadoop.hbase.client.Connection连接Hbase表
Connection 对象封装了较低级别的与实际服务器的连接以及与 zookeeper 的连接。
连接通过org.apache.hadoop.hbase.client.Connection工厂class实例化。
连接可以创建为: this.configuration = HBaseConfiguration.create();
try {
connection = ConnectionFactory.createConnection(configuration);
} catch (IOException e) {
logger.error("Exception Occured While Creating Connection:" +
e.getMessage());
}
Table句柄可以获取为:
table = connection.getTable(TableName.valueOf(queryTable));
我早些时候也遇到了同样的错误
conf.set("hbase.zookeeper.quorum", "XXXX.XXXX.XXXX.XXXX.XXXX.XXXX");
conf.set("hbase.zookeeper.quorum", "XXXX.XXXX.XXXX.XXXX.XXXX.XXXX");
conf.set("hbase.zookeeper.quorum", "XXXX.XXXX.XXXX.XXXX.XXXX.XXXX");
我改成:
conf.set("zookeeper.znode.parent", "/hbase-secure");
conf.set("hbase.zookeeper.property.clientPort", "2181");
conf.set("hbase.zookeeper.quorum", "XXXX.XXXX.XXXX.XXXX.XXXX.XXXX");
conf.set("hbase.zookeeper.quorum", "XXXX.XXXX.XXXX.XXXX.XXXX.XXXX");
conf.set("hbase.zookeeper.quorum", "XXXX.XXXX.XXXX.XXXX.XXXX.XXXX");
现在可以了。