大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践

之前介绍过关于HBase 0.9.8版本的部署及使用,本篇介绍下最新版本HBase1.2.4的部署及使用,有部分区别,详见如下:

1. 环境准备:

  1.需要在Hadoop[hadoop-2.7.3] 启动正常情况下安装,hadoop安装可参考LZ的文章 大数据系列之Hadoop分布式集群部署

  2. 资料包  zookeeper-3.4.9.tar.gz,hbase-1.2.4-bin.tar.gz

2. 安装步骤:

  1.安装zookeeper

     1.解压zookeeper-3.4.9.tar.gz

cd
tar -xzvf zookeeper-3.4.9.tar.gz
ll zookeeper-3.4.9

     2.新建配置conf/zoo.cfg

# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/mfz/zookeeper-3.4.9/zookeeperData
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
autopurge.purgeInterval=1

      3.启动zk

jps
bin/zkServer.sh start

     4. 查看zk端口2181状态

echo stat | nc master 2181

  2.安装HBase-1.2.4

    1.将hbase 压缩包放入用户~/resources下

    2.执行命令,cp到用户根目录,解压

cp resources/hbase-1.2.4-bin.tar.gz .

tar -xzvf hbase-1.2.4-bin.tar.gz

ll hbase-1.2.4

  

  3.配置 conf/hbase-env.sh

...

# The java implementation to use.  Java 1.7+ required.
# export JAVA_HOME=/usr/java/jdk1.6.0/
export JAVA_HOME=/usr/java/jdk1.8.0_102/
# Extra Java runtime options.
# Below are what we set by default.  May only work with SUN JVM.
# For more on why as well as other possible settings,
# see http://wiki.apache.org/hadoop/PerformanceTuning
export HBASE_OPTS="-XX:+UseConcMarkSweepGC"
# Configure PermSize. Only needed in JDK7. You can safely remove it for JDK8+
export HBASE_MASTER_OPTS="$HBASE_MASTER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"
export HBASE_REGIONSERVER_OPTS="$HBASE_REGIONSERVER_OPTS -XX:PermSize=128m -XX:MaxPermSize=128m"

# Tell HBase whether it should manage it‘s own instance of Zookeeper or not.
export HBASE_MANAGES_ZK=false

...

  4.配置 conf/hbase-site.xml

<configuration>
        <property>
                <name>hbase.cluster.distributed</name>
                <value>true</value>
        </property>
        <property>
                <name>hbase.rootdir</name>
                <value>hdfs://master:9000/hbase</value>
        </property>
        <property>
                <name>hbase.zookeeper.quorum</name>
                <value>master</value>
        </property>
</configuration>

  5.配置 conf/regionservers ,将内容替换为slave  (集群从节点主机hostname)

   6.配置环境变量,可在.base_profile , 也可在root 用户下配置/etc/profile  。 注意要生效配置 source {filename}

#HBase CONFIG
export HBASE_HOME=/home/mfz/hbase-1.2.4
export PATH=$HBASE_HOME/bin:$PATH
export HADOOP_CLASSPATH=$HBASE_HOME/lib/*

  7.将配置完成后的Hbase安装包传输到slave集群节点上

cd
scp -r hbase-1.2.4 slave:~/

  8.  启动Hbase  ,进入安装目录下:

bin/start-hbase.sh

  9.验证Hbase,进入master 浏览器.此步骤与0.9.8版本不同的是端口还由60010改为16010,启动界面如下则启动成功

  10.进入HBase shell执行增、删、改、查操作(与Hbase 0.9.8 Shell命令一致)不做其他说明

#shell 命令如下

#开启Hbase shell
bin/hbase shell

#创建表 hbasename, 有两个列族 ‘one‘和‘two‘
create ‘hbasename‘,‘one‘,‘two‘

#查看表
list

#查看表结构
describe ‘hbasetest‘

#插入数据
put ‘hbasename‘,‘test1‘,‘one‘,‘helloWorld‘,1

#查看数据
scan ‘hbasename‘
get ‘hbasename‘,‘test1‘

#修改表结构(新增列族‘three‘)
alter ‘hbasename‘,NAME=‘three‘

#删除表disable ‘hbasename‘
drop ‘hbasename‘

更多hbase shell命令详见官网 http://hbase.apache.org/book.html#shell_exercises

3.HBase-demo

  

1.BaseConfig.Java

package hbase.base;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.hbase.HBaseConfiguration;
import org.apache.hadoop.hbase.client.Connection;
import org.apache.hadoop.hbase.client.ConnectionFactory;

/**
 * @author mengfanzhu
 * @Package hbase.base
 * @Description:
 * @date 17/3/16 10:59
 */
public class BaseConfig {

    /**
     * 创建hbase连接
     * @return
     */
    public static Connection getConnection() throws Exception{
        Configuration conf = HBaseConfiguration.create();
        conf.set("hbase.zookeeper.property.clientPort", "2181");
        conf.set("hbase.zookeeper.quorum", "10.211.55.5");
        conf.set("hbase.master", "10.211.55.5:9000");
        Connection conn = ConnectionFactory.createConnection(conf);
        return conn;
    }
}

2.BaseDao.java

package hbase.base;

import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.client.*;

/**
 * @author mengfanzhu
 * @Package base
 * @Description:
 * @date 17/3/16 10:58
 */
public interface BaseDao {

    /**
     * 创建表
     * @param tableDescriptor
     */
    public void createTable(HTableDescriptor tableDescriptor) throws Exception;

    /**
     *  新增数据
     * @param putData
     *  @param tableName
     */
    public void putData(Put putData,String tableName) throws Exception;

    /**
     * 删除数据
     * @param delData
     *  @param tableName
     */
    public void delData(Delete delData,String tableName) throws Exception;

    /**
     * 查询数据
     * @param scan
     * @param tableName
     * @return
     */
    public ResultScanner scanData(Scan scan,String tableName) throws Exception;

    /**
     * 查询数据
     * @param get
     * @param tableName
     * @return
     */
    public Result getData(Get get,String tableName) throws Exception;
}

3.BaseDaoImpl.java

package hbase.base;

import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * @author mengfanzhu
 * @Package hbase.base
 * @Description: base服务实现
 * @date 17/3/16 11:11
 */
public class BaseDaoImpl implements BaseDao {
    static Logger logger = LoggerFactory.getLogger(BaseDaoImpl.class);

    /**
     * 创建表
     * @param tableDescriptor
     */
    public void createTable(HTableDescriptor tableDescriptor) throws Exception{
        Admin admin = BaseConfig.getConnection().getAdmin();
        //判断tablename是否存在
        if (!admin.tableExists(tableDescriptor.getTableName())) {
            admin.createTable(tableDescriptor);
        }
        admin.close();
    }
    public void addTableColumn(String tableName,HColumnDescriptor columnDescriptor) throws Exception {
        Admin admin = BaseConfig.getConnection().getAdmin();
        admin.addColumn(TableName.valueOf(tableName),columnDescriptor);
        admin.close();
    }

    /**
     *  新增数据
     * @param putData
     *  @param tableName
     */
    public void putData(Put putData,String tableName) throws Exception{
        Table table = BaseConfig.getConnection().getTable(TableName.valueOf(tableName));
        table.put(putData);
        table.close();
    }

    /**
     * 删除数据
     * @param delData
     *  @param tableName
     */
    public void delData(Delete delData,String tableName) throws Exception{
        Table table = BaseConfig.getConnection().getTable(TableName.valueOf(tableName));
        table.delete(delData);
        table.close();
    }

    /**
     * 查询数据
     * @param scan
     *  @param tableName
     * @return
     */
    public ResultScanner scanData(Scan scan,String tableName) throws Exception{
        Table table = BaseConfig.getConnection().getTable(TableName.valueOf(tableName));
        ResultScanner rs =  table.getScanner(scan);
        table.close();
        return rs;
    }

    /**
     * 查询数据
     * @param get
     *  @param tableName
     * @return
     */
    public Result getData(Get get,String tableName) throws Exception{
        Table table = BaseConfig.getConnection().getTable(TableName.valueOf(tableName));
        Result result = table.get(get);
        table.close();
        return result;
    }
}

4.StudentsServiceImpl.java

package hbase.students;

import hbase.base.BaseDao;
import hbase.base.BaseDaoImpl;
import org.apache.hadoop.hbase.HColumnDescriptor;
import org.apache.hadoop.hbase.HTableDescriptor;
import org.apache.hadoop.hbase.TableName;
import org.apache.hadoop.hbase.client.*;
import org.apache.hadoop.hbase.util.Bytes;

import java.util.HashMap;
import java.util.Map;

/**
 * @author mengfanzhu
 * @Package hbase.students
 * @Description: students服务
 * @date 17/3/16 11:36
 */
public class StudentsServiceImpl {
    private BaseDao baseDao = new BaseDaoImpl();
    private static final String TABLE_NAME = "t_students";
    private static final String STU_ROW_NAME = "stu_row1";
    private static final byte[] FAMILY_NAME_1 = Bytes.toBytes("name");
    private static final byte[] FAMILY_NAME_2 = Bytes.toBytes("age");
    private static final byte[] FAMILY_NAME_3 = Bytes.toBytes("scores");

    public void createStuTable() throws Exception{
        //创建tablename,列族1,2
        HTableDescriptor tableDescriptor = new HTableDescriptor(TableName.valueOf(TABLE_NAME));
        HColumnDescriptor columnDescriptor_1 = new HColumnDescriptor(FAMILY_NAME_1);
        HColumnDescriptor columnDescriptor_2 = new HColumnDescriptor(FAMILY_NAME_2);
        HColumnDescriptor columnDescriptor_3 = new HColumnDescriptor(FAMILY_NAME_3);
        tableDescriptor.addFamily(columnDescriptor_1);
        tableDescriptor.addFamily(columnDescriptor_2);
        tableDescriptor.addFamily(columnDescriptor_3);
        baseDao.createTable(tableDescriptor);
    }

    /**
     * 插入数据<列族名称,值>
     * @param bytes
     */
    public void putStuData(Map<byte[],byte[]> bytes) throws Exception{
        Put put =  new Put(Bytes.toBytes(STU_ROW_NAME));;
        int i = 1;
        for(byte[] familyNames : bytes.keySet()){
            put.addColumn(familyNames, bytes.get(familyNames), Bytes.toBytes(0));
            i++;
        }

        baseDao.putData(put, TABLE_NAME);
    }

    public ResultScanner scanData(Map<byte[],byte[]> bytes) throws Exception{
        Scan scan = new Scan();
        for(byte[] familyNames : bytes.keySet()){
            scan.addColumn(familyNames, bytes.get(familyNames));
        }
        scan.setCaching(100);
        ResultScanner results = baseDao.scanData(scan,TABLE_NAME);

        return results;
    }
    public void delStuData(String rowId,byte[] familyName,byte[] qualifierName) throws Exception{
        Delete delete = new Delete(Bytes.toBytes(rowId));
        delete.addColumn(familyName, qualifierName);
        baseDao.delData(delete,TABLE_NAME);
    }

    public static void main(String[] args) throws Exception {
        StudentsServiceImpl ssi = new StudentsServiceImpl();
        //创建table
        ssi.createStuTable();
        //添加数据
        Map<byte[],byte[]> bytes = new HashMap<byte[],byte[]>();
        bytes.put(FAMILY_NAME_1,Bytes.toBytes("Jack"));
        bytes.put(FAMILY_NAME_2,Bytes.toBytes("10"));
        bytes.put(FAMILY_NAME_3,Bytes.toBytes("O:90,T:89,S:100"));
        ssi.putStuData(bytes);

        //查看数据
        Map<byte[],byte[]> byteScans = new HashMap<byte[], byte[]>();
        ResultScanner results = ssi.scanData(byteScans);
        for (Result result : results) {
            while (result.advance()) {
                System.out.println(result.current());
            }
        }
    }
}

5.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>mfz.hbase</groupId>
    <artifactId>hbase-demo</artifactId>
    <version>1.0-SNAPSHOT</version>

    <repositories>
        <repository>
            <id>aliyun</id>
            <url>http://maven.aliyun.com/nexus/content/groups/public/</url>
        </repository>
    </repositories>
    <dependencies>
        <dependency>
            <groupId>org.apache.hadoop</groupId>
            <artifactId>hadoop-common</artifactId>
            <version>2.6.0</version>
        </dependency>
        <dependency>
            <groupId>org.apache.hbase</groupId>
            <artifactId>hbase-client</artifactId>
            <version>1.2.4</version>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.9</version>
        </dependency>
        <!-- https://mvnrepository.com/artifact/com.yammer.metrics/metrics-core -->
        <dependency>
            <groupId>com.yammer.metrics</groupId>
            <artifactId>metrics-core</artifactId>
            <version>2.2.0</version>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.3</version>
                <configuration>
                    <classifier>dist</classifier>
                    <appendAssemblyId>true</appendAssemblyId>
                    <descriptorRefs>
                        <descriptor>jar-with-dependencies</descriptor>
                    </descriptorRefs>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

</project>

6.执行结果

demo已上传至GitHub https://github.com/fzmeng/HBaseDemo

完~~

时间: 2024-10-22 02:52:24

大数据系列之分布式数据库HBase-1.2.4+Zookeeper 安装及增删改查实践的相关文章

GZFramwork数据库层《四》单据主从表增删改查

同GZFramwork数据库层<三>普通主从表增删改查   不同之处在于:实例 修改为:   直接上效果:         本系列项目源码下载地址:https://github.com/GarsonZhang/GZFramworkDBDemo/ 生成器源码下载地址:https://github.com/GarsonZhang/GZCodeGenerate/   系列文章 1. GZFramwork数据库层<前言>Demo简介 2. GZFramwork数据库层<前言>D

GZFramwork数据库层《三》普通主从表增删改查

运行结果: 使用代码生成器(GZCodeGenerate)生成tb_Cusomer和tb_CusomerDetail的Model 生成器源代码下载地址: https://github.com/GarsonZhang/GZCodeGenerate/ 生成方式见第一节: GZFramwork数据库层<一>普通表增删改查   生成明细表ORM略有不同: 项目附加结果:   新增一个自定义控件:ucTableMD 界面:   后台代码: using System; using System.Colle

大数据将促进分布式数据库发展及去Oracle

2015-09-13 张晓东 东方云洞察 点击上面的链接文字,可以快速关注"东方云洞察"公众号 分布式数据库简介 分布式数据库系统通常使用较小的计算机系统,每台计算机可单独放在一个地方,每台计算机中都可能有DBMS的一份完整拷贝副本,或者部分拷贝副本,并具有自己局部的数据库, 通过网络互相连接共同组成一个完整的.全局的逻辑上集中.物理上分布的大型数据库. 分布式并行数据库通过并行使用多个CPU和磁盘来将诸如装载数据.建立索引.执行查询等操作并行化以提升性能的数据库系统.其中最重要的关键

JDBC应用、控制台连MySQL接数据库实现学生管理系统的登录注册、增删改查

**=====================连接数据库=====================** package com.sore.jdbc; import java.sql.*; public class Jdbc { static Connection conn=null; //创建连接桥 public static void main(String[] args) { try{ Class.forName("com.mysql.jdbc.Driver"); //加载驱动 S

大数据系列之分布式大数据查询引擎Presto

关于presto部署及详细介绍请参考官方链接 http://prestodb-china.com PRESTO是什么? Presto是一个开源的分布式SQL查询引擎,适用于交互式分析查询,数据量支持GB到PB字节. Presto的设计和编写完全是为了解决像Facebook这样规模的商业数据仓库的交互式分析和处理速度的问题. 它可以做什么? Presto支持在线数据查询,包括Hive, Cassandra, 关系数据库以及专有数据存储. 一条Presto查询可以将多个数据源的数据进行合并,可以跨越

数据库基础和三大范式以及基本的增删改查命令

所谓数据库就是建库 建表 建约束.① 确定实体 就是确定有几张表 ② 确定表的属性 规范化的三个级别:数据库设计的三大范式!!!! 第一范式(1NF):原子性:数据表中的每一列是不可拆分的最小单元,也就是确保每一列的原子性. 例如:userInfo:'山东省烟台市 11233445667' 拆分成: '山东省烟台市' 和''11233445667": 第二范式(2NF):满足1NF后,要求:表中的所有列都依赖于主键,而不能有任何一列与主键没有关系. 也就是说每张表只能描述一件事情. 例如:订单表

2.大约QT数据库操作,简单的数据库连接操作,增删改查数据库,QSqlTableModel和QTableView,事务性操作,大约QItemDelegate 代理

 Linux下的qt安装,命令时:sudoapt-get install qt-sdk 安装mysql数据库,安装方法參考博客:http://blog.csdn.net/tototuzuoquan/article/details/39565783 假设行想进数据库开发.须要安装libqt5sql5-mysql.命令是: sudo apt-get install libqt5sql5-mysql 4 创建一个项目 要调用数据库.须要加上QT += gui widgets sql  也就是说要加

JDBC实现数据库的增删改查

本文主要讲解: JDBC的概念 JDBC的原理 创建用于测试的数据库 使用JDBC操作数据库 思考与分析 关于JDBC JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API.JDBC是Java访问数据库的标准规范,可以为不同的关系型数据库提供统一访问,它由一组用Java语言编写的接口和类组成. 2.JDBC原理: JDBC说白了就是一套AIP接口,一套规范.然后各大数据库的驱动都实现并遵守了这套接口. 3.准备数据库: m

Mysql入门-对表数据的增删改查

这一部分是最简单的,也是最麻烦的.简单是因为其实只包括增删该插四个部分.大体上看,增加数据.删除数据.修改数据.查询数据都不麻烦啊,我们日常都是常用的.这个谁不会呢?以前在培训机构学mysql的时候,我就知道,程序员的成长路程上的一个瓶颈就在于数据库.如何书写高维护性的sql语句,如何能保持高维护性的同时又保持执行的高效率,这是个难题.我最近在做一个比较棘手的项目,常常left join 5~6张表,扫表10几万,查询速度慢的惊人.10几万还仅仅是测试数据,等真正的项目上线,数据量可能会达到百万