springパッケージhbaseのコード実現


前に述べたspringパッケージのMongoDBコードの実現について説明しましたが、ここではspringパッケージのHbaseコードの実現について説明します。
hbaseの紹介:
ここでざっと話しますが、私たちが討論するポイントではありません。
HBaseは分布式のオープンソースデータベースで、HBaseはHadoopの上にBigtableのような能力を提供しています。HBaseはApacheのHadoopプロジェクトのサブプロジェクトです。HBaseは、一般的な関係データベースとは異なり、非構造データ記憶に適したデータベースである。もう一つの違いは、行に基づくパターンではなく、HBaseベースの列です。hbaseはbigtableのオープンソースパクリバージョンです。は、高信頼性、高機能、列記憶、伸縮性、リアルタイム読み書きを提供するデータベースシステムです。nosqlとRDBMSの間に介在しており、メインキーとメインキーのレンゲだけでデータを検索することができ、シングル行の事務のみをサポートしています。主に非構造化と半構造化の緩和データを保存するために用いられる。hadoopと同様に、Hbase目標は主に横方向の拡張に依存しており、安価な商用サーバーを絶えず増加させることで、計算能力と記憶能力を向上させる。hbaseの印象は無限に保存して、Keyによって読みます。
じゃ、私たちのJavaプログラムではhbaseはどうやって使うべきですか?
まず、
hbaseのjarパッケージを導入して、Maven項目でない場合は、単独で以下のフォーマットでhbaseのjarパッケージをダウンロードしてあなたのプロジェクトに導入することができます。

<dependency> 
  <groupId>org.apache.hbase</groupId> 
  <artifactId>hbase-client</artifactId> 
  <version>0.96.2-hadoop2</version> 
</dependency>
次:
hbaseのspring中の配置を増加します。
1.    hbase-site.xmlプロファイルを追加します。以下は共通配置で、具体的な各パラメータの意味は百度以下で、ここでは詳しく説明しません。

<?xml version="1.0" encoding="UTF-8"?> 
<configuration> 
  <!--<property>--> 
    <!--<name>hbase.rootdir</name>--> 
    <!--<value>hdfs://ns1/hbase</value>--> 
  <!--</property>--> 
  <property> 
    <name>hbase.client.write.buffer</name> 
    <value>62914560</value> 
  </property> 
  <property> 
    <name>hbase.client.pause</name> 
    <value>1000</value> 
  </property> 
  <property> 
    <name>hbase.client.retries.number</name> 
    <value>10</value> 
  </property> 
  <property> 
    <name>hbase.client.scanner.caching</name> 
    <value>1</value> 
  </property> 
  <property> 
    <name>hbase.client.keyvalue.maxsize</name> 
    <value>6291456</value> 
  </property> 
  <property> 
    <name>hbase.rpc.timeout</name> 
    <value>60000</value> 
  </property> 
  <property> 
    <name>hbase.security.authentication</name> 
    <value>simple</value> 
  </property> 
  <property> 
    <name>zookeeper.session.timeout</name> 
    <value>60000</value> 
  </property> 
  <property> 
    <name>zookeeper.znode.parent</name> 
    <value>ZooKeeper  HBase  ZNode</value> 
  </property> 
  <property> 
    <name>zookeeper.znode.rootserver</name> 
    <value>root-region-server</value> 
  </property> 
  <property> 
    <name>hbase.zookeeper.quorum</name> 
    <value>zookeeper  </value> 
  </property> 
  <property> 
    <name>hbase.zookeeper.property.clientPort</name> 
    <value>2181</value> 
  </property> 
</configuration> 
2.spring-config-hbase.xmlファイルを新規に作成し、springの配置ファイルにこのファイルImportを入れてください。

<?xml version="1.0" encoding="UTF-8"?> 
<beans 
    xmlns="http://www.springframework.org/schema/beans" 
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xmlns:hdp="http://www.springframework.org/schema/hadoop" 
    xsi:schemaLocation="http://www.springframework.org/schema/beans 
http://www.springframework.org/schema/beans/spring-beans-3.0.xsd 
http://www.springframework.org/schema/hadoop 
http://www.springframework.org/schema/hadoop/spring-hadoop.xsd 
"> 
  <hdp:configuration resources="classpath:spring/hbase-site.xml" /> 
  <hdp:hbase-configuration configuration-ref="hadoopConfiguration" /> 
  <bean id="htemplate" class="org.springframework.data.hadoop.hbase.HbaseTemplate"> 
 


<!--     ,spring     ,     mongodb      ,xxxTemplate  --> 
    <property name="configuration" ref="hbaseConfiguration"> 
    </property> 
  </bean> 
  <bean class="com..HbaseDaoImpl" id="hbaseDao"> 
    <constructor-arg ref="htemplate"/> 
  </bean> 
</beans> 
最後:
私たちは私たちのHbaseDaoImple類を書き換えることができます。ここでhbaseを操作するコードロジックを実現できます。その中のprism:OrderInfoは私達の表名で、fは列族の名称で、OrderInfoの属性は列族の下の列名です。order Infoは私のプログラム定義のbeanです。あなたは自分の要求によって自分のbeanを定義できます。

public class HbaseDaoImpl{ 
 
 
  private HbaseTemplate hbaseTemplate; 
 
  private HConnection hconnection = null; 
 
  public HbaseDaoImpl(HbaseTemplate htemplate) throws Exception { 
    if (hconnection == null) { 
      hconnection = HConnectionManager.createConnection(htemplate.getConfiguration()); 
    } 
    if (this.hbaseTemplate == null) { 
      this.hbaseTemplate = htemplate; 
    } 
  } 
  public void writeDataOrderinfo(final OrderInfo orderInfo) { 
    HTableInterface table = null; 
    try { 
      table = hconnection.getTable(Bytes.toBytes("prism:orderInfo")); 
      Put p = new Put(Bytes.toBytes( orderInfo.getHistoryId())); 
      p.add(Bytes.toBytes("f"), Bytes.toBytes("id"), Bytes.toBytes(orderInfo.getId())); 
      p.add(Bytes.toBytes("f"), Bytes.toBytes("historyId"), Bytes.toBytes(orderInfo.getHistoryId())); 
      p.add(Bytes.toBytes("f"), Bytes.toBytes("orderId"), Bytes.toBytes(orderInfo.getOrderId())); 
      p.add(Bytes.toBytes("f"), Bytes.toBytes("orderDirection"), Bytes.toBytes(orderInfo.getOrderDirection())); 
      p.add(Bytes.toBytes("f"), Bytes.toBytes("overStatus"), Bytes.toBytes(orderInfo.getOverStatus())); 
      p.add(Bytes.toBytes("f"), Bytes.toBytes("orgArea"), Bytes.toBytes(orderInfo.getOrgArea())); 
      table.put(p); 
 
    } catch (IOException e) { 
      throw new RuntimeException(e); 
    } finally { 
      if (table != null) { 
        try { 
          table.close(); 
        } catch (IOException e) { 
          e.printStackTrace(); 
        } 
      } 
    } 
  } 
  public OrderInfo getOrderInfoByRowkey(String rowKey) { 
    Get get = new Get(Bytes.toBytes(rowKey)); 
    Scan scan = new Scan(get); 
    List<OrderInfo> list = hbaseTemplate.find("prism:orderInfo", scan, new RowMapper<OrderInfo>() { 
      @Override 
      public OrderInfo mapRow(Result result, int rowNum) throws Exception { 
        OrderInfo orderInfo = new OrderInfo(); 
        orderInfo.setId(Bytes.toString(result.getValue(Bytes.toBytes("f"), Bytes.toBytes("id")))); 
        orderInfo.setHistoryId(Bytes.toString(result.getValue(Bytes.toBytes("f"), Bytes.toBytes("historyId")))); 
        orderInfo.setOrderId(Bytes.toLong(result.getValue(Bytes.toBytes("f"), Bytes.toBytes("orderId"))));        
        return orderInfo; 
      } 
 
    }); 
    if(list.size() > 0){ 
      return list.get(0); 
    }else{ 
      return null; 
    } 
         
  } 
 
  public List<OrderInfo> getOrderInfoByRange(String start_rowKey,String stop_rowKey) { 
    Scan scan = new Scan(); 
    scan.setStartRow(Bytes.toBytes(start_rowKey)); 
    scan.setStopRow(Bytes.toBytes(stop_rowKey)); 
    HTableInterface table = null; 
    ResultScanner rs = null; 
    List<OrderInfo> list = new ArrayList<OrderInfo>(); 
    try { 
      table = hconnection.getTable(Bytes.toBytes("prism:orderInfo")); 
      rs = table.getScanner(scan); 
      for(Result result : rs){ 
        OrderInfo orderInfo = new OrderInfo(); 
        orderInfo.setId(Bytes.toString(result.getValue(Bytes.toBytes("f"), Bytes.toBytes("id")))); 
        orderInfo.setHistoryId(Bytes.toString(result.getValue(Bytes.toBytes("f"), Bytes.toBytes("historyId")))); 
        orderInfo.setOrderId(Bytes.toLong(result.getValue(Bytes.toBytes("f"), Bytes.toBytes("orderId")))); 
        orderInfo.setOrderDirection(Bytes.toString(result.getValue(Bytes.toBytes("f"), Bytes.toBytes("orderDirection")))); 
        list.add(orderInfo); 
      } 
    } catch (IOException e) { 
      e.printStackTrace(); 
    }finally{ 
      rs.close(); 
    } 
    return list;     
  } 
  public HbaseTemplate getHbaseTemplate() { 
    return hbaseTemplate; 
  } 
 
  public void setHbaseTemplate(HbaseTemplate hbaseTemplate) { 
    this.hbaseTemplate = hbaseTemplate; 
  } 
 
} 

注:プログラムでは、springパッケージのHbaseTemplateを使ってもいいし、元のhconnectionなどの操作方法を使ってもいいです。コードの例ではどのように操作してもいいです。個人的には、springパッケージのHbaseTemplateはあまり有効ではないと思います。例えば、要求するたびに、zookeeperクラスタを再リンクします。原生方式を提案します。
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。