好久没搭起来测测了,今天顺手搭起来用用。结果遇到了很多问题,下面一一说明
一、部署
简单起见,我使用了stand-alone模式。直接下载解压即可,注意的是需要改动hbase-site.xml:
hbase.rootdir file:///root/zhangtieying/hbase hbase.zookeeper.property.dataDir /root/zhangtieying/zookeeper
另外,注意修改/etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4 10.1.102.104 ccf04 10.20.14.16 dt16 10.20.14.17 dt17 10.20.14.18 dt18 10.20.14.19 dt19 10.20.14.20 dt20 10.20.14.21 dt21 10.20.14.22 dt22 10.20.14.23 dt23 10.20.14.24 dt24 10.20.14.25 dt25
一定注意:ccf04为主机名,要和实际ip10.1.102.104对应上
ccf04添加为主机名的方法:vim /etc/sysconfig/network:
NETWORKING=yes HOSTNAME=ccf04
二、java客户端连接
这里给出我的测试代码(部分代码是copy的)
/**
* Created by Michael on 2015/6/20.
*/
import java.util.ArrayList;
import java.util.List;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.KeyValue;
import org.apache.hadoop.hbase.client.Delete;
import org.apache.hadoop.hbase.client.Get;
import org.apache.hadoop.hbase.client.HBaseAdmin;
import org.apache.hadoop.hbase.client.HTable;
import org.apache.hadoop.hbase.client.Put;
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.util.Bytes;
public class TestHbase {
static Configuration conf=null;
static{
conf=HBaseConfiguration.create();//hbase的配置信息
conf.set("hbase.zookeeper.quorum", "10.1.102.104:2181"); //zookeeper的地址
}
public static void main(String[] args)throws Exception {
TestHbase t=new TestHbase();
t.createTable("test-zty", new String[]{"name","age"});
//t.insertRow("test-zty", "2", "age", "myage", "100");
// t.getOneDataByRowKey("test-zty", "2");
//t.showAll("test");
}
/***
* 创建一张表
* 并指定列簇
* */
public void createTable(String tableName,String cols[])throws Exception{
HBaseAdmin admin=new HBaseAdmin(conf);//客户端管理工具类
if(admin.tableExists(tableName)){
System.out.println("此表已经存在.......");
}else{
HTableDescriptor table=new HTableDescriptor(tableName);
for(String c:cols){
HColumnDescriptor col=new HColumnDescriptor(c);//列簇名
table.addFamily(col);//添加到此表中
}
admin.createTable(table);//创建一个表
admin.close();
System.out.println("创建表成功!");
}
}
/**
* 添加数据,
* 建议使用批量添加
* @param tableName 表名
* @param row 行号
* @param columnFamily 列簇
* @param column 列
* @param value 具体的值
*
* **/
public void insertRow(String tableName, String row,
String columnFamily, String column, String value) throws Exception {
HTable table = new HTable(conf, tableName);
Put put = new Put(Bytes.toBytes(row));
// 参数出分别:列族、列、值
put.add(Bytes.toBytes(columnFamily), Bytes.toBytes(column),
Bytes.toBytes(value));
table.put(put);
table.close();//关闭
System.out.println("插入一条数据成功!");
}
/**
* 删除一条数据
* @param tableName 表名
* @param row rowkey
* **/
public void deleteByRow(String tableName,String rowkey)throws Exception{
HTable h=new HTable(conf, tableName);
Delete d=new Delete(Bytes.toBytes(rowkey));
h.delete(d);//删除一条数据
h.close();
}
/**
* 删除多条数据
* @param tableName 表名
* @param row rowkey
* **/
publ