重温HBaes部署与java客户端访问(一)

2015-07-24 06:57:36 · 作者: · 浏览: 9

好久没搭起来测测了,今天顺手搭起来用用。结果遇到了很多问题,下面一一说明

一、部署

简单起见,我使用了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