HBASE伪集群安装、java api、问题解决

来源:互联网 发布:网络低的回合制游戏 编辑:程序博客网 时间:2024/06/17 19:01

一、HBASE伪集群安装
1、hbase下载:http://www.apache.org/dyn/closer.cgi/hbase/
这里下载的是hbase-0.94.27.tar.gz

2、解压hbase-0.94.27.tar.gz 并改名为habase(改为比较简短为了好配置)
配置profile:

JAVA_HOME=/home/jdkPATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin:$HBASE_HOME/binCLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jarexport JAVA_HOMEexport PATHexport CLASSPATHalias cdha='cd /home/hadoop'export HADOOP_HOME=/home/hadoopexport HBASE_HOME=/home/hbase

3、配置hbase-env.sh

export JAVA_HOME=/home/jdk/export HBASE_MANAGES_ZK=true

4、配置hbase-site.xml

<configuration><property>  <name>hbase.rootdir</name>  <value>hdfs://hadoop0:9000/hbase</value> </property> <property>  <name>hbase.cluster.distributed</name>  <value>true</value> </property> <property>  <name>hbase.zookeeper.quorum</name>  <value>hadoop0</value>  </property> <property>  <name>dfs.replication</name>  <value>1</value> </property> </configuration>

5、启动hbase(要先启动hadoop)
启动成功可以看到3个hbase进程:HMaster、HQuorumPeer、HRegionServer

[root@hadoop0 conf]# jps9026 HMaster2672 JobTracker2371 NameNode8961 HQuorumPeer2783 TaskTracker2480 DataNode2590 SecondaryNameNode9172 HRegionServer9644 Jps

6、hbase的shell操作
使用hbase shell进入,shell命令自行百度

7、hbase api
加入hadoop的jar、hbase的jar

这里写图片描述
这里写图片描述

package com.guolin.test;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.HTablePool;  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.Filter;  import org.apache.hadoop.hbase.filter.FilterList;  import org.apache.hadoop.hbase.filter.SingleColumnValueFilter;  import org.apache.hadoop.hbase.filter.CompareFilter.CompareOp;  import org.apache.hadoop.hbase.util.Bytes;  public class HBaseCRUD {      public static Configuration configuration;      static {          configuration = HBaseConfiguration.create();          configuration.set("hbase.rootdir", "hdfs://hadoop0:9000/hbase");          configuration.set("hbase.zookeeper.quorum", "hadoop0");      }      public static void main(String[] args) {           createTable("test1");  //         insertData("wujintao");          // QueryAll("wujintao");          // QueryByCondition1("wujintao");          // QueryByCondition2("wujintao");          //QueryByCondition3("wujintao");          //deleteRow("wujintao","abcdef");  //        deleteByCondition("wujintao","abcdef");      }      /**      * 创建表      * @param tableName      */      public static void createTable(String tableName) {          System.out.println("start create table ......");          try {              HBaseAdmin hBaseAdmin = new HBaseAdmin(configuration);              if (hBaseAdmin.tableExists(tableName)) {// 如果存在要创建的表,那么先删除,再创建                  hBaseAdmin.disableTable(tableName);                  hBaseAdmin.deleteTable(tableName);                  System.out.println(tableName + " is exist,detele....");              }              HTableDescriptor tableDescriptor = new HTableDescriptor(tableName);              tableDescriptor.addFamily(new HColumnDescriptor("column1"));              tableDescriptor.addFamily(new HColumnDescriptor("column2"));              tableDescriptor.addFamily(new HColumnDescriptor("column3"));              hBaseAdmin.createTable(tableDescriptor);          } catch (MasterNotRunningException e) {              e.printStackTrace();          } catch (ZooKeeperConnectionException e) {              e.printStackTrace();          } catch (IOException e) {              e.printStackTrace();          }          System.out.println("end create table ......");      }      /**      * 插入数据      * @param tableName      */      public static void insertData(String tableName) {          System.out.println("start insert data ......");          HTablePool pool = new HTablePool(configuration, 1000);          HTable table = (HTable) pool.getTable(tableName);          Put put = new Put("112233bbbcccc".getBytes());// 一个PUT代表一行数据,再NEW一个PUT表示第二行数据,每行一个唯一的ROWKEY,此处rowkey为put构造方法中传入的值          put.add("column1".getBytes(), null, "aaa".getBytes());// 本行数据的第一列          put.add("column2".getBytes(), null, "bbb".getBytes());// 本行数据的第三列          put.add("column3".getBytes(), null, "ccc".getBytes());// 本行数据的第三列          try {              table.put(put);          } catch (IOException e) {              e.printStackTrace();          }          System.out.println("end insert data ......");      }      /**      * 删除一张表      * @param tableName      */      public static void dropTable(String tableName) {          try {              HBaseAdmin admin = new HBaseAdmin(configuration);              admin.disableTable(tableName);              admin.deleteTable(tableName);          } catch (MasterNotRunningException e) {              e.printStackTrace();          } catch (ZooKeeperConnectionException e) {              e.printStackTrace();          } catch (IOException e) {              e.printStackTrace();          }      }      /**      * 根据 rowkey删除一条记录      * @param tablename      * @param rowkey      */       public static void deleteRow(String tablename, String rowkey)  {          try {              HTable table = new HTable(configuration, tablename);              List list = new ArrayList();              Delete d1 = new Delete(rowkey.getBytes());              list.add(d1);              table.delete(list);              System.out.println("删除行成功!");          } catch (IOException e) {              e.printStackTrace();          }      }       /**       * 组合条件删除       * @param tablename       * @param rowkey       */       public static void deleteByCondition(String tablename, String rowkey)  {              //目前还没有发现有效的API能够实现 根据非rowkey的条件删除 这个功能能,还有清空表全部数据的API操作      }      /**      * 查询所有数据      * @param tableName      */      public static void QueryAll(String tableName) {          HTablePool pool = new HTablePool(configuration, 1000);          HTable table = (HTable) pool.getTable(tableName);          try {              ResultScanner rs = table.getScanner(new Scan());              for (Result r : rs) {                  System.out.println("获得到rowkey:" + new String(r.getRow()));                  for (KeyValue keyValue : r.raw()) {                      System.out.println("列:" + new String(keyValue.getFamily())                              + "====值:" + new String(keyValue.getValue()));                  }              }          } catch (IOException e) {              e.printStackTrace();          }      }      /**      * 单条件查询,根据rowkey查询唯一一条记录      * @param tableName      */      public static void QueryByCondition1(String tableName) {          HTablePool pool = new HTablePool(configuration, 1000);          HTable table = (HTable) pool.getTable(tableName);          try {              Get scan = new Get("abcdef".getBytes());// 根据rowkey查询              Result r = table.get(scan);              System.out.println("获得到rowkey:" + new String(r.getRow()));              for (KeyValue keyValue : r.raw()) {                  System.out.println("列:" + new String(keyValue.getFamily())                          + "====值:" + new String(keyValue.getValue()));              }          } catch (IOException e) {              e.printStackTrace();          }      }      /**      * 单条件按查询,查询多条记录      * @param tableName      */      public static void QueryByCondition2(String tableName) {          try {              HTablePool pool = new HTablePool(configuration, 1000);              HTable table = (HTable) pool.getTable(tableName);              Filter filter = new SingleColumnValueFilter(Bytes                      .toBytes("column1"), null, CompareOp.EQUAL, Bytes                      .toBytes("aaa")); // 当列column1的值为aaa时进行查询              Scan s = new Scan();              s.setFilter(filter);              ResultScanner rs = table.getScanner(s);              for (Result r : rs) {                  System.out.println("获得到rowkey:" + new String(r.getRow()));                  for (KeyValue keyValue : r.raw()) {                      System.out.println("列:" + new String(keyValue.getFamily())                              + "====值:" + new String(keyValue.getValue()));                  }              }          } catch (Exception e) {              e.printStackTrace();          }      }      /**      * 组合条件查询      * @param tableName      */      public static void QueryByCondition3(String tableName) {          try {              HTablePool pool = new HTablePool(configuration, 1000);              HTable table = (HTable) pool.getTable(tableName);              List<Filter> filters = new ArrayList<Filter>();              Filter filter1 = new SingleColumnValueFilter(Bytes                      .toBytes("column1"), null, CompareOp.EQUAL, Bytes                      .toBytes("aaa"));              filters.add(filter1);              Filter filter2 = new SingleColumnValueFilter(Bytes                      .toBytes("column2"), null, CompareOp.EQUAL, Bytes                      .toBytes("bbb"));              filters.add(filter2);              Filter filter3 = new SingleColumnValueFilter(Bytes                      .toBytes("column3"), null, CompareOp.EQUAL, Bytes                      .toBytes("ccc"));              filters.add(filter3);              FilterList filterList1 = new FilterList(filters);              Scan scan = new Scan();              scan.setFilter(filterList1);              ResultScanner rs = table.getScanner(scan);              for (Result r : rs) {                  System.out.println("获得到rowkey:" + new String(r.getRow()));                  for (KeyValue keyValue : r.raw()) {                      System.out.println("列:" + new String(keyValue.getFamily())                              + "====值:" + new String(keyValue.getValue()));                  }              }              rs.close();          } catch (Exception e) {              e.printStackTrace();          }      }  }  

8、java api错误解决
如果遇到hadoop linux环境的hosts配置正确,在linuxshell操作hbase正常,但是eclipse还是找不到主机错误:这里写图片描述
之前在linux绑定的主机名需要在本地windows hosts文件中绑定,格式:IP linux主机名 即可
这里写图片描述

0 0
原创粉丝点击