重温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="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://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即可

时间: 2024-11-06 02:36:32

重温HBaes部署与java客户端访问的相关文章

Linux Samba目录服务搭建与Java客户端访问

前言: 本文比较简略,只求快速入门,若要了解详情,推荐一篇文章:http://www.cnblogs.com/mchina/archive/2012/12/18/2816717.html 1,安装samba(大部分linux上默认安装的可能不完整,建议重新安装) #检测是否安装,请注意不同安装包协议命令不尽相同#rpm -qa|grep samba #安装#yum install samba samba-client samba-swat 2,启动samba SMB服务 /etc/init.d/

从JAVA客户端访问Redis示例(入门)

转自:http://blog.csdn.net/kkdelta/article/details/7217761 本文记录了安装Redis和从JAVA端访问Redis的步骤 从http://download.csdn.net/detail/kkdelta/4034137 下载本文所需文件. 1,在Linux上安装Redis服务. 下面的操作的base dir为 /root/4setup tar xzf redis-2.4.6.tar cd redis-2.4.6 make 安装完后启动 nohup

kafka 2.12在linux下的安装部署及java客户端对接

一.下载kafka_2.12-2.4.0.tgz并解压至/home/kafka_2.12-2.4.0 二.配置kafka 2.1 创建kafka日志文件夹:/home/kafka_2.12-2.4.0/logs 2.2 创建zookeeper数据目录:/tmp/zookeeper 2.3 配置/home/kafka_2.12-2.4.0/config/server.properties   内容如下(SSL证书在下面介绍): ssl.keystore.location=/home/ca/serv

4 kafka集群部署及生产者java客户端编程 + kafka消费者java客户端编程

本博文的主要内容有   kafka的单机模式部署 kafka的分布式模式部署 生产者java客户端编程 消费者java客户端编程 运行kafka ,需要依赖 zookeeper,你可以使用已有的 zookeeper 集群或者利用 kafka自带的zookeeper. 单机模式,用的是kafka自带的zookeeper, 分布式模式,用的是外部安装的zookeeper,即公共的zookeeper. Step 6: Setting up a multi-broker cluster So far w

淘宝分布式 key/value 存储引擎Tair安装部署过程及Java客户端测试一例

目录 1. 简介 2. 安装步骤及问题小记 3. 部署配置 4. Java客户端测试 5. 参考资料 声明 1. 下面的安装部署基于Linux系统环境:centos 6(64位),其它Linux版本可能有所差异. 2. 网上有人说tair安装失败可能是因为gcc版本问题,高版本的gcc可能不支持某些特性导致安装失败,经过实验证明,该说法是错误的,tair安装失败有各种可能的原因但绝对与gcc版本无关,比如我的gcc开始版本为4.4.7,后来tair安装失败,我重新编译低版本的gcc(gcc4.1

Exchange Server 2013部署(三)邮箱角色和客户端访问角色安装

Exchange 2013的安装还是比较简单的:前面已经将安装Exchange Server 2013所要做的准备工作已经准备妥当,接下来就要开始正式安装了,我是将邮箱服务器角色和客户端访问角色分别部署,那接下来就先来安装邮箱服务器角色,插入光盘,运行"Setup",出现安装界面,这里我选择不检查更新,点击下一步: 进行文件复制 进行初始化设置 Introduction页选择下一步 协议许可界面勾选同意条款 选择自定义安装 勾选MailBox角色:由于是分开安装,所以这里我不选择客户端

JAVA获取访问用户的客户端IP(适用于公网与局域网)

/** * 获取访问用户的客户端IP(适用于公网与局域网). */ public static final String getIpAddr(final HttpServletRequest request) throws Exception { if (request == null) { throw (new Exception("getIpAddr method HttpServletRequest Object is null")); } String ipString = r

Exchange 2013 SP1部署系列14:配置客户端访问协议(IMAP&POP3)

安装 Microsoft Exchange Server 2013 时,未启用 POP3 客户端连接.若要启用 POP3 客户端连接,您需要启动两个 POP3 服务,即 Microsoft Exchange POP3 服务和 Microsoft Exchange POP3 Backend 服务.启用 POP3 之后,Exchange 2013 使用安全套接字层 (SSL) 接受端口 110 和端口 995 上的不安全 POP3 客户端通信. Microsoft Exchange POP3 服务在

16Exchange Server 2010跨站点部署-内部客户端访问配置

9.内部客户端访问 9.1 OWA方式访问 OWA的访问默认情况下是使用的HTTPS协议.也可以手动改为允许使用HTTP协议访问,基于安全性考虑,建议使用HTTPS.Exchange典型安装完成后即可以在内部直接使用Exchange OWA功能. 可以在这里修改SSL设置 取消要求SSL即可使用HTTP访问,这里不作测试 9.2 Outlook MAPI方式访问 如果是环境允许,强烈建议使用MAPI来访问邮箱,使用MAPI需要用到outlook客户端,在域环境下MAPI模式访问邮箱能够提高更大的