hbase远程api调用, 远程连接开发,环境构建相关问题总结

     平时在开发的过程中,都是将hbase的环境装在虚拟机或者双系统上的,开发是直接在unix或者linux上进行的,这样对于使用上,有些繁琐。

下面我将介绍我在使用windows远程开发过程中的一些总结:

     1,环境

              开发环境: windows下的 idea (或者eclipse等)

               hbase环境:  VMware 下的虚拟机 Ubuntu server 16.04

                                     (我这里是伪分布式环境,用于程序的开发环境)

                                    版本:hadoop: 2.7.4

                                    版本:hbase 1.2.6

        2,配置

            1),虚拟机配置

                    主机名:zhoujun

                     ** 配置网络ip信息:

            sudo vim /etc/hosts

                          
                 这里我的ip是 192.168.27.132,不同的虚拟机根据不同的ip进行配置

                ** ip 地址通过 ifconfig来查看

                  

                       ** 修改主机名 :  

             sudo vim /etc/hostname

                       这里就设置成你的主机名就可以了,我这里是:zhoujun

              2) 配置 hadoop

                  将 hadoop 的配置文件中的所有的关于ip地址,都配置成自己的对应主机的 i p ,(建议用自己的主机名就行)

              3) 配置 hbase

                 进入到自己的hbase 的安装目录,进入/conf配置目录下,我这里的hbase安装在 /opt目录下

                  

                  这里一样的把对应使用到了主机或者ip地址的地方都改成自己主机对应的 ip ,例如:

                   

                   然后重启自己的服务器:

  sudo reboot now

                3) 重新配置 ssh  密钥

            cd ~/.ssh/                     # 若没有该目录,请先执行一次ssh localhost
            ssh-keygen -t rsa              # 会有提示,都按回车就可以
            cat ./id_rsa.pub >> ./authorized_keys  # 加入授权

                         4)配置 windows :

                                  进入     C:\Windows\System32\drivers\etc 的文件夹下, 打开 hosts文件。在文件的末尾添加

192.168.27.132   zhoujun    # 注意这里的 主机名,是你虚拟机的主机名,而不是用户名


                  5 ) 进入到服务武器的终端,开启对应的服务:

             start-all.sh          # 开启 hadoop 服务
             start-hbase.sh         # 开启 hbase 服务

                  3,编写例子测试:

import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.*;
import org.apache.hadoop.hbase.client.*;

import java.io.IOException;
import java.util.Arrays;

/**
 * Created by zhoujun on 2017/8/31.
 */
public class HbaseConection {
    /**
     * 连接池对象
     */
    protected static Connection connection;
    private static final String ZK_QUORUM = "hbase.zookeeper.quorum";
    private static final String ZK_CLIENT_PORT = "hbase.zookeeper.property.clientPort";
    /**
     * HBase位置
     */
    private static final String HBASE_POS = "192.168.27.132";

    /**
     * ZooKeeper位置
     */
    private static final String ZK_POS = "192.168.27.132";

    /**
     * zookeeper服务端口
     */
    private final static String ZK_PORT_VALUE = "2181";

    /**
     * 静态构造,在调用静态方法时前进行运行
     * 初始化连接对象.
     * */
    static{
        Configuration configuration = HBaseConfiguration.create();
        configuration.set("hbase.rootdir", "hdfs://" + HBASE_POS
                + ":9000/hbase");
        configuration.set(ZK_QUORUM, ZK_POS);
        configuration.set(ZK_CLIENT_PORT, ZK_PORT_VALUE);
        try {
            connection = ConnectionFactory.createConnection(configuration);
        } catch (IOException e) {
            e.printStackTrace();
        }// 创建连接池
    }

    /**
     * @param tableName 创建一个表 tableName 指定的表名
     * @param seriesStr  以字符串的形式指定表的列族,每个列族以逗号的形式隔开,(例如:"f1,f2"两个列族,分别为f1和f2)
     **/
    public static boolean createTable(String tableName, String seriesStr) {
        boolean isSuccess = false;// 判断是否创建成功!初始值为false
        Admin admin = null;
        TableName table = TableName.valueOf(tableName);
        try {
            admin = connection.getAdmin();
            if (!admin.tableExists(table)) {
                System.out.println("INFO:Hbase::  " + tableName + "原数据库中表不存在!开始创建...");
                HTableDescriptor descriptor = new HTableDescriptor(table);
                Arrays.asList(seriesStr.split(","))
                        .forEach(s ->  descriptor.addFamily(new HColumnDescriptor(s.getBytes())));
                admin.createTable(descriptor);
                System.out.println("INFO:Hbase::  "+tableName + "新的" + tableName + "表创建成功!");
                isSuccess = true;
            } else {
                System.out.println("INFO:Hbase::  该表已经存在,不需要在创建!");
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            IOUtils.closeQuietly(admin);
        }
        return isSuccess;
    }

    /**
     * 插入数据
     * @param tableName 表名
     * @param rowkey 行健
     * @param family 列族
     * @param qualifier 列描述符
     * @param value 值
     * @throws IOException 异常信息
     */
    public static  void putDataH(String tableName, String rowkey, String family,
                                    String qualifier, Object value) throws IOException {
        Admin admin = null;
        TableName tN = TableName.valueOf(tableName);
        admin = connection.getAdmin();
        if (admin.tableExists(tN)) {
            try (Table table = connection.getTable(TableName.valueOf(tableName
                    .getBytes()))) {
                Put put = new Put(rowkey.getBytes());
                put.addColumn(family.getBytes(), qualifier.getBytes(),
                        value.toString().getBytes());
                table.put(put);

            } catch (Exception e) {
                e.printStackTrace();
            }
        } else {
            System.out.println("插入数据的表不存在,请指定正确的tableName ! ");
        }
    }

    /**
     * 根据table查询表中的所有数据 无返回值,直接在控制台打印结果
     * */
    @SuppressWarnings("deprecation")
    public static void getValueByTable(String tableName) throws Exception {
        Table table = null;
        try {
            table = connection.getTable(TableName.valueOf(tableName));
            ResultScanner rs = table.getScanner(new Scan());
            rs.forEach(r -> {
                System.out.println("获得到rowkey:" + new String(r.getRow()));
                Arrays.stream(r.raw()).forEach(keyValue -> {
                    System.out.println("列:" + new String(keyValue.getFamily())
                            + ":" + new String(keyValue.getQualifier())
                            + "====值:" + new String(keyValue.getValue()));
                });
            });
        } finally {
            IOUtils.closeQuietly(table);
        }
    }

    public static void main(String[] args) throws Exception {
        System.out.println(createTable("learmTest","f1"));
        System.out.println("***************插入一条数据:");
        putDataH("learmTest","test1","f1","name","4545");
        System.out.println("****************打印表中的数据:");
        getValueByTable("learmTest");
    }

}

    运行结果:

  


posted @ 2017-09-01 15:47  zhou_jun  阅读(240)  评论(0编辑  收藏  举报