首先我的hadoop集群,zookeeper集群都是正常的工作的,启动hbase后,在linux上都是正常工作的,建表都是可以的,因此错误只能出在java程序上,这是我的测试程序:
public class HbaseTest {
private HBaseAdmin admin;
HConnection connection;
/**
* 执行Test之前执行的代码块
*/
@Before
public void init() {
Configuration conf = new Configuration();
conf.set("hbase.zookeeper.quorum", "master:2181,192.168.147.201:2181,192.168.147.202:2181");
try {
/**
* 创建admin对象,和HMaster建立连接,执行创建,删除,修改表的操作
*
*/
admin = new HBaseAdmin(conf);
//创建zookeeper连接
connection = HConnectionManager.createConnection(conf);
} catch (IOException e) {
e.printStackTrace();
}
}
@Test
public void createTable() {
try {
//创建表的描述对象
HTableDescriptor tableDescriptor = new HTableDescriptor("student1");
//增加列簇
HColumnDescriptor columnDescriptor = new HColumnDescriptor("info");
//设置列簇的版本数量
columnDescriptor.setMaxVersions(5);
tableDescriptor.addFamily(columnDescriptor);
//判断表是否存在
if (admin.tableExists("student1")) {
System.out.println("表已存在");
return;
}
//执行建表操作
admin.createTable(tableDescriptor);
//判断表是否存在
if (admin.tableExists("student1")) {
System.out.println("建表成功");
}
} catch (IOException e) {
e.printStackTrace();
}
}
@After
public void close() {
System.out.println("回收资源");
if (admin != null) {
try {
admin.close();
} catch (IOException e) {
e.printStackTrace();
}
}
if (connection != null) {
try {
connection.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
首先是本地的DNS服务,我已经配置了192.168.147.200 master了,但是node1,node2都没有配,我就直接使用它们的ip地址,这样觉得应该没有问题了,但是运行程序结果却是:
一直卡在这个地方,关闭程序重新运行还是这个问题,所以就debug了一下,发现好多问题。太多了就不贴了。
所以老老实实把window的本地DNS配好地址是:C:\Windows\System32\drivers\etc目录下的hosts---
然后把conf.set("hbase.zookeeper.quorum", "master:2181,192.168.147.201:2181,192.168.147.202:2181");
改成:conf.set("hbase.zookeeper.quorum", "master:2181,node1:2181,node2:2181");
在找资料的时候,发现了一篇比较有意思的文章,但感觉里面也只有几句有点意思,其他的都是也只能随便看看:https://blog.csdn.net/eff666/article/details/51997997
主机名反向连接这个问题还是挺有意思的