【发布时间】:2016-04-06 12:25:34
【问题描述】:
我一直坚持通过简单的 java 客户端连接到 hbase 1.0.3。 程序挂在:
[main] zookeeper.ZooKeeper: Initiating client connection, connectString=127.0.0.1:2181 sessionTimeout=90000 watcher=hconnection-0x1e67b8720x0, quorum=127.0.0.1:2181, baseZNode=/hbaseenter code here
[main-SendThread(127.0.0.1:2181)] zookeeper.ClientCnxn: Opening socket connection to server 127.0.0.1/127.0.0.1:2181. Will not attempt to authenticate using SASL (unknown error)
[main-SendThread(127.0.0.1:2181)] zookeeper.ClientCnxn: Socket connection established to 127.0.0.1/127.0.0.1:2181, initiating session
[main-SendThread(127.0.0.1:2181)] zookeeper.ClientCnxn: Session establishment complete on server 127.0.0.1/127.0.0.1:2181, sessionid = 0x153d8383c530008, negotiated timeout = 40000
代码很简单:
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.Result;
import org.apache.hadoop.hbase.client.ResultScanner;
import org.apache.hadoop.hbase.client.Scan;
import org.apache.hadoop.hbase.client.Table;
public class ScanAllTables {
public static void main(String args[]) throws IOException{
// Instantiating Configuration class
Configuration config = HBaseConfiguration.create();
System.out.println(config.get("hbase.rootdir"));
System.out.println(config.get("hbase.zookeeper.property.dataDir"));
System.out.println(config.get("hbase.zookeeper.quorum"));
System.out.println(config.get("hbase.zookeeper.property.clientPort"));
Connection connection = ConnectionFactory.createConnection(config);
//System.out.println(connection);
// Instantiating Table class
Table table = connection.getTable(TableName.valueOf(HBaseTables.APPLICATION_TRACE_INDEX));
//System.out.println(table.getName());
// Instantiating the Scan class
Scan scan = new Scan();
// Scanning the required columns
//scan.addFamily(HBaseTables.APPLICATION_TRACE_INDEX_CF_TRACE);
//scan.setId("ApplicationTraceIndexScan");
// Getting the scan result
ResultScanner scanner = table.getScanner(scan);
// Reading values from scan result
for (Result result = scanner.next(); result != null; result = scanner.next()) {
System.out.println("Found row : " + result);
}
//closing the scanner
scanner.close();
table.close();
connection.close();
}
}
我使用的罐子是:
commons-collections-3.2.1.jar
commons-configuration-1.6.jar
commons-lang-2.6.jar
commons-logging-1.2.jar
guava-12.0.1.jar
hadoop-auth-2.5.1.jar
hadoop-client-2.5.1.jar
hadoop-common-2.5.1.jar
hbase-client-1.0.3.jar
hbase-common-1.0.3.jar
hbase-hadoop-compat-1.0.3.jar
hbase-hadoop2-compat-1.0.3.jar
hbase-it-1.0.3.jar
hbase-protocol-1.0.3.jar
hbase-resource-bundle-1.0.3.jar
hbase-rest-1.0.3.jar
htrace-core-3.0.4.jar
htrace-core-3.1.0-incubating.jar
log4j-1.2.17.jar
netty-3.2.4.Final.jar
netty-all-4.0.23.Final.jar
protobuf-java-2.5.0.jar
slf4j-api-1.7.7.jar
slf4j-log4j12-1.7.7.jar
zookeeper-3.4.6.jar
我的 hbase-site.xml 是
<configuration>
<property>
<name>hbase.rootdir</name>
<value>file:///path/to/data/hbase</value>
</property>
<property>
<name>hbase.zookeeper.property.dataDir</name>
<value>file:///path/to/data/zookeeper</value>
</property>
<property>
<name>hbase.zookeeper.quorum</name>
<value>127.0.0.1</value>
</property>
</configuration>
在我的主机中,我有这个条目: 127.0.0.1 localhost.localdomain 本地主机 Sachin-PC
在 hbase regionservers 中也有 localhost 我已经为 hbase.zookeeper.quorum 尝试了许多选项,例如 localhost、Sachin-PC,但都没有成功。
另请注意,我使用的 jar 在 hbase lib 中是相同版本的。
我只是无法理解是什么原因导致无法扫描表以查找此简单代码。
注意代码停在 ResultScannerscanner = table.getScanner(scan); 所以连接正在发生,但它没有得到任何数据。
请帮忙!
谢谢 萨钦
ps:
DEBUG [hconnection-0x1e67b872-shared--pool1-t1] ipc.AbstractRpcClient: Use SIMPLE authentication for service ClientService, sasl=false
DEBUG [hconnection-0x1e67b872-shared--pool1-t1] ipc.AbstractRpcClient: Connecting to Sachin-PC/127.0.0.1:55161
DEBUG [hconnection-0x1e67b872-shared--pool1-t1] ipc.AbstractRpcClient: Use SIMPLE authentication for service ClientService, sasl=false
DEBUG [hconnection-0x1e67b872-shared--pool1-t1] ipc.AbstractRpcClient: Not trying to connect to Sachin-PC/127.0.0.1:55161 this server is in the failed servers list
请查看这些额外的日志: 正如我们所看到的,连接发生了,并且还获取了区域位置详细信息。 但是当它尝试连接到该区域以实际获取表扫描详细信息时,我们会收到套接字关闭错误,然后将其添加到失败的服务器列表中。这个过程一次又一次地重复,因此这个过程被卡住了。
[main-EventThread] zookeeper.ZooKeeperWatcher: hconnection-0x1e67b872-0x153e135af570008 connected
[main] client.ZooKeeperRegistry: Looking up meta region location in ZK, connection=org.apache.hadoop.hbase.client.ZooKeeperRegistry@69b794e2
[main] client.ZooKeeperRegistry: Looked up meta region location, connection=org.apache.hadoop.hbase.client.ZooKeeperRegistry@69b794e2; serverName=sachin-pc,55964,1459772310378
[main] client.MetaCache: Cached location: [region=hbase:meta,,1.1588230740, hostname=sachin-pc,55964,1459772310378, seqNum=0]
[hconnection-0x1e67b872-shared--pool1-t1] ipc.AbstractRpcClient: Connecting to Sachin-PC/127.0.0.1:55964
java.net.SocketException: Socket is closed
at sun.nio.ch.SocketAdaptor.getOutputStream(Unknown Source)
at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection.closeConnection(RpcClientImpl.java:429)
at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection.handleConnectionFailure(RpcClientImpl.java:477)
java.net.SocketException: Socket is closed
at sun.nio.ch.SocketAdaptor.getInputStream(Unknown Source)
at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection.closeConnection(RpcClientImpl.java:436)
at org.apache.hadoop.hbase.ipc.RpcClientImpl$Connection.handleConnectionFailure(RpcClientImpl.java:477)
[hconnection-0x1e67b872-shared--pool1-t1] ipc.AbstractRpcClient: IPC Client (1890187342) connection to Sachin-PC/127.0.0.1:55964 from Sachin: marking at should close, reason: Connection refused: no further information
【问题讨论】:
-
请注意,通过 Hbase shell 一切正常。
-
经过更多调试后,我发现:当通过 Web UI 连接到 Master 时,我看到服务器名称为:sachin-pc,60737,1459782043122 现在在日志中我看到与 Sachin-PC/ 的连接127.0.0.1:60737 失败。同样在 netstat 上,有时我会看到 TCP 192.168.1.102:60737 Sachin-PC:0 LISTENING 但大多数时候我什么也看不到。这意味着区域服务器失败了很多,它正在侦听 PC IP 地址 192.168.1.102 而不是 localhost 127.0.0.1 也许这也导致了问题。
标签: java database-connection hbase