Apache HBase
来源:互联网 发布:前锦网络信息技术 编辑:程序博客网 时间:2024/04/28 10:30
+_+ another note to read through HBase documentation... endless
http://hbase.apache.org/
This project's goal is the hosting of very large tables -- billions of rowsXmillions of columns -- atop clusters of commodity hardware.
HBase is really more a "Data Store" than "Data Base"
"NoSQL" is a general term meaning that the database isn't an RDBMS which supports SQL
JAVA API doc:
http://hbase.apache.org/apidocs/index.html
http://hbase.apache.org/book/architecture.html#arch.overview
When Should I Use HBase?HBase isn't suitable for every problem.
First, make sure you have enough data. If you have hundreds of millions or billions of rows, then HBase is a good candidate. If you only have a few thousand/million rows, then using a traditionalRDBMS might be a better choice due to the fact that all of your data might wind up on a single node (or two) and the rest of the cluster may be sitting idle.
0.97 - Chinese Version User Guide
http://abloz.com/hbase/book.html#shell_tricks
0.94 - Apache HBase official reference guide
http://hbase.apache.org/0.94/book.html
一个 {row, column, version} 元组是HBase中的一个单元(cell
)
hadoop1.2
hive0.11
sqoop1.4.3
HBase 0.94.6
build restful data service, and also hbase APIs la
1.HBase 0.94.6
http://abloz.com/hbase/book.html#client
Run on HDFS, Zookeeper
Master, RegionServer
---------------------------------------------------
Migrate Oracle to HBase
---------------------------------------------------
//Oracle Table Structure
msgId globalId msgSerial sysId ctryCde grpCde recBic msgType bsCde msgCrtDt msgCapDt msgStatus fullMsgTxt ghssMsg errCde errMsg remarks msgTsmDt msgAckDt swiftRef lastUptDt
//HBase Table - SME_OUT_MSG - Version 0.1
rowKey, columnFamily, version
?_msgId2, cf:{ctryCde, grpCde, msgType, ...}, t0
?_msgId1, cf:{ctryCde, grpCde, msgType, ...}, t9
?_msgId1, cf:{ctryCde, grpCde, msgType, ...}, t8
//? design to balance loading among more region servers..
//it's free to add column into cf - 当表或列族改变时(如 region size, block size), 当下次存在主紧缩及存储文件重写时起作用。
尽量使列族名小,最好一个字符。(如 "d" 表示 data/default).
最好还是用短属性名 (e.g., "via") 保存到HBase
让行键短到可读即可,这样对获取数据有用(e.g., Get vs. Scan)。
//HBase Java Sample Codes
Configuration config = HBaseConfiguration.create();
HBaseAdmin admin = new HBaseAdmin(conf);
String table = "myTable";
admin.disableTable(table);
HColumnDescriptor cf1 = ...;
admin.addColumn(table, cf1); // adding new ColumnFamily
HColumnDescriptor cf2 = ...;
admin.modifyColumn(table, cf2); // modifying existing ColumnFamily
admin.enableTable(table);
2.
It is recommended that the server follow a URL structure for resources as follows:
/{Table}/{id}
http://dojotoolkit.org/reference-guide/1.9/dojo/store/JsonRest.html
HTTP methods Store Actions HTTP Response in Store
GET get, query 404 Not found
DELETE remove 204 success, 404
PUT add, put(has identity property) n/a
POST add, put n/a
require(["dojo/store/JsonRest"], function(JsonRest){
var store = new JsonRest({
target: "/Table"
});
var self = this;
var results = store.query("foo=bar").then(function(data){
results.total.then(function(total){
console.log("total results: ", total);
console.log("go on and use data ", data, " with this ", self);
});
});
});
- how about its ACID
http://archfan.sinaapp.com/2012/04/18/acid-in-hbase/
==Hbase API==
@Spring Hbase
http://docs.spring.io/spring-data/hadoop/docs/2.0.0.M1/api/org/springframework/data/hadoop/hbase/HbaseTemplate.html
http://docs.spring.io/spring-hadoop/docs/1.0.1.RELEASE/reference/html/hbase.html
@HBase JAVA API Example:
package control.hb;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;import java.util.List;import javax.servlet.ServletException;import javax.servlet.annotation.WebServlet;import javax.servlet.http.HttpServlet;import javax.servlet.http.HttpServletRequest;import javax.servlet.http.HttpServletResponse;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.util.Bytes;/** * Servlet implementation class HbaseServlet */@WebServlet("/HbaseServlet")public class HbaseServlet extends HttpServlet {private static final long serialVersionUID = 1L;PrintWriter writer = null;private static Configuration conf = null; static {Configuration HBASE_CONFIG = new Configuration();HBASE_CONFIG.set("hbase.zookeeper.quorum", "192.168.1.146");HBASE_CONFIG.set("hbase.zookeeper.property.clientPort", "2181");conf = HBaseConfiguration.create(HBASE_CONFIG);} /** * @see HttpServlet#HttpServlet() */ public HbaseServlet() { super(); // TODO Auto-generated constructor stub }/** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubdoPost(request, response);}/** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {// TODO Auto-generated method stubresponse.setContentType("text/html;charset=GBK");writer = response.getWriter();try{String tableName = "scores";String[] familys = {"grade", "course"};this.creatTable(tableName, familys);this.addRecord(tableName, "zkb", "grade", "", "5");this.addRecord(tableName, "zkb", "course", "", "90");this.addRecord(tableName, "zkb", "course", "math", "90");this.addRecord(tableName, "zkb", "course", "art", "50");this.addRecord(tableName, "paul", "grade", "", "10");this.addRecord(tableName, "zkb", "course", "ABC", "100");writer.println("=====get one record======");writer.println("<br>");this.getOneRecord(tableName, "zkb");writer.println("=====show all record======");writer.println("<br>");this.getAllRecord(tableName);writer.println("=====del one record======");writer.println("<br>");this.delRecord(tableName, "zkb");writer.println("=====show all record======");writer.println("<br>");this.getAllRecord(tableName);writer.close();} catch(Exception e) {e.printStackTrace();}}public void creatTable(String tableName, String[] familys) throws Exception {HBaseAdmin admin = new HBaseAdmin(conf);if(admin.tableExists(tableName)) {System.out.println(writer==null);writer.println("table already exists!");writer.println("<br>");} else {HTableDescriptor tableDessc = new HTableDescriptor(tableName);for(int i=0; i<familys.length; i++){tableDessc.addFamily(new HColumnDescriptor(familys[i]));}admin.createTable(tableDessc);writer.println("create table " + tableName + "ok.");writer.println("<br>");}}public void addRecord(String tableName, String rowKey, String family, String qualifier, String value) throws Exception {try{HTable table = new HTable(conf, tableName);Put put = new Put(Bytes.toBytes(rowKey));put.add(Bytes.toBytes(family), Bytes.toBytes(qualifier), Bytes.toBytes(value));table.put(put);writer.println("insert record " + rowKey + " to table " + tableName + "ok.");writer.println("<br>");} catch(IOException e) {e.printStackTrace();}}public void deleteTable(String tableName) throws Exception {try{HBaseAdmin admin = new HBaseAdmin(conf);admin.disableTable(tableName);admin.deleteTable(tableName);writer.println("delete table " + tableName + "ok.");writer.println("<br>");} catch(MasterNotRunningException e){e.printStackTrace();} catch(ZooKeeperConnectionException e){e.printStackTrace();}}public void delRecord (String tableName, String rowKey) throws Exception {try{HTable table = new HTable(conf, tableName);List list = new ArrayList();Delete del = new Delete(rowKey.getBytes());list.add(del);table.delete(list);writer.println("delete record " + rowKey + " ok.");writer.println("<br>");//table.close();} catch(Exception e) {e.printStackTrace();}}public void getOneRecord (String tableName, String rowKey) throws Exception {try{HTable table = new HTable(conf, tableName);Get get = new Get(rowKey.getBytes());Result rs = table.get(get);for(KeyValue kv : rs.raw()){writer.println(new String(kv.getRow()) + " ");writer.println("<br>");writer.println(new String(kv.getFamily()) + " ");writer.println("<br>");writer.println(new String(kv.getQualifier()) + " ");writer.println("<br>");writer.println(kv.getTimestamp() + " ");writer.println("<br>");writer.println(new String(kv.getValue()) + " ");writer.println("<br>");}//table.close();} catch(Exception e) {e.printStackTrace();}}public void getAllRecord (String tableName) throws Exception {try{HTable table = new HTable(conf, tableName);Scan s = new Scan();ResultScanner ss = table.getScanner(s);for(Result r : ss){for(KeyValue kv : r.raw()){writer.println(new String(kv.getRow()) + " ");writer.println("<br>");writer.println(new String(kv.getFamily()) + " ");writer.println("<br>");writer.println(new String(kv.getQualifier()) + " ");writer.println("<br>");writer.println(kv.getTimestamp() + " ");writer.println("<br>");writer.println(new String(kv.getValue()) + " ");writer.println("<br>");}}//table.close();} catch(Exception e) {e.printStackTrace();}}}
- Apache HBase
- Apache HBase
- Apache HBase
- Apache Spark - Apache HBase Connector
- The Apache HBase Book
- Apache HBase AssignmentManager Improvements
- Apache HBase快照介绍
- Apache HBase Configuration
- Apache Hbase installation
- Apache HBase Write Path
- Apache HBase 入门教程
- Apache HBase配置介绍
- Apache HBase 入门教程
- Apache HBase region拆分
- Apache HBase 入门教程
- 【Apache HBase系列】HBASE 分布式安装
- hbase org.apache.hadoop.hbase.ClockOutOfSyncException
- hbase启动错误org.apache.hadoop.hbase.TableExistsException: hbase:namespace
- Css样式详解--字体样式和链接样式【已经熟记,形成文本】
- 小白学网络之三_TCPIP协议之IP协议
- trainging contest#1(2011大连现场赛)I BY bly
- 进程间通信(个人总结)
- Sprite Kit 模拟物理世界
- Apache HBase
- Oracle总结(持续更新中)
- 静静的做事,目标一定可以达到
- rails to_json
- 工作中关于合作一些的思考
- struts2 xml 验证出现 Invalid field value for field 的解决方法(转)
- 2013长沙网络赛J题 Candies(差分约束或数学规律)#by zh
- 网页和网站的制作流程
- C++类的静态成员详细讲解