Hadoop与HBase自学笔记

HadoopHBase自学笔记

 

 

1、             安装jdk

 

使用jdk1.6.0_12版本。

 

 

2、             安装Cygwin以及相关服务

2.1   安装Cygwin

 

cygwin是一个在windows平台上运行的unix模拟环境。

 

在安装Cygwin之前,得先下载Cygwin安装程序setup.exe

 

http://www.cygwin.com/setup.exe

 

 

选择install from internet,next

 

 

 

 

默认设置,点next

 

 

 

 

这里自己选择一个目录。

 

选择直接连接

 

 

 

 

然后Add http://www.cygwin.cn/pub/镜像,

 

 

Add

 

 

(如果这个镜像下载不了,那就选择163那个吧,我一开始可以,重装就不可以,真奇怪。)

点下一步

 

 

默认是defaul,进入“Select Packages”对话框后,必须保证“Net Category”下的“OpenSSL”被安装。

 

 

点下一步,

 

另外,在eclipse上编译Hadoop,还必须安装“Base Category”下的“sed”,如

 

 

 

 

另外,还建议将“Editors Category”下的vim安装,以方便在Cygwin上直接修改配置

文件;“Devel Category”下的subversion建议安装,

 

 

 

点击完成,开始安装

 

 

 

安装完成后,点击完成,至此,cygwin安装完成。

 

 

2.2 配置环境变量

 

需要配置的环境变量包括PATHJAVA_HOMEJAVA_HOME指向JRE安装目录;JDK

bin目录。此外,Cygwinbin目录,以及Cygwinusr\sbin目录都必须添加到PATH环境变量中

 

path变量增加

C:\cygwin\bin;C:\cygwin\usr\sbin

这串字符串即可(默认先前已经配好jdk环境变量,否则,要增加jdk环境变量)

 

2.3 安装sshd服务

 

 

点击桌面上的Cygwin图标,启动Cygwin,执行ssh-host-config命令

 

在执行ssh-host-config时,会要求Should privilege separation be used? (yes/no),输入yes/no时,选择输入no,当要求Do you want to install sshd as a service?选择yes

当要求Enter the value of CYGWIN for the daemon: [],输入ntsec

 

 

 

 

当看到“Have fun”时,一般表示sshd服务安装成功了,如上图所示。接下来,需要启

sshd 服务。

 

 

2.4   启动sshd服务

 

windows服务里,启动sshd服务,服务名为CYGWIN sshd

 

 

 

如果提示启动失败

C:/cygwin/etc/passwd文件末尾增加一行

sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin

 

 

CYGWIN sshd的状态为“已启动”后,接下来就是配置ssh登录。

 

 

2.5 配置ssh登录

 

执行ssh-keygen命令生成密钥文件

 

 

 

 

在上图所示对话框中,需要输入时,直接按回车键即可,如果不出错,应当是需要三次

按回车键。接下来生成authorized_keys文件,按下图所示操作即可

 

 

 

完成上述操作后,执行exit命令先退出Cygwin窗口,如果不执行这一步操作,下面的

操作可能会遇到错误。接下来,重新运行Cygwin,执行ssh localhost命令,在第一次执行ssh

localhost时,会有如下图所示的提示,输入yes,然后回车即可:

 

 

 

 

 

如果是Windows域用户,这步操作可能会遇到问题,错误信息如下:。

这个错误暂无解决办法,问题的解决情况,可关注Hadoop技术论坛中的贴:

http://bbs.hadoopor.com/thread-348-1-1.html(Cygwin 1.7.1版本ssh问题)。否则,如果成功,

执行who命令时,可以看到如下图所示的信息:

 

 

 

至此,配置ssh登录成功,下面就可以开始安装hadoop了。

 

 

 

 

 

 

 

 

 

 

3、安装hadoop

 

hadoop 安装包下载地址:

http://labs.xiaonei.com/apache-mirror/hadoop/core/hadoop-0.20.1/hadoop-0.20.1.tar.gz

 

hadoop安装包hadoop-0.20.1.tar.gz解压到E:\HSS\hadoop-0.20.1目录(可以修改成其它目录)下,

 

 

接下来,需要修改hadoop的配置文件,它们位于conf子目录下,分别是hadoop-env.sh

core-site.xmlhdfs-site.xmlmapred-site.xml共四个文件。在Cygwin环境,mastersslaves两个文件不需要修改。

 

3.1 修改hadoop-env.sh

只需要将JAVA_HOME修改成JDK的安装目录即可,请注意JDK必须是1.6或以上版本。

export JAVA_HOME=C:/Java/jdk1.6.0_12

 

 

 

 

注意路径要反斜杠或者双斜杠,因为是要在cygwin那里运行的.

 

 

 

3.2 修改core-site.xml

为简化core-site.xml配置,将E:\HSS\hadoop\run\src\core目录下的core-default.xml文件复制

E:\HSS\hadoop-0.20.1\conf目录下,并将core-default.xml文件名改成core-site.xml。修改

fs.default.name 的值,如下所示

 

 

 

 

hdfs://localhost:8888

 

上图中的端口号8888,可以改成其它未被占用的端口。

 

 

同时还要修改这个值

 

 

 

 

3.3 修改hdfs-site.xml

为简化hdfs-site.xml配置,将E:\HSS\hadoop-0.20.1\src\hdfs目录下的hdfs-default.xml文件复制到E:\HSS\hadoop-0.20.1\conf目录下,并将hdfs-default.xml文件名改成hdfs-site.xml。不需要再做其它修改。

 

 

 

 

3.4修改mapred-site.xml

为简化mapred-site.xml配置,将E:\HSS\hadoop-0.20.1\src\mapred目录下的mapred-default.xml

文件复制到E:\HSS\hadoop-0.20.1\conf目录下,并将mapred-default.xml文件名改成mapred-site.xml

 

 

上图中的端口号9999,可以改成其它未被占用的端口。到这里,hadoop宣告安装完毕,

可以开始体验hadoop了!

 

 

 

 

 

 

3.5 启动hadoop

 

Cygwin中,进入hadoopbin目录,

cd /cygdrive/E/HSS/hadoop-0.20.1/bin

 

format文件

输入./hadoop namenode -format

 

 

 

 

 

 

 

 

 

运行./start-all.sh 启动hadoop,

 

 

 

 

(关闭是用./stop-all.sh

在启动成功之后,输入jps命令,有三个任务显示,则表示启动成功了。

 

可以执行./hadoop fs -ls /命令,查看hadoop的根目录,

 

 

 

 

 

 

至此,hadoop安装完毕。

 

 

 

4、安装HBase

 

4.1 HBase介绍

 

HBaseHadoop的正式子项目,它是一个面向列的分布式数据库,它在存储数据结构上并非关系型,而是疏松分布式的,持久并按多维排序并索引的map型,其思想源于GoogleBigTable论文。(Google BigTablepaper: http://labs.google.com/papers/bigtable-osdi06.pdf

 

由于HBase是一个分布式、大规模的平台,主要安装在类Unix平台上。但是由于其开发语言是Java,因此它同样具有跨平台的特性,同样也可以安装在Windows操作系统上。为了方便起见,使用具有类Unix特性的Cygwin来安装HBase

 

4.2 下载与配置HBase

 

http://mirrors.tuna.tsinghua.edu.cn/apache/hbase/hbase-0.90.5/hbase-0.90.5.tar.gz

 

下载后解压到目录,比如E:\HSS\hbase-0.90.5

 

 

然后在E:\HSS\hbase-0.90.5文件夹下建立tmp文件夹,再在tmp文件夹里建立hbase文件夹,在hbase里建好tmpdata文件夹

(以后配置时需要用到)

 

4.2.1 配置hbase-env.sh

 

打开E:\HSS\hbase-0.90.5\conf下的hbase-env.sh文件,

 

 

 

修改jdk路径以及新增一记录

export HBASE_IDENT_STRING=127.0.0.1

 

4.2.2 修改hbase-site.xml文件

 

修改同目录下的hbase-site.xml

 

内容为:

<configuration>

<property>

    <name>hbase.rootdir</name>

    <!--<value>hdfs://localhost:9900/hbase</value>  -->

    <value>file:///E:/HSS/hbase-0.90.5/tmp/hbase/data</value>

    <description>The directory shared by RegionServers.

    </description>

  </property>

  <property>

    <name>hbase.tmp.dir</name>

    <value>E:/HSS/hbase-0.90.5/tmp/hbase/tmp</value>

    <description></description>

  </property>

  <property> 

       <name>hbase.zookeeper.quorum</name> 

       <value>127.0.0.1</value> 

   </property>

</configuration>

 

如图:

 

 

 

4.3 Cygwin终端设置

 

先打开Cygwin终端

对一些文件和文件夹赋权

 

Administrator@Liangbinny /etc

$ chmod +r passwd

 

Administrator@Liangbinny /etc

$ chmod u+w passwd

 

Administrator@Liangbinny /etc

$ chmod +r group

 

Administrator@Liangbinny /etc

$ chmod u+w group

 

Administrator@Liangbinny /etc

$ chmod 755 /var

 

如图:

 

 

 

然后ssh登录

 

 

 

4.4 启动hbase

 

cd /cygdrive/E/HSS/hbase-0.90.5

 

 

 

执行

./bin/start-hbase.sh

命令

启动hbase

 

 

 

 

 

提示时输入Yes

 

4.5 进入shell

 

执行

./bin/hbase shell

进入shell

 

 

 

4.6 建表与插数据

 

执行建表与插记录,

 

create 'test', 'data'

 

put 'test', 'row1', 'data:1', 'value1'

 

put 'test', 'row2', 'data:2', 'value2'

 

put 'test', 'row3', 'data:3', 'value3'

 

 

插入数据完毕,可以用

scan 'test'

查看刚才插入的数据

 

 

 

 

至此,Hbase安装完毕。

 

 

5HBase数据库

 

参考网址

http://www.ibm.com/developerworks/cn/opensource/os-hbase/

 

5.1 数据类型

 

HBase 数据被建模为多维映射,其中值(表单元)通过 4个键索引:

 

value = Map(TableName, RowKey, ColumnKey, Timestamp)

 

其中:

TableName 是一个字符串。是表名。

RowKey ColumnKey是二进制值(Java 类型 byte[])。代表行健和列族。

Timestamp 是一个 64位整数(Java 类型 long)。

value 是一个未解释的字节数组(Java™类型 byte[])。

二进制数据被编码为 Base64,以便通过网络传输。

 

 

行键是表的主键,通常是一个字符串。行通过行键按字典顺序排序。

 

存储在表中的信息的结构为列族(column family,就相当于列名),您可以将这种结构视为类别。每个列族可以拥有任意数量的成员,它们通过标签(或修饰符)识别。column键(就是每列的值)由族名、号和标签组成。例如,对于系列name和成员 first,列键为 name: first

 

(这里不是很好理解,看了下面的图可能就比较容易理解了,这个跟数据库有区分,可见,这里一行,不代表就一组数据,往往是多组数据的,一个rowkey可能对应多列的值,而每列的值(可以视为columnkey)是由列族名:标签组成),又如,name:last也是一个成员,他们都在于00001行键上,是00001行键的成员,成员值,就是value

 

 

一个 HBase表模式定义多个列族,但当您向表中插入一行时,应用程序能够在运行时创建新成员。对于一个列族,表中的不同行可以拥有不同数量的成员。换句话说,HBase支持一个动态模式模型。

 

参考下图更好理解

 

 

 

其实这些记录在hbase是根据TimeStamp排序的,所以这虽然上图看起来很工整,但是实际上载数据库里存放是凌乱的。000001000002的成员交错着放,唯一定义一个成员的唯一值的行键+列族:标签。

 

 

以第一个成员为例:

000001是行键,列族是namecontact,列键(column键)是name:firstname:lastcontact:http  Value值就是JeffreyDean,还有research.google.com/people/jeff….

 

 

如果具体到java代码而言

 

HTabletable = newHTable(conf, tablename);

           Scan s = new Scan();

           ResultScanner rs = table.getScanner(s);

           for (Result r : rs) {

              KeyValue[] kv = r.raw();

              for (int i = 0; i < kv.length; i++) {

                  vo = new HBaseVO();

                  vo.setRow(new String(kv[i].getRow()));

                  vo.setFamily(new String(kv[i].getFamily()));

                  vo.setQualifier(new String(kv[i].getQualifier()));

                  vo.setTimestamp(kv[i].getTimestamp());

                  vo.setValue(new String(kv[i].getValue()));

                  list.add(vo);

              }

           }

 

这样取数,rs里是有两条记录的,000001000002,每一个rowKey可以对应多个成员,所以kv数据存放的是成员值,kv[i].getRow()得到的是每个成员的rowKey000001.。。),Family就是列族,对于第一条记录,kv[0]familycontactkv[1],kv[2]nameQualifier这个单词比较少见,其实就是标签,对应kv[0]的标签是httpkv[1]first,kv[2]lastTimestamp是时间族,这个最简单不过,略,value也是每个成员的值,这个也很好理解,略。

 

 

 

对于任意行,一次只能访问一个列族的一个成员(这与关系数据库不同,在关系数据库中,一个查询可以访问来自一个行中的多个列的单元)。您可以将一个行中的一个列族的成员视为子行。(这个是因为一行可以对应多组成员所定,跟数据库最大的不同在于此吧)

 

表被分解为多个表区域,等同于 Bigtable片(tablet)。一个区域包含某个范围中的行。将一个表分解为多个区域是高效处理大型表的关键机制。

 

 

5.2 HBase语法教程

 

参考:

 

http://wiki.apache.org/hadoop/Hbase/Shell

 

list显示所有的表,describe描述表

 

 

 

 

 

 

 

 

 

 

list

 

 

非常详细

 

 

6eclipse下开发hbase

 

API说明网址

http://www.open-open.com/lib/view/open1342514370807.html

 

 

先将E:\HSS\hbase-0.90.5\conf下的hbase-site.xml文件拷贝到工程下的src\main\resource目录

 

然后将E:\HSS\hbase-0.90.5下的hbase-0.90.5.jar包加入到项目中

 

 

新建接口

package com.hsbc.hss.dao;

 

publicinterface BaseDAO {

 

}

 

新建工具类

 

package com.hsbc.hss.util;

 

import org.apache.hadoop.hbase.KeyValue;

 

import com.hsbc.hss.vo.HBaseVO;

 

public class CommonUtil {

       public static HBaseVO changeKeyValueToHBaseVo(KeyValue keyValue) {

              HBaseVO vo = new HBaseVO();

              vo.setRow(new String(keyValue.getRow()));

              vo.setFamily(new String(keyValue.getFamily()));

              vo.setQualifier(new String(keyValue.getQualifier()));

              vo.setTimestamp(keyValue.getTimestamp());

              vo.setValue(new String(keyValue.getValue()));

              return vo;

       }

}

 

 

新建基本类HBaseVO(以后新对象可直接继承这个类)

 

/**

 *

 *

 * hbase查询,首先要对hbase的数据结果比较了解,以下是解释

 *

 * HBase 数据被建模为多维映射,其中值(表单元)通过 4 个键索引:

 *

 * value = Map(TableName, RowKey, ColumnKey, Timestamp)

 *

 * 其中:

 * TableName 是一个字符串。是表名。

 * RowKey ColumnKey 是二进制值(Java类型 byte[])。代表行健和列族。

 * Timestamp 是一个 64 位整数(Java类型 long)。

 * value 是一个未解释的字节数组(Java? 类型 byte[])。

 * 二进制数据被编码为 Base64,以便通过网络传输。

 *

 *

 * 行键是表的主键,通常是一个字符串。行通过行键按字典顺序排序。

 *

 * 存储在表中的信息的结构为列族(column family,就相当于列名),您可以将这种结构视为类别。每个列族可以拥有任意数量的成员,它们通过标签(或修饰符)识别。column键(就是每列的值)由族名、:号和标签组成。例如,对于系列name和成员 first,列键为 name: first

 *

 * 这个跟数据库有区分,可见,这里一行,不代表就一组数据,往往是多组数据的,一个rowkey可能对应多列的值,而每列的值(可以视为columnkey)是由列族名:标签组成),又如,name:last也是一个成员,他们都在于00001行键上,是00001行键的成员,成员值,就是value

 *

 *

 *

 */

 

package com.hsbc.hss.dao.impl;

 

import java.io.IOException;

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.MasterNotRunningException;

import org.apache.hadoop.hbase.ZooKeeperConnectionException;

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.filter.CompareFilter.CompareOp;

import org.apache.hadoop.hbase.filter.FilterList;

import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;

import org.apache.hadoop.hbase.util.Bytes;

import org.apache.log4j.Logger;

 

import com.hsbc.hss.dao.BaseDAO;

import com.hsbc.hss.util.CommonUtil;

import com.hsbc.hss.vo.HBaseVO;

 

 

 

public class HBaseDAO implements BaseDAO {

 

    private static final Logger LOG = Logger.getLogger(HBaseDAO.class);

 

    private static Configuration conf = null;

 

    static {

       conf = HBaseConfiguration.create();

       // conf.addResource("hbase-site.xml");

       // hbase/conf/hbase-site.xmlhbase.zookeeper.quorum配置的值相同

       // HBASE_CONFIG.set("hbase.zookeeper.quorum", "10.1.1.1");

       // hbase/conf/hbase-site.xmlhbase.zookeeper.property.clientPort配置的值相同

       // HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");

       // conf = HBaseConfiguration.create(HBASE_CONFIG);

 

    }

 

    /**

     *

     * create table

     *

     * @param tablename

     * @param cfs

     *            like the table column , HColumnDescriptor stand for the

     *            column's schema

     * @throws IOException

     */

    public static void createTable(String tablename, String[] cfs)

           throws IOException {

       HBaseAdmin admin = new HBaseAdmin(conf);

       if (admin.tableExists(tablename)) {

           LOG.error("The table is already exist.");

           throw new IOException("The table is already exist.");

       } else {

           HTableDescriptor tableDesc = new HTableDescriptor(tablename);

           for (int i = 0; i < cfs.length; i++) {

              tableDesc.addFamily(new HColumnDescriptor(cfs[i])); // column

           }

           admin.createTable(tableDesc);

           LOG.info("Create table " + tablename + " success");

 

       }

    }

 

    /**

     *

     * drop table

     *

     * @param tablename

     *

     * @throws IOException

     */

    public static void deleteTable(String tablename) throws IOException {

       try {

           HBaseAdmin admin = new HBaseAdmin(conf);

           admin.disableTable(tablename);

           admin.deleteTable(tablename);

       } catch (MasterNotRunningException e) {

           e.printStackTrace();

       } catch (ZooKeeperConnectionException e) {

           e.printStackTrace();

       }

    }

 

    /**

     * add a row .

     *

     * @param tablename

     * @param cfs

     */

    public static void writeRow(String tablename, String[] cfs) {

       try {

           HTable table = new HTable(conf, tablename);

           Put put = new Put(Bytes.toBytes("rows1"));

           for (int j = 0; j < cfs.length; j++) {

              put.add(Bytes.toBytes(cfs[j]),

                     Bytes.toBytes(String.valueOf(1)),

                     Bytes.toBytes("value_1"));

              table.put(put);

           }

       } catch (IOException e) {

           e.printStackTrace();

       }

    }

 

    /**

     * delete a record .

     *

     * @param tablename

     * @param rowkey

     * @throws IOException

     */

    public static boolean deleteRow(String tablename, String rowkey)

           throws IOException {

       HTable table = new HTable(conf, tablename);

       Delete d1 = new Delete(rowkey.getBytes());

       table.delete(d1);

       return true;

    }

 

 

    /**

     * search the all rows for table

     *

     * @param tablename

     * @return

     * @throws IOException

     */

    public static List<HBaseVO> scaner(String tablename) throws IOException {

       List<HBaseVO> list = new ArrayList<HBaseVO>();

       HBaseVO vo = null;

       HTable table = new HTable(conf, tablename);

       Scan s = new Scan();

       ResultScanner rs = table.getScanner(s);

       for (Result r : rs) {

           KeyValue[] kv = r.raw();

           for (int i = 0; i < kv.length; i++) {

              list.add(CommonUtil.changeKeyValueToHBaseVo(kv[i]));

           }

       }

       return list;

    }

 

    /**

     * select the hbase by rowKey , a row also may map to many HBaseVO

     *

     * @param tablename

     * @param rowKey

     * @return

     * @throws Exception

     */

    public static List<HBaseVO> selectByRowKey(String tablename, String rowKey) throws Exception {

       List<HBaseVO> list = new ArrayList<HBaseVO>();

       HTable table = new HTable(conf, tablename);

       Get g = new Get(Bytes.toBytes(rowKey));

       Result r = table.get(g);

       for (KeyValue kv : r.raw()) {

           list.add(CommonUtil.changeKeyValueToHBaseVo(kv));

       }

       return list;

    }

 

    /*

     * rowKey + family + qualifier , may be the unique.

     */

    public static HBaseVO getUniqueHBaseVOs(String tablename, String rowKey, String family,String qualifier) throws Exception {

       HTable table = new HTable(conf, tablename);

       Get g = new Get(Bytes.toBytes(rowKey));

       g.addColumn(Bytes.toBytes(family), Bytes.toBytes(qualifier));

       Result r = table.get(g);

       for (KeyValue kv : r.raw()) {

           return CommonUtil.changeKeyValueToHBaseVo(kv);

       }

       return null;

    }

   

   

    /*

     * actually , family equal column in hbase

     */

    public static List<HBaseVO> selectByRowKeyAndFamily(String tablename, String rowKey, String column) throws Exception {

       List<HBaseVO> list = new ArrayList<HBaseVO>();

       HTable table = new HTable(conf, tablename);

       Get g = new Get(Bytes.toBytes(rowKey));

       g.addFamily(Bytes.toBytes(column));  // actually , family equal column in hbase

       Result r = table.get(g);

       for (KeyValue kv : r.raw()) {

           list.add(CommonUtil.changeKeyValueToHBaseVo(kv));

       }

       return list;

    }

 

    //Filter , complex select .

    /**

     * for example , for the hbase's table 'scores' ,  records

     *

     * ROW                          COLUMN+CELL                                                                     

     * Jerry                       column=course:art, timestamp=1301294630194, value=80                            

     * Jerry                       column=course:math, timestamp=1301294630132, value=100                          

     * Jerry                       column=grade:, timestamp=1301294630073, value=2                                 

     * Jim                         column=course:art, timestamp=1301294630363, value=97                            

     * Jim                         column=course:math, timestamp=1301294630305, value=100  

     * Jim                         column=grade:, timestamp=1301294630247, value=3   

     *

     *

     * the code as follow :

     *

     *  List<String> arr=new ArrayList<String>();  

     *  arr.add("course,art,97");  

     *  arr.add("course,math,100");  

     *  HBaseBasic03.selectByFilter("scores",arr); 

     * 

     *  will return the

     *  Jim                         column=course:art, timestamp=1301294630363, value=97 

     *  Jim                         column=course:math, timestamp=1301294630305, value=100 

     *  Jerry                       column=course:math, timestamp=1301294630132, value=100 

     * 

     *  these tree cells.

     * 

     * 

     * @param tablename

     * @param arr

     * @throws IOException

     */

    public static List<HBaseVO> selectByFilter(String tablename, List<String> arr)

           throws IOException {

       List<HBaseVO> list = new ArrayList<HBaseVO>();

       HTable table = new HTable(conf, tablename);

       FilterList filterList = new FilterList();

       Scan s1 = new Scan();

       for (String v : arr) { // 各个条件之间是“与”的关系

           String[] s = v.split(",");

           filterList.addFilter(new SingleColumnValueFilter(Bytes

                  .toBytes(s[0]), Bytes.toBytes(s[1]), CompareOp.EQUAL, Bytes

                  .toBytes(s[2])));

           // 添加下面这一行后,则只返回指定的cell,同一行中的其他cell不返回

           s1.addColumn(Bytes.toBytes(s[0]), Bytes.toBytes(s[1]));

       }

       s1.setFilter(filterList);

       ResultScanner ResultScannerFilterList = table.getScanner(s1);

       for (Result rr = ResultScannerFilterList.next(); rr != null; rr = ResultScannerFilterList

              .next()) {

           for (KeyValue kv : rr.list()) {

              list.add(CommonUtil.changeKeyValueToHBaseVo(kv));

           }

       }

       return list;

    }

 

    public static void main(String[] args) {

       try {

           String tablename = "test";

           List<HBaseVO> list = scaner(tablename);

           for (HBaseVO vo : list) {

              LOG.info(vo);

           }

          

           LOG.info("=============1========================");

          

           list = selectByRowKey(tablename, "row1");

           for (HBaseVO vo : list) {

              LOG.info(vo);

           }

          

           LOG.info("=============2========================");

          

           list =  selectByRowKeyAndFamily(tablename, "row1", "data");

           for (HBaseVO vo : list) {

              LOG.info(vo);

           }

          

           LOG.info("=============3========================");

          

           List<String> arr = new ArrayList<String>();

           arr.add("data,1,value1");  

           arr.add("data,2,value2"); 

           list = selectByFilter(tablename, arr);

           for (HBaseVO vo : list) {

              LOG.info(vo);

           }

          

           LOG.info("=============4========================");

          

          

           HBaseVO vo = getUniqueHBaseVOs(tablename, "row1", "data","1");

           LOG.info(vo);

          

           LOG.info("============5========================");

          

          

           // String newtable = "tmp";

           // String[] columns = new String[] {"f1","f2","f3","f4"};

           // createTable(newtable,columns);

       } catch (Exception e) {

           e.printStackTrace();

       }

    }

}

 

 

 

7、集群下开发HBase

 

基本上访问那些是不变的,变的是hbase-site.xml

 

如以下配置:

<?xml version="1.0"?>

<configuration>

       <!-- <property> <name>hbase.rootdir</name> <value>hdfs://192.168.1.146:2182/hbase</value>

              <description>The directory shared by RegionServers. </description> </property>

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

       <property>

              <name>hbase.cluster.distributed</name>

              <value>true</value>

       </property>

       <property>

              <name>hbase.rootdir</name>

              <value>hdfs://svr2:9000/hbase</value>

       </property>

       <property>

              <name>hbase.zookeeper.quorum</name>

              <value>svr2,svr4,svr3</value>

       </property>

       <property>

              <name>hbase.zookeeper.property.clientPort</name>

              <value>2181</value>

       </property>

 

       <!-- <property> <name>hbase.tmp.dir</name> <value>E:/HSS/hbase-0.90.5/tmp/hbase/tmp</value>

              <description></description> </property> -->

 

 

       <!-- <property> <name>hbase.zookeeper.quorum</name> <value>192.168.1.146</value>

              </property> -->

</configuration>

 

 

此外,在windows下,

还需要在C:\WINDOWS\system32\drivers\etc下的HOSTS文件增加ip

 

127.0.0.1 localhost

192.168.1.144 svr1

192.168.1.146 svr2

192.168.1.145 svr3

192.168.1.147 svr4

 

即可。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值