《MapReduce 2.0源码分析与编程实战》一2.1 从头开始

本文涉及的产品
服务治理 MSE Sentinel/OpenSergo,Agent数量 不受限
简介:

本节书摘来异步社区《MapReduce 2.0源码分析与编程实战》一书中的第2章,第2.1节,作者: 王晓华 责编: 陈冀康,更多章节内容可以访问云栖社区“异步社区”公众号查看。

2.1 从头开始

HBase实战
TwitBase存储3种简单的核心数据元素,即用户(user)、推帖(twit)和关系(relationship)。用户是TwitBase的中心。用户登录进入应用系统,维护用户信息,通过发帖与其他用户互动。推帖是TwitBase中用户公开发表的短文。推帖是用户间互动的主要模式。用户通过互相转发产生对话。所有互动的“粘合剂”就是关系。关系连接用户,使用户很容易读到其他用户的推帖。本章关注点是用户和推帖,下一章将讨论关系。

关于Java

本书绝大部分代码都是用Java编写的。有时我们使用伪代码来帮助理解概念,但是工作代码是Java。使用HBase,Java是现实的选择。整个Hadoop系列,包括HBase,都使用Java。HBase客户端函数库是Java,MapReduce函数库也是Java。HBase的部署需要优化JVM性能。但是可以使用非Java和非JVM的语言来访问HBase,第6章会讨论这些内容。

2.1.1 创建表

现在开始搭建TwitBase,为存储用户奠定一个基础。HBase是一个在表里存储数据的数据库,所以我们从创建users表开始。首先进入HBase Shell:


q8

Shell打开一个到HBase的连接,给出提示符。在Shell提示符上,创建你的第一张表:


q7


可以想到'users'是表的名字,但是'info'是什么呢?像关系型数据库里的表一样,HBase的表也是按照行(row)和列(column)来组织的。HBase中的列和关系型数据库中的有些不同。HBase中的列组成列族(column family)。info就是users表的一个列族。HBase中的表必须至少有一个列族。它们之中,列族直接影响HBase数据存储的物理特性。因此,创建表时必须至少指定一个列族。表创建后列族还可以更改,但是这么做很麻烦。后面我们会详细讨论列族,现在只需要知道users表足够简单,只有一个列族,就可以了。

2.1.2 检查表模式

如果你熟悉关系型数据库,会马上注意到,HBase创建表时没提到任何列或者数据类型。除了列族名字,HBase什么也不需要。这就是HBase经常被称作无模式数据库的原因。

你可以要求HBase列出所有已创建的表来验证users表已经创建成功:


q6


list命令可以显示存在的表,HBase也可以提供表的更多细节。使用describe命令可以看到这个表的所有的默认参数:


q5


Shell显示表有两类属性信息:表的名字和列族的列表。每个列族有许多相应的配置信息细节,这些就是我们前面提到的物理特性。现在先不管这些细节,我们随后研究它们。

HBase Shell

虽然HBase Shell主要用于管理任务,但它拥有丰富的特性。它用JRuby实现,可以使用整个Java客户端API。你可以使用help命令进一步发掘Shell的功能。

2.1.3 建立连接

尽管Shell很好用,但是谁会愿意用Shell命令实现TwitBase呢?聪明的HBase开发人员知道这一点,他们为HBase提供了一个全面的Java客户端库。也有面向其他语言的类似的API,第6章会讨论。现在我们使用Java。打开users表连接的Java代码如下所示:


q4

类似于Shell的做法,构造函数HTable读取默认配置信息来定位HBase。然后定位之前你创建的users表,返回一个句柄。

你也可以传递一个定制的配置对象给HTable对象:


q3

这等同于让HTable对象自己创建配置信息对象。你可以像下面这样设定参数来定制配置信息:


q2


HBase客户端配置信息

HBase客户端应用需要有一份HBase配置信息来访问HBase——ZooKeeper quorum地址。你可以手工设定这个配置如下:

`  ``MyConf.set("hbase.zookeeper.quorum","serverip");`

ZooKeeper以及客户端与HBase集群之间的交互会在下一章深入研究分布式HBase存储时讨论到。现在你只需要知道HBase配置信息可以通过两种方式获取,一种是Java客户端从类路径里的hbase-site.xml文件里获取配置信息,另一种是通过在连接中显式设定配置信息来获取。如果你没有指定配置信息,就像示例代码里那样,客户端就会使用默认配置信息,把localhost作为ZooKeeper quorum 地址。单机模式中,指的就是你用来验证本书内容的机器,这正是你需要的配置信息。

2.1.4 连接管理

创建一张表实例是个开销很大的操作,需要占用一些网络资源。与直接创建表句柄相比,使用连接池更好一些。连接从连接池里分配,然后再返回到连接池。实践中,使用HTablePool比直接使用HTable更为常见:


q1

当你完成工作关闭表时,连接资源会返回到连接池里。

没有数据的表是没有用的,现在我们存储一些数据。

相关实践学习
云数据库HBase版使用教程
  相关的阿里云产品:云数据库 HBase 版 面向大数据领域的一站式NoSQL服务,100%兼容开源HBase并深度扩展,支持海量数据下的实时存储、高并发吞吐、轻SQL分析、全文检索、时序时空查询等能力,是风控、推荐、广告、物联网、车联网、Feeds流、数据大屏等场景首选数据库,是为淘宝、支付宝、菜鸟等众多阿里核心业务提供关键支撑的数据库。 了解产品详情: https://cn.aliyun.com/product/hbase   ------------------------------------------------------------------------- 阿里云数据库体验:数据库上云实战 开发者云会免费提供一台带自建MySQL的源数据库 ECS 实例和一台目标数据库 RDS实例。跟着指引,您可以一步步实现将ECS自建数据库迁移到目标数据库RDS。 点击下方链接,领取免费ECS&RDS资源,30分钟完成数据库上云实战!https://developer.aliyun.com/adc/scenario/51eefbd1894e42f6bb9acacadd3f9121?spm=a2c6h.13788135.J_3257954370.9.4ba85f24utseFl
相关文章
|
缓存 分布式计算
MapReduce执行机制之Map和Reduce源码分析
MapReduce执行机制之Map和Reduce源码分析
138 0
|
分布式计算 Java
MapReduce中map并行度优化及源码分析
mapTask并行度的决定机制   一个job的map阶段并行度由客户端在提交job时决定,而客户端对map阶段并行度的规划的基本逻辑为:将待处理数据执行逻辑切片(即按照一个特定切片大小,将待处理数据划分成逻辑上的多个split),然后每一个split分配一个mapTask并行实例处理。
1225 0
|
存储 分布式计算
MapReduce源码分析之Task中关于对应TaskAttempt存储Map方案的一些思考
        我们知道,MapReduce有三层调度模型,即Job——>Task——>TaskAttempt,并且:         1、通常一个Job存在多个Task,这些Task总共有Map Task和Redcue Task两种大的类型(为简化描述,Map-Only作业、JobSetup Task等复杂的情况这里不做考虑);         2、每个Task可以尝试运行1-n此,而且通常很多情况下都是1次,只有当开启了推测执行原理且存在拖后腿Task,或者Task之前执行失败时,Task才执行多次。
1125 0
|
资源调度 分布式计算 调度
Yarn源码分析之MapReduce作业中任务Task调度整体流程(一)
        v2版本的MapReduce作业中,作业JOB_SETUP_COMPLETED事件的发生,即作业SETUP阶段完成事件,会触发作业由SETUP状态转换到RUNNING状态,而作业状态转换中涉及作业信息的处理,是由SetupCompletedTransition来完成的,它主要做了...
1107 0
|
分布式计算 调度
MapReduce源码分析之作业Job状态机解析(一)简介与正常流程浅析
        作业Job状态机维护了MapReduce作业的整个生命周期,即从提交到运行结束的整个过程。Job状态机被封装在JobImpl中,其主要包括14种状态和19种导致状态发生的事件。         作业Job的全部状态维护在类JobStateInternal中,如下所示: publ...
975 0
|
资源调度 分布式计算 存储
Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(一)
        我们知道,如果想要在Yarn上运行MapReduce作业,仅需实现一个ApplicationMaster组件即可,而MRAppMaster正是MapReduce在Yarn上ApplicationMaster的实现,由其控制MR作业在Yarn上的执行。
1081 0
|
资源调度 分布式计算 调度
Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(二)
        本文继《Yarn源码分析之MRAppMaster上MapReduce作业处理总流程(一)》,接着讲述MapReduce作业在MRAppMaster上处理总流程,继上篇讲到作业初始化之后的作业启动,关于作业初始化主体流程的详细介绍,请参见《Yarn源码分析之MRAppMaster上MapReduce作业初始化解析》一文。
808 0