欢迎投稿

今日深度:

重温HBaes部署与java客户端访问,重温hbaes部署ja

重温HBaes部署与java客户端访问,重温hbaes部署java


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

一、部署

简单起见,我使用了stand-alone模式。直接下载解压即可,注意的是需要改动hbase-site.xml:

<configuration>
        <property>
                <name>hbase.rootdir</name>
                <value>file:///root/zhangtieying/hbase</value>
        </property>
        <property>
                <name>hbase.zookeeper.property.dataDir</name>
                <value>/root/zhangtieying/zookeeper</value>
        </property>
</configuration>

另外,注意修改/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
     * **/
    public void deleteByRow(String tableName,String rowkey[])throws Exception{
        HTable h=new HTable(conf, tableName);

        List<Delete> list=new ArrayList<Delete>();
        for(String k:rowkey){
            Delete d=new Delete(Bytes.toBytes(k));
            list.add(d);
        }
        h.delete(list);//删除
        h.close();//释放资源
    }

    /**
     * 得到一条数据
     *
     * @param tableName 表名
     * @param rowkey 行号
     * ***/
    public void getOneDataByRowKey(String tableName,String rowkey)throws Exception{
        HTable h=new HTable(conf, tableName);

        Get g=new Get(Bytes.toBytes(rowkey));
        Result r=h.get(g);
        for(KeyValue k:r.raw()){

            System.out.println("行号:  "+Bytes.toStringBinary(k.getRow()));
            System.out.println("时间戳:  "+k.getTimestamp());
            System.out.println("列簇:  "+Bytes.toStringBinary(k.getFamily()));
            System.out.println("列:  "+Bytes.toStringBinary(k.getQualifier()));
            //if(Bytes.toStringBinary(k.getQualifier()).equals("myage")){
            //  System.out.println("值:  "+Bytes.toInt(k.getValue()));
            //}else{
            String ss=  Bytes.toString(k.getValue());
            System.out.println("值:  "+ss);
            //}



        }
        h.close();
    }

    /**
     * 扫描所有数据或特定数据
     * @param tableName
     * **/
    public void showAll(String tableName)throws Exception{

        HTable h=new HTable(conf, tableName);

        Scan scan=new Scan();
        //扫描特定区间
        //Scan scan=new Scan(Bytes.toBytes("开始行号"),Bytes.toBytes("结束行号"));
        ResultScanner scanner=h.getScanner(scan);
        for(Result r:scanner){
            System.out.println("==================================");
            for(KeyValue k:r.raw()){

                System.out.println("行号:  "+Bytes.toStringBinary(k.getRow()));
                System.out.println("时间戳:  "+k.getTimestamp());
                System.out.println("列簇:  "+Bytes.toStringBinary(k.getFamily()));
                System.out.println("列:  "+Bytes.toStringBinary(k.getQualifier()));
                //if(Bytes.toStringBinary(k.getQualifier()).equals("myage")){
                //  System.out.println("值:  "+Bytes.toInt(k.getValue()));
                //}else{
                String ss=  Bytes.toString(k.getValue());
                System.out.println("值:  "+ss);
                //}
            }
        }
        h.close();
    }
}

工程使用maven,其pom.xml如下:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="https://maven.apache.org/POM/4.0.0"
         xmlns:xsi="https://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="https://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.codesolid</groupId>
    <artifactId>HelloJUnit</artifactId>
    <version>1.0</version>

    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.11</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
            <scope>compile</scope>
        </dependency>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-core</artifactId>
            <version>1.0.4</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase</artifactId>
            <version>0.94.5</version>
        </dependency>
    </dependencies>

</project>


三、遇到的问题

This server is in the failed servers list: localhost/127.0.0.1:60718

出现该问题的原因是没有在服务端配置主机名和真实ip的映射,因此需要再/etc/hosts中加上10.1.102.104 ccf04(ccf04为服务器的主机名)

同时,需要在你跑程序的机器上添加ccf04的映射,我的是在windows上跑的java程序,需要修改windows的host文件,最后一行加入10.1.102.104 ccf04即可

www.htsjk.Com true http://www.htsjk.com/sybase/19871.html NewsArticle 重温HBaes部署与java客户端访问,重温hbaes部署java 好久没搭起来测测了,今天顺手搭起来用用。结果遇到了很多问题,下面一一说明 一、部署 简单起见,我使用了stand-alone模式。直接下...
评论暂时关闭