语言HBase简介

参考:http://blog.csdn.net/songyefei/article/details/7397296

参考 
http://hbase.apache.org/book.html\#\_architecture

首数据交换

Architecture

透过前少首的求学,我们了解了WCF通信的一部分基本原理,我们清楚,WCF服务端和客户端通过并享元数据(包括服务协定、服务器终结点消息)在有限只终结点上成立通道从而进行通信。我们透过手写代码(或安排)的措施也服务端编写了初数据信息,没有依赖元数据交换就兑现了通信。然而以实际上采用中,元数据往往是成千上万之,而且重修元数据的干活吗是不值得的,因此一定会就此到正数据交换的法门吃客户端获取元数据,本篇我们就来更询问一下初次数据和元数据交换。

65. Overview

1.
首届数据是怎样提供的

65.1. NoSQL?

HBase是如出一辙种植”NoSQL”数据库。“NoSQL”一般指的长短关系项目数据库,我们知道,关系项目数据库支持SQL,也就是说HBase不支持SQL。非关系型数据库来广大栽,BerkeleyDB是同一种植本地非关系型数据库,然而,HBase是分布式数据库。从技术上来讲,HBase更像是“Data
Store”,而未是“Data
Base”,因为它们缺少许多关联项目数据库的特点,比如:列类型、辅助索引、触发器、查询语言等等。(PS:意思是,从技术之角度谈,HBase更如一个多少存储,而不像数据库)

HBase集群扩展通过长RegionServer来实现。如果一个集群从10扩大至20个RegionServer,那么,不仅仅是储存容量增加一倍,连处理能力为会增加一倍。对于涉嫌项目数据库而言,也可以为此scale做到这样,但是需要指出的凡,这需要专门的硬件和存储设备。HBase特性如下:

  • 大一致性读写:HBase不是一个“最终一致性”的多少存储。这使她重切合高快的汇聚任务。
  • 活动分区:HBase的表通过region被分布在汇聚众多中,而region是半自动拆分并更分布数据行的。
  • 自动RegionServer容灾
  • Hadoop/HDFS集成:HBase支持HDFS作为其的分布式文件系统
  • MapReduce:HBase支持通过MapReduce基于HBase作为数据源的大量之并行处理
  • Java Client API:HBase支持通过Java
    API编程的方法来做客
  • Thrift/REST
    API:HBase也支撑Thrift和REST这样的非Java的客户端
  • Block Cache and Bloom Filters
  • Operational
    Management:HBase提供web界面

   
我们理解,元数据包括了若与劳务端进行通信的持有消息,包括劳动协定接口、服务端终结点地址、绑定等信息,它指出了客户端应该到哪里去探寻服务与哪些调用服务的全套线索。但是服务端是何许公布该元数据的吧?
    答案是采取WSDL文件,WSDL即Web Service Description
Language,Web服务描述语言,它是一个XML文件,在这文件中按照一定之专业来针对Web
Service进行描述,他是合W3C标准的,因为WCF是于规划呢供不同平台调用的劳务框架,所以客户端可能是未微软平台的,比如Java什么的。因此WCF必须以WSDL这种国际标准的叙述道来叙述服务才能够让过多底平台所访问。

65.2. When Should I Use HBase?

并无是所有的题材还合乎用HBase

第一、确保您生出足的数额。如果您闹巨额的多寡实行,那么HBase是一个毋庸置疑的挑。如果您唯有来数千还是百万的数目,那么用传统的关联项目数据库可能又好,因为实际你的这些数据或许只待一个或少只节点就会处理得完,这样的话集众多中之别的节点就处于空闲状态。

亚、确保您免需要用到干项目数据库的表征(比如:固定类型的排、辅助索引、事务、查询语言等等)。基于关系项目数据库构建的以不能够经过简单的更动JDBC驱动来传到HBase中。从RDBMS到HBase是全相反的有数学设计。

其三、确保您生出足够的硬件。因为当DataNode数量仅次于5的时段HDFS将不克正常办事了。

 

65.3. What Is The Difference Between HBase and Hadoop/HDFS?

HDFS是一个分布式的文件系统,适合储存大文件,但其不克提供便捷的个性化的以文书被寻找。HBase是构建于HDFS基础之上的,并且她支持针对大表的着之笔录进行快速搜索和更新。HBase内部以数据存放于HDFS中于索引的“StoreFiles”上因为供应高速搜索。

2.
元数据交换的进程是哪的

69. Master

HMaster是Master Server的一个落实。Master
Server负责监视集众多被有的RegionServer实例,并且她呢是具备元数据变动的一个对外接口。在分布式集众多中,典型的Master运行在NameNode那台机器及。

在WCF服务端的周转时,有平等组类库随时待命把劳动之处女数据输出为WSDL描述提供给请求者,只要来客户端按照服务端约定的方法来呼吁求元数据,服务端立即将服务运行时状态写照成WSDL文件提供。客户端取的其实即便是WSDL文件(还有有框架描述文件XSD),客户端将到文件后再也利用自己之章程来解读WSDL,把他翻译成客户端可用之源代码或安排文件,这时客户端就取得了劳动之编程模型,通过有代理类,客户端还是好像调用本地对象同用WCF服务。

69.3. Interface

HMasterInterface接口是操作元数据的要接口,提供以下操作:

  • Table (createTable, modifyTable,
    removeTable, enable, disable)
  • ColumnFamily (addColumn, modifyColumn,
    removeColumn)
  • Region (move, assign, unassign)

  • RegionServer


HRegionServer是RegionServer的落实,它承担服务并管制regions。在分布式集众多中,一个RegionServer通常运行在一个DataNode上。

 

70.1. Interface

HRegionRegionInterface既涵盖数据的操作为隐含region维护的操作

  • Data (get, put, delete, next,
    etc.)
  • Region (splitRegion, compactRegion,
    etc.)

从而整个经过是这么:客户端向服务端请求元数据交换–>服务端运行时将首数据编写成WSDL文件提供–>客户端取文件–>客户端翻译文件–>客户端根据翻译结果大本地类代码和安排–>客户端取劳动的本地编程模型。这就是是首家数据交换的过程。

70.5. RegionServer Splitting Implementation

region
server处理写请求,它们叫累积在内存中一个深受memstore的地方。一旦memstore文件满了,内容将为形容到磁盘上作为store
file。这个波称为memstore flush。随着store
file的不断积累,RegionServer将合并它们成为那个文件,以缩减store
file的数。在每次刷新或者联合之后,region中数据的数码会生反。RegionServer根据切分策略来查是否region太老了或应当给切分。

逻辑上,region切分的操作特别简短。找一个宜的位置,将region中之数码切分成稀单新的region。然而,这个处理的历程并无略。当切分发生的时光,数据并无是当下被再写到者中心创建的幼女region上。

 

 

  1. 获得WSDL

71. Regions

语言 1

每当微软平台受到,有一定量栽方法来进展首数据交换,第一凡以服务引用,第二凡以初数据实用工具(svcutil.exe)来展开,我们先修这家伙。

73. HDFS

语言 2

这家伙得以于Windows
SDK中找到,具体位置为 C:\Program Files\Microsoft
SDKs\Windows\v6.0\Bin,如果你闹VS2010,可以启动VS2010底命令行工具,这样便可以当旁目录下利用是序。

Data Model

以HBase中,数据为贮存在表中,有行和排。这些术语和涉嫌项目数码发生部分叠,当然就不是一个十分好之类比,但是其对咱们考虑HBase的代表一个多维的map很有帮。

Table

  由多行组成

Row

  HBase中的行由一个row
key和一个还是多个列成。Rows在存储的下照row
key的字典序存储。正因为如此,row
key的计划性虽显得异常关键。基于这一点,相关连的执行相互之间有附近。通常,row
key是一个网站的域名。如果您的row
key是域名,你应当因倒置的措施囤它们(比如:org.apache.www,org.apache.mail,org.apache.jira等等)。这样的话,所有的apache域名在表中是相近之职务,而休是被子域名的首先局部分离。

Column

  HBase中的列由一个列簇和一个列修饰符组成,它们中用冒号分隔(:)

Column Family

  列簇由同多样的排和她的价值组成,这是根据性考虑的。每一个列簇都发出雷同雨后春笋之储存属性,比如:是否它的价值应叫缓存到外存中,它们的数目怎样给压缩,它们的row
key怎样被编码,等等。表中的各国一行还出同等之列簇,即使一个加的行在给定的列簇上尚无存储任何数据。

Column Qualifier

  一个列修饰符被上加至列簇中为让指定的数额有提供索引。假设,给得的列簇是content,那么,一个列修饰符可能是content:html,其它的还发或是content:pdf。虽然,列簇在表创建的时段就固定了,但是列修饰符是休确定的,而且不同的履行或有梗塞之列修饰符。

Cell

语言 3

Timestamp

  一个timestamp被描绘在每个value的一旁,它是一个value的本子修饰符。默认的,timestamp代表数量被RegionServer写副的年月,你啊得以描写多少的时候指定一个不等之timestamp值

咱们先行押一个例证,就是咱们在前面几篇中成立的IIS服务HelloWCFService,它为我夜宿在IIS中。

20. Conceptual View

语言 4

以斯事例中,有一个表叫“webtable”,它含两实践数据(com.cnn.www和com.example.www)和老三单列簇(contents,anchor,people)。对于第一执(com.cnn.www),anchor包含两排(anchor:cssnsi.com,anchor:my.look.ca),contents包含一列(contents:html)。row
key为“com.cnn.www”的实行有5只本子,而row
key为“com.example.www”的履行有1个版本。contents:html列包含全体网站的HTML。

在这个表中的亏欠的无非元格并无占用空间

下图是一个拟,目的在于说明说明方面我们所说之,便于我们理解:

语言 5

源代码如下(HelloWCF.cs):

21. Physical View

则,在概念上,表看起如是单排一行的,但大体及,它们是准列簇于储存的。一个初的列修饰符可以以肆意时刻被补加到列簇中。

语言 6

每当前的定义视图中之空的只是元格是勿让积存的。因此,请求contents:html列并且timestamp为t8将回没有价值。然而,如果不点名timestamp,那么有列的大部分值都见面给归。如果指定多独本子,只有找到的率先个照面被归,因为数量是据timestamp降序存储的。

using System;  
using System.ServiceModel;  

namespace LearnWCF  
{  
    [ServiceContract]  
    public interface IHelloWCF  
    {  
        [OperationContract]  
        string HelloWCF();  
    }  

    public class HelloWCFService : IHelloWCF  
    {  
        public string HelloWCF()  
        {  
            return "Hello WCF!";  
        }  
    }  
} 

22. Namespace

一个命名空间是说明底一个逻辑分组

部署文件(web.config)如下:

23. Table

    <configuration>  
      <system.serviceModel>  
        <services>  
          <service name="LearnWCF.HelloWCFService" behaviorConfiguration="metadataExchange">  
            <endpoint address="" binding="wsHttpBinding" contract="LearnWCF.IHelloWCF"/>  
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>  
          </service>  
        </services>  
        <behaviors>  
          <serviceBehaviors>  
            <behavior name="metadataExchange">  
              <serviceMetadata httpGetEnabled="true"/>  
            </behavior>  
          </serviceBehaviors>  
        </behaviors>  
      </system.serviceModel>  
    </configuration>  

24. Row

履以row key字典升序存储

以浏览器被输入服务地方会如下图所示:

25. Column Family

Columns in Apache HBase
are grouped into column
families.

列簇中存有的排成员还有一样的前缀。例如,列courses:history和courses:math都是courses这个列簇的分子。用冒号分隔列簇和列修饰符。列簇前缀必须由得以打印输出的字符组成。列修饰符可以由任意字节组成。列簇必须于表明被定义的时候就扬言好,因此列就未待以说明创建的时刻定义了,并且可以天天新增。

物理上,所有的列簇成员给贮存于共。

语言 7

26. Cells

A {row, column, version} tuple exactly specifies a cell in
HBase.

看网提示的那么行命令了么?系统于报告我们什么运用svcutil.exe来博首批数据。我们现在尝试一下,首先打开VS2010命令行:

27. Data Model Operations

数据模型有4独重大操作,分别是Get、Put、Scan和Delete。这些操作是利用在表上的。

起来–>所有程序–>Visual Studio
2010–>Visual Studio Tools–>Visual Studio命令行提示

27.1. Get

返指定行的特性

语言 8

27.2. Put

补偿加新的行到表中,或者更新就有的推行

 

27.3. Scans

环顾特定属性的多行

 语言 9

27.4. Delete

自从表中删除一行

 

28. Versions

在HBase中,{row,column,version}可以规定一个单元格。当行和排于抽成字节的下,版本用long类型指定。在HBase中,版本为降序存储,所以,最近底值总是第一给察觉。

咱们导航及一个目下准备取首届数据文件。

29. Sort Order

对拥有的数据模型操作,HBase以多少为储存时之逐条返回。首先按行排序,其次按列簇,再从按列修饰符,最后是timestamp。(PS:前是三独凡是字典升序,最后一个timestamp是降序)

咱俩少无循浏览器提供给咱们的法门做,因为按照好方式做就将收获WSDL和翻译WSDL为客户端代码合在一起了,我们事先拿走WSDL元数据文件,看看她是什么体统的。我们仍如下的命做:

30. Column Metadata

非存储列的冠数据,因此,HBase可以支持各一行来为数不少排列,行与实施之间可以生多种不同的排。

svcutil.exe /t:metadata http://localhost/iisservice/hellowcfservice.svc?wsdl  

31. Joins

HBase不直join操作,至少不支持关系项目数据库那种join。在HBase中,读取数据通过Get和Scan。

俺们进入了一个参数/t:metadata
表示仅输出元数据,不转变代码。命令的实施进程如下:

33. Schema Creation

语言 10

语言 11

34. Table Schema Rules Of Thumb

  • regions的高低在10~50GB之间
  • cells的大小非越10MB
  • 一流的,每个表底列簇以1~3单次。HBase的阐发不应当叫规划改为模仿关系项目数据库的说明
  • 一个有1~2单列簇的表所拥有的regions大约于50~100个左右
  • 维持君的列簇名字尽可能的差

  • HBase as a MapReduce Job Data Source and Data Sink


HBase可以视作MapReduce作业的数据源。对于读写HBase的MapReduce作业,建议采用TableMapper和TableReducer。

设若您运行HBase作为数据源的MapReduce作业,你用在部署文件中指定表和列名。

当你打HBase读取数据的时光,TableInputFormat请求regions的列表并且作为一个map。

 

可以看变化了3只文件,包括个别只架构文件及一个WSDL文件,这些就是劳务端元数据的描述了,所有的客户端请求到的实在都是者文件。WSDL的正经比较多,关于其的始末,我们今后再次拓展来拘禁,不过大概的开拓看一下哪怕能望有些与劳动协定、绑定、操作这些东西有关的地方。

54. HBase MapReduce Examples

 

  1. 翻译WSDL文件

WSDL是一个XML文件,其实就是个公文文件,客户端必须以那个仍好之平台特色将他翻成本地代码文件来使。svcutil当然会供者意义。在wsdl文件所在目录下下如下的下令就足以将WSDL文件翻译成本地代码文件:

 svcutil *.wsdl *.xsd

顾名思义,就是冲当前目录下的保有的WSDL文件与XSD文件来好成客户端代码文件。过程会是这般

语言 12

可以视,生成了一个cs文件和一个配备文件,这些虽是因WSDL文件翻译成的客户端代码文件了。打开来看望,一定非生疏,就是使ClientBase<>来深成一个客户端代理类并把终结点的信息配置于了.config文件里。把当时点儿个公文包含在客户端的门类受到连把output.config改化app.config就足以了。

  1. 重好地利用初数据交换工具

前面我们了解了动用svcuitl.exe来博取WSDL并翻译成客户端代码的进程。实际上这有限步可同二为同。直接实施下的命可以一直得到客户端文件:

svcutil.exe http://localhost/iisservice/hellowcfservice.svc?wsdl

这么它们便不见面生成WSDL而直接扭转客户端文件了。

而本这样的方法变的文件或者无顶适合我们的求,我们得长有的参数来指定我们输出的文本称:

svctuil.exe /out:ClientProxy.cs /config:app.config http://localhost/iisservice/hellowcfservice.svc?wsdl 

然输出的文件我们即便足以一直包含在客户端项目面临利用了。

  1. 下劳务引用

骨子里以服务引用和用svcutil.exe生成的客户端模型是一样的,不过服务引用保留了WSDL文件(以及部分相关的七七八八的文本),没有svcutil.exe来得那舒心,但是它和VS2010集成,使用起来颇简单,而且当服务发生变化时,只需要右击服务引用选择创新服务就可以再次生载WSDL了

 

  1. 进展一点点

 

当服务端,公开元数据是内需安排的,不同之布局会造成元数据明白的计不同。

 

咱只要牢记,WCF服务端公开元数据必须有所简单个规格:

 

(1) 为服务添加ServiceMetadata行为。

 

(2) 打开元数据交换终结点。

 

两边不可或缺。

 

WCF的明元数据的手法主要发生三三两两种植:

 

第一种:通过HTTP GET方法。

 

立即就是在前文中我们看底法,我们好行使HTTP
Get的道来获取WSDL文件就以服务地址.svc后面与达到?wsdl的措施直接求到WSDL文件。我们得一直在浏览器中输入服务端地址.svc?wsdl,浏览器就是直拿走了WSDL文件并也我们来得出了。

语言 13

 

再有相应的框架描述文件(XSD)

 语言 14

倘想使这种元数据明白办法,必须安排服务的ServiceMetadata行为,并点名httpGetEnabled

“true”,而长数据明白终结点不必配置,系统会自动配置一个,配置文件的写法如下:

    <configuration>  
      <system.serviceModel>  
        <services>  
          <service name="LearnWCF.HelloWCFService" behaviorConfiguration="metadataExchange">  
            <endpoint address="" binding="wsHttpBinding" contract="LearnWCF.IHelloWCF"/>  
          </service>  
        </services>  
        <behaviors>  
          <serviceBehaviors>  
            <behavior name="metadataExchange">  
              <serviceMetadata httpGetEnabled="true"/>  
            </behavior>  
          </serviceBehaviors>  
        </behaviors>  
      </system.serviceModel>  
    </configuration>  

于这种布局下,访问元数据的不二法门是造访下面的地方:

http://localhost/iisservice/hellowcfService.svc?wsdl 

仲栽:通过MEX元数据交换终结点。

以这种艺术下,我们先是使力保服务具有ServiceMetadata行为,但是httpGetEnabled可以不必为true。此外我们尚待呢劳动显式地长一个终结点,这个终结点的地方、绑定和协定都是点名的我们不克改

<endpoint address=”mex” binding=”mexHttpBinding” contract=”IMetadataExchange” /> 

布文件的写法如下:

    <configuration>  
      <system.serviceModel>  
        <services>  
          <service name="LearnWCF.HelloWCFService" behaviorConfiguration="metadataExchange">  
            <endpoint address="" binding="wsHttpBinding" contract="LearnWCF.IHelloWCF"/>  
            <endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>  
          </service>  
        </services>  
        <behaviors>  
          <serviceBehaviors>  
            <behavior name="metadataExchange">  
              <serviceMetadata />  
            </behavior>  
          </serviceBehaviors>  
        </behaviors>  
      </system.serviceModel>  
    </configuration>  

要是依照这种安排,我们务必依如下地址来聘公开之首数据:

http://localhost/iisservice/hellowcfservice.svc/mex

顾,由于无被HTTP
GET,我们不能够于浏览器中一直输入这个地址来获取WSDL了(会提示400误),我们须通过svcutil.exe或加上服务引用的方来拜会。

运svcutil.exe或劳务引用的时刻可以不关注元数据明白办法是HTTP
GET还是Mex,他们会自动搜索到适当的法子,只需要将服务之svc文件地点输入就得了,但是我们应该亮,这点儿种元数据明白的法门是发生分之。

  1. 总结

由此今天的念,我们进一步了解了WCF元数据的和元数据交换的原理。虽然我们在实际上工程中都见面同时该利用初数据交换工具来帮提高效率,但是就背后有的有着环节呢是我们应控制的。

有关资源

MSDN关于Svcutil.exe用法的文档

http://msdn.microsoft.com/zh-cn/library/aa347733.aspx

 

发表评论

电子邮件地址不会被公开。 必填项已用*标注

网站地图xml地图