HBase伪分布式集群安装及代码测试

一、HBase伪分布式集群安装

1、安装包解压

$ cd app/

$ tar -xvfhbase-1.2.0-cdh5.7.1.tar.gz

$ rmhbase-1.2.0-cdh5.7.1.tar.gz

 

2、添加环境变量

$ cd ~

$ vim .bashrc

exportHBASE_HOME=/home/developer/app/hbase-1.2.0-cdh5.7.1

exportPATH=$PATH:$HBASE_HOME/bin

$ source .bashrc

 

3、编辑hbase-env.sh文件

$ cdapp/hbase-1.2.0-cdh5.7.1/conf/

$ vim hbase-env.sh

exportJAVA_HOME=/home/developer/app/jdk1.7.0_79

export HBASE_CLASSPATH=/home/developer/app/hadoop-2.6.0-cdh5.7.1/etc/hadoop

 

4、编辑hbase-site.xml 文件

$ vim hbase-site.xml

<configuration>
 <property>
    <name>hbase.rootdir</name>
    <value>hdfs://localhost:9000/hbase</value>
  </property>

  <property>
    <name>hbase.cluster.distributed</name>
    <value>true</value>
  </property>

 <property>
    <name>hbase.tmp.dir</name>
    <value>/home/developer/app/hbase-1.2.0-cdh5.7.1/tmp</value>
  </property>

  <property>
    <name>dfs.replication</name>
    <value>1</value>
  </property>

  <property>
    <name>hbase.zookeeper.quorum</name>
    <value>localhost</value>
  </property>

  <property>
    <name>hbase.zookeeper.property.clientPort</name>
    <value>2222</value>
  </property>
</configuration>

5、启动

$ start-hbase.sh

 

6、关闭

$ stop-hbase.sh

 

7、Web UI

http://localhost:60010

 

8、解决HBase中SLF4J的jar包与Hadoop冲突

问题描述:

SLF4J: Class path containsmultiple SLF4J bindings.

SLF4J: Found binding in[jar:file:/home/developer/app/hbase-1.2.0-cdh5.7.1/lib /slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Found binding in[jar:file:/home/developer/app/hadoop-2.6.0-cdh5.7.1/share/hadoop/ common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class]

SLF4J: Seehttp://www.slf4j.org/codes.html#multiple_bindings for an explanation.

SLF4J: Actual binding is oftype [org.slf4j.impl.Log4jLoggerFactory]

解决方法:

$ cdapp/hbase-1.2.0-cdh5.7.1/lib/

$ rm slf4j-log4j12-1.7.5.jar


二、代码测试

1、maven依赖

    <repositories>
        <repository>
          <id>cloudera</id>
          <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
           <groupId>junit</groupId>
           <artifactId>junit</artifactId>
           <version>3.8.1</version>
           <scope>test</scope>
        </dependency>
        <dependency> 
           <groupId>org.apache.hadoop</groupId> 
           <artifactId>hadoop-common</artifactId> 
           <version>2.6.0-cdh5.7.1</version> 
        </dependency> 
        <dependency> 
           <groupId>org.apache.hadoop</groupId> 
           <artifactId>hadoop-hdfs</artifactId> 
           <version>2.6.0-cdh5.7.1</version> 
        </dependency>
        <dependency> 
            <groupId>org.apache.hbase</groupId> 
            <artifactId>hbase-client</artifactId> 
            <version>1.2.0-cdh5.7.1</version> 
        </dependency>
    </dependencies>

2、测试代码

package com.hbase.demo;

import java.io.IOException;

public class HBaseTest {
    
    private static final String TABLE_NAME = "students";
    private static final String FAMILY_COL_SCORE = "score";
    private static final String FAMILY_COL_INFO = "info";
    
    private Configuration conf;
    
    public static void main(String[] args) {
        
        HBaseTest test = new HBaseTest();
        test.init();
        test.createTable();
        test.insertData();
        test.scanTable();
        test.queryByRowKey();
//        test.deleteRow();
//        test.deleteFamily();
//        test.deleteTable();
    }
    
    /**
     * 初始化hbase的配置信息,也可以将hbase的配置文件hbase-site.xml引入项目,则不需要在代码中填写配置信息
     */
    public void init() {
        
        conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.quorum", "localhost");
        conf.set("hbase.zookeeper.property.clientPort", "2222");
    }
    
    /**
     * 创建表
     */
    public void createTable() {
        
        Connection conn = null;
        
        try {
            conn = ConnectionFactory.createConnection(conf);
            HBaseAdmin admin = (HBaseAdmin) conn.getAdmin();
            HTableDescriptor desc = new HTableDescriptor(TableName.valueOf(TABLE_NAME));
            desc.addFamily(new HColumnDescriptor(FAMILY_COL_SCORE));
            desc.addFamily(new HColumnDescriptor(FAMILY_COL_INFO));
            if (admin.tableExists(TABLE_NAME)) {
                System.out.println("table " + TABLE_NAME + " is exists !");
                System.exit(0);
            } else{
                admin.createTable(desc);
                System.out.println("table " + TABLE_NAME + " created successfully.");
            }
        } catch (IOException e) {
            e.printStackTrace();
        } finally {
            if ( conn != null) {
                try {
                    conn.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    /**
     * 在指定表中插入数据
     */
    public void insertData() {

        Connection conn = null;
        HTable table = null;
        
        try {
            
            conn = ConnectionFactory.createConnection(conf);
            table = (HTable) conn.getTable(TableName.valueOf(TABLE_NAME));
            List<Put> puts = new ArrayList<Put>();
            // 添加数据,一个Put代表一行,构造函数传入的是RowKey
            Put put1 = new Put(Bytes.toBytes("001:carl"));
            put1.addColumn(Bytes.toBytes(FAMILY_COL_SCORE), Bytes.toBytes("english"), Bytes.toBytes("97"));
            put1.addColumn(Bytes.toBytes(FAMILY_COL_SCORE), Bytes.toBytes("math"), Bytes.toBytes("99"));
            put1.addColumn(Bytes.toBytes(FAMILY_COL_INFO), Bytes.toBytes("weight"), Bytes.toBytes("130"));
            puts.add(put1);
            Put put2 = new Put(Bytes.toBytes("002:sophie"));
            put2.addColumn(Bytes.toBytes(FAMILY_COL_SCORE), Bytes.toBytes("english"), Bytes.toBytes("100"));
            put2.addColumn(Bytes.toBytes(FAMILY_COL_SCORE), Bytes.toBytes("math"), Bytes.toBytes("92"));
            put2.addColumn(Bytes.toBytes(FAMILY_COL_INFO), Bytes.toBytes("weight"), Bytes.toBytes("102"));
            puts.add(put2);
            // 将数据加入表
            table.put(puts);
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (table != null) {
                try {
                    table.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }

    /**
     * 在指定表中查询所有数据(全表扫描)
     */
    public void scanTable() {
        
        Connection conn = null;
        HTable table = null;
        ResultScanner scann = null;
        
        try {
            
            conn = ConnectionFactory.createConnection(conf);
            table = (HTable) conn.getTable(TableName.valueOf(TABLE_NAME));
            scann = table.getScanner(new Scan());
            for (Result rs : scann) {
                System.out.println("该行数据的RowKey为:"+new String(rs.getRow()));
                for (Cell cell : rs.rawCells()) {
                    System.out.println("列族:" + new String(CellUtil.cloneFamily(cell)) + "\t" + 
                                       "列修饰符:" + new String(CellUtil.cloneQualifier(cell)) + "\t" + 
                                       "值:" + new String(CellUtil.cloneValue(cell)) + "\t" +
                                       "时间戳:" + cell.getTimestamp());
                }
                System.out.println("-----------------------------------------------");
            }
            
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (table != null) {
                try {
                    table.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    /**
     * 通过rowkey在指定表中查询一行数据
     */
    public void queryByRowKey() {
        
        Connection conn = null;
        HTable table = null;
        
        try {
            conn = ConnectionFactory.createConnection(conf);
            table = (HTable) conn.getTable(TableName.valueOf(TABLE_NAME));
            Get get = new Get("001:carl".getBytes());
//            get.setMaxVersions(2);
//            get.addColumn(FAMILY_COL_SCORE.getBytes(), "english".getBytes());
            Result rs = table.get(get);
            System.out.println("表" + TABLE_NAME + "中RowKey为001:carl的行数据如下");
            
            for (Cell cell : rs.rawCells()) {
                System.out.println("列族:" + new String(CellUtil.cloneFamily(cell)) + "\t" + 
                                   "列修饰符:" + new String(CellUtil.cloneQualifier(cell)) + "\t" + 
                                   "值:" + new String(CellUtil.cloneValue(cell)) + "\t" +
                                   "时间戳:" + cell.getTimestamp());
            }
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            if (table != null) {
                try {
                    table.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
            if (conn != null) {
                try {
                    conn.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
    }
    
    /**
     * 删除表中指定RowKey的行
     */
    public void deleteRow() {

        Connection conn = null;
        HTable table = null;
        try {
            conn = ConnectionFactory.createConnection(conf);
            table = (HTable) conn.getTable(TableName.valueOf(TABLE_NAME));
            table.delete(new Delete("001:carl".getBytes()));
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (table != null) {
                    table.close();
                }
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }
    
    /**
     * 删除指定名称的列族
     */
    public void deleteFamily() {

        Connection conn = null;
        HBaseAdmin admin = null;
        try {
            conn = ConnectionFactory.createConnection(conf);
            admin = (HBaseAdmin) conn.getAdmin();
            admin.deleteColumn(TABLE_NAME.getBytes(), FAMILY_COL_INFO);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (null != conn) {
                    conn.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }
    
    /**
     * 删除指定表
     */
    public void deleteTable() {

        Connection conn = null;
        HBaseAdmin admin = null;
        try {
            conn = ConnectionFactory.createConnection(conf);
            admin = (HBaseAdmin) conn.getAdmin();
            // 在删除一张表前,要先使其失效
            admin.disableTable(TABLE_NAME);
            admin.deleteTable(TABLE_NAME);
        } catch (Exception e) {
            e.printStackTrace();
        } finally {
            try {
                if (conn != null) {
                    conn.close();
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }

    }
    
}

3、Eclipse运行结果


4、HBase的shell终端查看结果



本页内容版权归属为原作者,如有侵犯您的权益,请通知我们删除。
本文将介绍Oracle集成云Agent的基础架构,所包含的组件,和如何连接云与OP应用。 目前/典型的集成方式 目前常用的将云应用/基于互联网的应用与企业内部部署(OP)应用连接的方式为:穿透一层或者更多的防火墙,使用反向代理、Oracle API Gateway或者OHS。要实现这些操作需要多种专业知识,比如防火墙需要开放入站端口,暴露一个私有的SOAP/REST服务并且配置网络路由。SOAP/REST服务可以用SOA套件之类的产品实现,比如与CRM系统进行通讯,实现客户信息的接收。如下图所示: 如果使
本次主要是详细记录Docker1.12在Ubuntu16.04上的安装过程,创建Docker组(避免每次敲命令都需要sudo),Docker常用的基本命令的总结,在容器中运行Hello world,以及创建一个基于Python Flask的web应用容器的全过程。 1.Docker1.12在Ubuntu16.04上安装 1.1.先决条件1,添加Docker源 wxl @wxl - pc: ~ $ sudo apt-get update 增加CA证书 wxl@wxl -pc :~$ sudo apt -ge
参考自: http://blog.csdn.net/jdplus/article/details/45920733 进行了大范围修改和完善 文件下载 CDH (Cloudera’s Distribution, including Apache Hadoop),是Hadoop众多分支中的一种,由Cloudera维护,基于稳定版本的Apache Hadoop构建,并集成了很多补丁,可直接用于生产环境。  Cloudera Manager则是为了便于在集群中进行Hadoop等大数据处理相关的服务安装和监控管理的
Spark可以通过三种方式配置系统: 通过SparkConf对象, 或者Java系统属性配置Spark的应用参数 通过每个节点上的conf/spark-env.sh脚本为每台机器配置环境变量 通过log4j.properties配置日志属性 Spark属性 Spark属性可以为每个应用分别进行配置,这些属性可以直接通过SparkConf设定,也可以通过set方法设定相关属性。 下面展示了在本地机使用两个线程并发执行的配置代码: val conf = new SparkConf() .setMaster(
云端基于Docker的微服务与持续交付实践笔记,是基于易立老师在阿里巴巴首届在线技术峰会上《云端基于Docker的微服务与持续交付实践》总结而出的。 本次主要讲了什么? Docker Swarm Docker Swarm mode 微服务支持(Docker集群架构体系) Docker的发展趋势和前沿成果 在Docker技术方面还是很佩服大牛的,所以赶紧写下笔记,追随大神的脚步。 阿里云资深专家易立,技术就不说了,他比其他直播间硬生生多讲了半个多点,于情于理还是万分感谢本次分享的(可惜devOps没时间讲了
前面我们已经部署好了一个Docker Swarm集群环境,接下来,我们就对Swarm集群的相关管理进行简单介绍。 集群调度策略 既然是集群,就是有一个调度策略,也就是该集群包含那么多子节点,我到底是设置一个什么样的策略来进行分配呢? 我们查看Docker官方文档可以看到Swarm的集群调度包含三种策略: To choose a ranking strategy, pass the  --strategy  flag and a strategy value to the  swarm manage  co

docker4dotnet #2 容器化主机 - 2016-07-21 14:07:47

.NET 猿自从认识了小鲸鱼,感觉功力大增。上篇 《docker4dotnet #1 前世今生世界你好》 中给大家介绍了如何在Windows上面配置Docker for Windows和Docker Tools for Visual Studio来使用docker协助.NET Core应用的开发,这篇我们来看看如何创建和管理容器化主机。 所谓容器化主机Dockerized Host,就是安装了docker engine的主机,可以使用docker工具进行管理。使用docker来协助开发,我们至少需要本地和

Oozie安装总结 - 2016-07-20 18:07:35

一、使用CM添加服务的方式安装Oozie 如果在创建Oozie数据库时失败,且提示数据库已存在,如下图,则可能是之前已经安装过Oozie,没有卸载干净,需要手动将Oozie服务器数据目录删掉(oozie/data部分),见图二                                                                            (图一)                                                              

kafka本地单机安装部署 - 2016-07-20 18:07:35

kafka是一种高吞吐量的分布式发布订阅消息系统,这几天要上kafka,只在其中的一个节点使用,结合具体的项目实践在此将kafka的本地安装部署流程记录下来与各位同仁分享交流。 准备工作: 上述的文件除了jdk以外均放在/usr/local/kafka目录下。 1、安装jdk,kafka的使用要用到jdk 首先检查有无jdk:java -version cd /usr/local/hadoop(本例中我是将jdk的安装包放到hadoop文件夹下,各位可以依据自己情况) http://www.oracle.

Swift 存储目录 - 2016-07-20 17:07:03

  在 Storage node 上运行着 Linux系统并 使用了 XFS文件系统 ,逻辑上使用一致性哈希算法将固定总数的 partition 映射到每个 Storage node 上,每个 Data 也使用同样的哈希算法映射到 Partition 上,其层次结构如下图所示: Figure1:Stoage node hierachy     以我们的一台 storage node sws51 为例,该 device 的文件路径挂载到 /srv/node/sdc ,目录结构如下所示: root@sws51