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

来源:互联网 发布:大数据可视化效果图 编辑:程序博客网 时间:2024/06/15 01:31

一、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终端查看结果



0 0
原创粉丝点击