环境准备

需 要环境:
PC-1  Suse Linux 9             10.192.1.1
PC-2  Suse Linux 9             10.192.1.2
PC-3  Suse Linux 9             10.192.1.3
PC-4  Suse Linux 9             10.192.1.4
       其中,PC-1namenode节点,PC-2PC-3PC-4datanode节点。
       并且已经安装成功Hadoop-0.20.1及以上版本。

安装包准备

需要安装包:
zookeeper-3.2.1.tar.gzstable版本)
hbase-0.20.1.tar.gzstable版本)

安装步骤

  安 装和配置ZooKeeper
HBase0.20.0开始,需要首先安装ZooKeeper。从apache上下载zookeeper-3.2.1.tar.gzStable版本),解压到/home/hdfs/目录下。
1),在namenode节点新建zookeeper目录,在该目录下新建myid文件。
2),在zookeeper-3.2.1/conf目录下,拷贝zoo_sample.cfgzoo.cfg。在zoo.cfg中将dataDir改为/home/hdfs/zookeeper,在文件末位添加所有的主机:
server.1=10.192.1.1:2888:3888
server.2=10.192.1.2:2888:3888
server.3=10.192.1.3:2888:3888
server.4=10.192.1.4:2888:3888
server.5=10.192.1.5:2888:3888
server.6=10.192.1.62888:3888
3)用scp命令将namenode节点的的/home/hdfs/ zookeeper-3.2.1/home/hdfs/ zookeeper拷贝到其余所有主机的/home/hdfs目录下。
4)参照zoo.cfg中的配置,在各主机myid文件中写入各自的编号。如:10.192.1.11,10.192.1.2写入2
5)在所有节点上执行bin/zkServer.sh start, 分别启动。
执行bin/zkCli.sh -server xxx.xxx.xxx.xxx:2181,检查指定服务器是否成功启动。
安装和配置HBase
下载HBase 0.20.1版本,解压到namenode节点的/home/hdfs目录下。

配置说明

1)系统所有配置项的默认设置在hbase-default.xml中查看,如果需要修改配置项的值,在hbase-site.xml中添加配置项。
       在分布式模式下安装HBase,需要添加的最基本的配置项如下:
hbase.rootdir
hdfs://namenode.hdfs:54310/hbase
The directory shared by region servers.
hbase.cluster.distributed
true
The mode the cluster will be in. Possible values are
false: standalone and pseudo-distributed setups with managed Zookeeper
true: fully-distributed with unmanaged Zookeeper Quorum (see hbase-env.sh)
2)在conf/hbase-env.sh中修改添加配置项:
export JAVA_HOME=/usr/java/jdk1.6.0_16
export HBASE_MANAGES_ZK=false
export HBASE_CLASSPATH=/home/hdfs/hadoop-0.20.1/conf
并把~/hadoop-0.20.1/conf/hdfs-site.xml拷贝至~/hbase-3.2.1/conf/目录下。
3)将ZooKeeper的配置文件zoo.cfg添加到HBase所有主机的CLASSPATH中。
4)在conf/regionservers中添加hadoop-0.20.1/conf/slaves中所有的datanode节点。

启动

HadoopZooKeeperHBase之间应该按照顺序启动和关闭:启动Hadoop>启动ZooKeeper集群—>启动HBase>停止HBase>停止ZooKeeper集群—>停止Hadoop
namenode节点执行bin/hbase-daemon.sh,启动master。执行bin/start-hbase.shbin/stop-hbase.sh 脚本启动和停止HBase服务。

接口说明

       HBase按列存储结构化数据,支持建表、插入记录、查询记录、删除记录和索引操作等等,不支持连接和更新操 作。

开发步骤

引入JAR
Windows客户端编写JAVA程序操作HBase,需要引入一些JAR包。需要引入的JAR如下:hadoop-0.20.1-core.jarcommons-logging-1.0.4.jarcommons-logging-api-1.0.4.jarzookeeper-3.2.1.jarhbase-0.20.1.jarlog4j-1.2.15.jar
开发模式
在分布式模式下开发,在程序中 配置与HDFSZooKeeper的连接,即可对数据进行操作。
view plain copy to clipboard print ?
  1. import java.util.Date;  
  2. import java.text.SimpleDateFormat;  
  3. import java.io.IOException;  
  4. import java.awt.List;  
  5. import java.util.Map;  
  6. import java.util.NavigableMap;  
  7.   
  8. import org.apache.hadoop.hbase.HBaseConfiguration;  
  9. import org.apache.hadoop.hbase.HTableDescriptor;  
  10. import org.apache.hadoop.hbase.HColumnDescriptor;  
  11. import org.apache.hadoop.hbase.client.HBaseAdmin;  
  12. import org.apache.hadoop.hbase.client.HTable;  
  13.   
  14. import org.apache.hadoop.hbase.client.Put;  
  15. import org.apache.hadoop.hbase.client.Get;  
  16. import org.apache.hadoop.hbase.client.Scan;  
  17. import org.apache.hadoop.hbase.client.ResultScanner;  
  18. import org.apache.hadoop.hbase.client.Delete;  
  19. import org.apache.hadoop.hbase.client.Result;  
  20. import org.apache.hadoop.hbase.util.Bytes;  
  21.   
  22. public class HBaseManager {  
  23.     public static void main(String[] args) throws Exception{  
  24.         HBaseManager manager = new HBaseManager();  
  25.         manager.testGet();  
  26.     }  
  27.       
  28.     public void testQueryRS()throws Exception{  
  29.         HBaseConfiguration config = new HBaseConfiguration();  
  30.         config.set("hbase.master""10.192.1.1:60000");  
  31.         config.set("hbase.zookeeper.quorum""10.192.1.1");  
  32.   
  33.         HTable table = new HTable(config, "commodity");  
  34.   
  35.         System.out.println("Get Spin's commodity info");  
  36.   
  37.         Scan scanner = new Scan();  
  38.         scanner.addColumn(Bytes.toBytes("description"));  
  39.         scanner.setMaxVersions();     
  40.         ResultScanner rsScanner = table.getScanner(scanner);  
  41.         System.out.println(rsScanner.toString());  
  42.         Result rs = rsScanner.next();  
  43.         while(null != rs){  
  44.             System.out.println(rs.size());  
  45.             NavigableMap<byte[],NavigableMap<byte[],NavigableMapbyte[]>>> nMap = rs.getMap();     
  46.             NavigableMap<byte[],NavigableMapbyte[]>> columnMap = nMap.get(Bytes.toBytes("description"));     
  47.             NavigableMapbyte[]> qualMap = columnMap.get(new byte[]{});     
  48.               
  49.             if(qualMap.entrySet().size() > 0){  
  50.                 System.out.println("---------------------------");  
  51.                 for(Map.Entrybyte[]> m :qualMap.entrySet())     
  52.                 {       
  53.                     System.out.println("Value:"new String(m.getValue()));    
  54.                 }   
  55.             }  
  56.             rs = rsScanner.next();  
  57.         }  
  58.     }  
  59.       
  60.     public void testQueryCommodity()throws Exception{  
  61.         HBaseConfiguration config = new HBaseConfiguration();  
  62.         config.set("hbase.master""10.192.1.1:60000");  
  63.         config.set("hbase.zookeeper.quorum""10.192.1.1.203");  
  64.   
  65.         HTable table = new HTable(config, "commodity");  
  66.   
  67.         System.out.println("Get Spin's commodity info");  
  68.         Get mathGet = new Get(new String("Spin").getBytes());  
  69.         mathGet.addColumn(Bytes.toBytes("widgetname"));  
  70.         mathGet.setMaxVersions();     
  71.         Result rs = table.get(mathGet);     
  72.           
  73.         NavigableMap<byte[],NavigableMap<byte[],NavigableMapbyte[]>>> nMap = rs.getMap();     
  74.         NavigableMap<byte[],NavigableMapbyte[]>> columnMap = nMap.get(Bytes.toBytes("widgetname"));     
  75.         NavigableMapbyte[]> qualMap = columnMap.get(new byte[]{});     
  76.           
  77.         if(qualMap.entrySet().size() > 0){  
  78.             for(Map.Entrybyte[]> m :qualMap.entrySet())     
  79.             {       
  80.                 System.out.println("Value:"new String(m.getValue()));     
  81.                   
  82.                 break;  
  83.             }   
  84.         }  
  85.     }  
  86.       
  87.     public void test()throws Exception{  
  88.         HBaseConfiguration config = new HBaseConfiguration();  
  89.         config.set("hbase.master""10.192.1.1:60000");  
  90.         config.set("hbase.zookeeper.quorum""10.192.1.1");  
  91.         HBaseAdmin admin = new HBaseAdmin(config);  
  92.         HTable table = new HTable(config, "scores");  
  93.           
  94.         if (admin.tableExists("scores")){  
  95.                 System.out.println("drop table");  
  96.                 admin.disableTable("scores");  
  97.                 admin.deleteTable("scores");  
  98.         }  
  99.   
  100.         System.out.println("create table");  
  101.         HTableDescriptor tableDescripter = new HTableDescriptor("scores".getBytes());  
  102.         tableDescripter.addFamily(new HColumnDescriptor("grade"));  
  103.         tableDescripter.addFamily(new HColumnDescriptor("course"));  
  104.   
  105.         admin.createTable(tableDescripter);  
  106.           
  107.         System.out.println("add Tom's data");  
  108.           
  109.         Put tomPut = new Put(new String("Tom").getBytes());  
  110.         tomPut.add(new String("grade").getBytes(), new byte[]{}, new String("1").getBytes());  
  111.         tomPut.add(new String("grade").getBytes(), new String("math").getBytes(), new String("87").getBytes());  
  112.         tomPut.add(new String("course").getBytes(), new String("math").getBytes(), new String("97").getBytes());  
  113.         table.put(tomPut);  
  114.           
  115.         System.out.println("add Jerry's data");  
  116.           
  117.         Put jerryPut = new Put(new String("Jerry").getBytes());  
  118.         jerryPut.add(new String("grade").getBytes(), new byte[]{}, new String("2").getBytes());  
  119.         jerryPut.add(new String("grade").getBytes(), new String("math").getBytes(), new String("77").getBytes());  
  120.         jerryPut.add(new String("course").getBytes(), new String("math").getBytes(), new String("92").getBytes());  
  121.         table.put(jerryPut);  
  122.           
  123.         System.out.println("Get Tom's data");  
  124.         Get tomGet = new Get(new String("Tom").getBytes());  
  125.         Result tomResult = table.get(tomGet);  
  126.         System.out.println(tomResult.toString());  
  127.   
  128.         System.out.println("Get Tom's Math grade");  
  129.         Get mathGet = new Get(new String("Tom").getBytes());  
  130.         mathGet.addColumn(Bytes.toBytes("grade"));  
  131.         mathGet.setMaxVersions();     
  132.         Result rs = table.get(mathGet);     
  133.           
  134.         NavigableMap<byte[],NavigableMap<byte[],NavigableMapbyte[]>>> nMap = rs.getMap();     
  135.         NavigableMap<byte[],NavigableMapbyte[]>> columnMap = nMap.get(Bytes.toBytes("grade"));     
  136.         NavigableMapbyte[]> qualMap = columnMap.get(Bytes.toBytes("math"));     
  137.              
  138.         for(Map.Entrybyte[]> m :qualMap.entrySet())     
  139.         {     
  140.                  
  141.             System.out.println("TimeStamp:"+m.getKey());     
  142.             System.out.println("Value:"new String(m.getValue()));     
  143.         }   
  144.   
  145.         System.out.println("Delete a column");  
  146.         Delete deleteArt = new Delete(Bytes.toBytes("Tom"));  
  147.         deleteArt.deleteColumn(Bytes.toBytes("grade"), Bytes.toBytes("math"));  
  148.         table.delete(deleteArt);  
  149.     }  
  150.   
  151.     public void testScanner() throws IOException{  
  152.         HBaseConfiguration config = new HBaseConfiguration();  
  153.         config.set("hbase.master""10.192.1.1:60000");  
  154.         config.set("hbase.zookeeper.quorum""10.192.1.1");  
  155.   
  156.         HTable table = new HTable(config, "commodity");  
  157.   
  158.         System.out.println("Scan commodity info");  
  159.   
  160.         Scan scanner = new Scan();  
  161.         scanner.addColumn(Bytes.toBytes("widgetname"));  
  162.         scanner.addColumn(Bytes.toBytes("filename"));  
  163.         scanner.addColumn(Bytes.toBytes("description"));  
  164.         scanner.addColumn(Bytes.toBytes("createtime"));  
  165.         //scanner.setMaxVersions();   
  166.         //scanner.setMaxVersions(4);  
  167.         ResultScanner rsScanner = table.getScanner(scanner);  
  168.           
  169.         Result rs = rsScanner.next();  
  170.         for(;null != rs; rs = rsScanner.next()){  
  171.             System.out.println("rs.getRow()[" + new String(rs.getRow()) + "]");  
  172.             System.out.println("[" + new String(rs.getValue(Bytes.toBytes("widgetname"))) + "]");  
  173.             System.out.println("[" + new String(rs.getValue(Bytes.toBytes("filename"))) + "]");  
  174.             System.out.println("[" + new String(rs.getValue(Bytes.toBytes("description"))) + "]");  
  175.             String timeStr = new String(rs.getValue(Bytes.toBytes("createtime")));  
  176.             System.out.println("[" + timeStr + "]");  
  177.               
  178.             SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");  
  179.             try{  
  180.                 Date after = dateFormat.parse(timeStr);  
  181.                 System.out.println(after);  
  182.             }  
  183.             catch(Exception exp){  
  184.                 exp.printStackTrace();  
  185.             }  
  186.         }  
  187.     }  
  188.       
  189.     public void testGet()throws IOException{  
  190.         HBaseConfiguration config = new HBaseConfiguration();  
  191.         config.set("hbase.master""10.192.1.1:60000");  
  192.         config.set("hbase.zookeeper.quorum""10.192.1.1");  
  193.   
  194.         HTable table = new HTable(config, "commodity");  
  195.           
  196.         Get get = new Get(new String("xxxx.wgt").getBytes());  
  197.         get.addColumn(Bytes.toBytes("widgetname"));  
  198.         get.addColumn(Bytes.toBytes("filename"));  
  199.         get.addColumn(Bytes.toBytes("description"));  
  200.         get.addColumn(Bytes.toBytes("createtime"));  
  201.           
  202.         get.setMaxVersions(2);   
  203.         System.out.println("00000000000000");  
  204.         Result dbResult = table.get(get);  
  205.           
  206.         System.out.println("11111111111111");  
  207.         System.out.println(dbResult.size());  
  208.         System.out.println("2222222222222222");  
  209.         System.out.println(new String(dbResult.value()));  
  210.         System.out.println("3333333333333333");  
  211.         System.out.println(dbResult.containsColumn(Bytes.toBytes("description"), new byte[]{}));  
  212.         System.out.println("44444444444444444");  
  213.         System.out.println(dbResult.isEmpty());  
  214.         System.out.println("55555555555555555");  
  215.         System.out.println(dbResult.list());  
  216.         System.out.println("66666666666666666");  
  217.         System.out.println(dbResult.raw());  
  218.         System.out.println("77777777777777777");  
  219.         System.out.println(dbResult.toString());  
  220.         System.out.println("88888888888888888");  
  221.         System.out.println(dbResult.raw().clone());  
  222.         System.out.println("99999999999999999");  
  223.     }