在开发测试中使用HBaseMiniCluster

MiniHbaseCluster测试Hbase BulkLoad 在调试MR任务或者操作Hbase表时,往往我们需要将本地代码打成Jar包,然后上传到Hadoop集群上去跑,这样不仅麻烦,还不方便调试,Hadoop开发团队提供了在本地调试代码的API,就是MiniHbaseCluster, 在本机JVM中模拟一个Hadoop集群,与真实环境的Hadoop集群并没有区别,方便我们提交任务和Debug。笔者要把Hive表中的数据生成HFile文件,然后BulkLoad 阅读详情

Author: Shi, Shaofeng

      为了方便开发人员,HBase以及其它Hadoop组件提供了Mini Cluster的运行方式:在一个JVM里模拟运行Hadoop集群,包括HDFS,Zookeeper,HBase 以及MapReduce;如果你需要运行一些简单的代码或测试案例,或者想在IDE中通过断点来调试,那么这时候用Mini Cluster就再合适不过了;HBase的单元测试中已经频繁使用这种方法;本文将介绍 Mini Cluster的几种简单使用:

  • 启动、停止HBase Mini Cluster
  • 创建HTable,输入以及查询数据
  • 运行MapReduce任务
  • 导入导出HTable数据

1.准备

      要使用HBase Mini Cluster,最方便的办法是使用HBASETestingUtility类;这个类提供了启动、停止、创建、配置等实用方法来管理Mini Cluster;如果你的项目是用Maven管理,只要加入此依赖就可以:

   <dependencies>

      …

      <dependency>
         <groupId>org.apache.hbase</groupId>
         <artifactId>hbase-server</artifactId>
              <version>0.98.8-hadoop2</version>
              <scope>provided</scope>
      </dependency>
      <dependency>
         <groupId>org.apache.hbase</groupId>
         <artifactId>hbase-testing-util</artifactId>
         <version>0.98.8-hadoop2</version>
         <scope>provided</scope>
      </dependency>
…
   </dependencies>

 2.启动、停止Mini Cluster

      首先构造一个HBaseTestingUtility的实例,然后调用它的startMiniCluster()方法;它会启动一个HDFS的Mini Cluster以及一个Zookeeper的Mini Cluster,启动完成后返回一个MiniHBaseCluster对象;

 

HBaseTestingUtility UTIL = new HBaseTestingUtility();

MiniHBaseCluster hbaseCluster = UTIL.startMiniCluster();

      在使用完以后,执行shutdownMiniCluster()方法来停止Mini Cluster,释放各种资源;运行期间生成的各种临时文件也会被清理;

3.创建HTable,输入以及查询数据

HBaseTestingUtility也提供了方法供管理HBase,例如创建和删除HTable;

HTable table = UTIL.createTable(Bytes.toBytes("mytable");

…

UTIL.deleteTable(Bytes.toBytes("mytable"));

 

      你也可以通过此Mini Cluster的Configuration,来创建HBase的连接实例,从而开始创建HTable等一系列操作,与操作正常HBase无异:

Configuration config = hbaseCluster.getConf();

HConnection HConnectionManager.createConnection(config);

HBaseAdmin hbaseAdmin = new HBaseAdmin(conn);

HTableDescriptor desc = new HTableDescriptor(TableName.valueOf("mytable"));

…

hbaseAdmin.createTable(desc);

      在HTable创建以后,就可以按照HBase Java API做数据的插入、删除、查找;此处不做细数;

4.运行MapReduce任务

       上面提到的startMiniCluster()方法,默认不会启动MapReduce集群;如果要运行Map Reduce任务,需要启动Mini MR Cluster:

UTIL.startMiniMapReduceCluster();

      这个时候,一个有两个TaskTracker的MR集群就准备就绪了,可以提交MapReduce任务到它上面运行;这里以Hadoop的word count为例,把它移植到Mini Cluster上非常容易:

       首先在本地文件系统准备两个text文件,写入一些字符;在Mini Cluster启动后,将它们拷贝到HDFS中:

FileSystem fs = FileSystem.get(UTIL.getConfiguration());

// create local file /tmp/mapreduce/file01 and file02

Path p = new Path("/tmp/mapreduce/");

fs.mkdirs(p);

fs.copyFromLocalFile(new Path("/tmp/mapreduce/file01"), p);

fs.copyFromLocalFile(new Path("/tmp/mapreduce/file02"), p);

      随后,用Mini Cluster的configuration来构造一个JobConf,设置输入输出等配置,并开始运行:

JobConf conf = new JobConf(UTIL.getConfiguration(), WordCount.class);

conf.setJobName("wordcount");

…

FileInputFormat.setInputPaths(conf, new Path("/tmp/mapreduce/"));

FileOutputFormat.setOutputPath(conf, new Path("/tmp/result"));

JobClient.runJob(conf);

 

      如果需要,在MiniCluster停止之前,将Map Reduce的输出文件拷贝到本地文件系统,因为Mini Cluster的HDFS数据不会持久保存:

fs.copyToLocalFile(new Path("/temp/result/part-00000"), new Path("/tmp/mapreduce/result"));

      最后,调用shutdownMapReduceCluster()方法停止MR Cluster;    

5.导入HBase表到Mini Cluster

      由于HBase Mini Cluster每次都会创建一个全新的运行时,运行数据会在JVM停止时清理,无法持久化数据;而有些时候, 我们的测试前需要初始化一些数据,或者测试后需要保留数据,这个时候就需要导入或导出数据到HBase Mini Cluster中。

      HBase的数据导出和导入是通过运行相应的Map Reduce完成的;在上一节我们已经讲到如何在Mini Cluster上运行Map Reduce,那么只要构造HBase的Import或Export job实例,传入导入或导出表的名称和位置就可以了,参见下面的例子:

String importLocation = "file://" + backupFolder.getAbsolutePath() + "/" + table;

String[] args = new String[] { table, importLocation };

boolean result = runImport(args);

...

private boolean runImport(String[] args) throws IOException, InterruptedException, ClassNotFoundException {

        GenericOptionsParser opts = new GenericOptionsParser(new Configuration(UTIL.getConfiguration()), args);

        Configuration conf = opts.getConfiguration();

        args = opts.getRemainingArgs();

        Job job = Import.createSubmittableJob(conf, args);

        job.waitForCompletion(false);

        return job.isSuccessful();

    }

      导入导出数据有几个注意事项:

  1. 在导入数据前,确保要导入的HTable已经在Mini Cluster中被创建;
  2. JAVA_HOME环境变量被正确设置,否则MR job会失败;
  3. 如果导入的HTable数据过大,Mini Cluster可能会Out Of Memory,需设置JVM参数以适当增加Heap和Perm Gen大小;
  4. HBase导出的文件会放在Mini HDFS Cluster,所以还需要从HDFS拷贝到本地文件系统; 导入可以直接从本地文件读取。

6.HBase Mini Cluster在Apache Kylin项目中的使用

       Apache Kylin是一个大数据分析的OLAP引擎,支持在PB数据上进行秒级的SQL查询;之所以能达到这么高的效率,因为Kylin会对大数据做预计算并将结果(称为Cube)存储在HBase中以备查询;很多测试案例,例如验证Kylin对各种SQL查询的支持的测试,都是在这个预先创建好的HBase上来运行的;

      起初,为了运行这些测试,每个开发人员都需要创建一个Hadoop的Sandbox VM,运行HBase, Map Reduce等任务;然后运行一个程序来构建测试用的范例Cube;Sandbox的搭建需要额外的计算资源,而计算Cube的过程则要花去一两个小时;这对于一位新用户来说,无疑增加了上手的难度,影响了他们对Kylin的兴趣;

       HBase Mini Cluster帮助Apache Kylin很好地解决了这个问题;首先,我们将预计算的Cube (每个是一个HTable) 从Sandbox中导出并压缩,保留在代码库;运行测试案例之前, 启动HBase Mini Cluster,导入Cube;最后再更新Kylin配置中的HBase连接参数,让Kylin连接到此 Mini Cluster,完成各种测试;这样就不再依赖Sandbox,用户克隆下Kylin源代码就可以运行成功测试案例。

7.后续工作

      这是HBase Mini Cluster在Apache Kylin中的初次尝试,收到了良好的效果;后续还有更多场景采取这个方案;我们也会探索如何在Mini Cluster中运行Hive;如果实现的话,那么Kylin计算Cube的过程也就可以一起完成了。

8.总结

      本文先介绍了HBase Mini Cluster的使用,例如操作创建和操作HBase数据,运行Map Reduce任务,导入导出HTable 等;最后介绍了它在Apache Kylin中的使用,希望能对Hadoop的开发人员有所帮助和启示。

展开阅读:

[1] HBaseTestingUtility.java https://github.com/apache/hbase/blob/master/hbase-server/src/test/java/org/apache/hadoop/hbase/HBaseTestingUtility.java

[2] Haddop WordCount example

https://hadoop.apache.org/docs/r1.0.4/mapred_tutorial.html

[3] HBase export/import

https://hbase.apache.org/book/ops_mgt.html#export

[4] Apache Kylin

http://www.kylin.io/

细数Kubernetes Service那些事-kubernetes 服务发布以及在eBay的实践 eBay自2014年末开始kubernetes的落地工作,并在2015年扩大研发投入。目前kubernetes已经部署在eBay的生产环境,并将作为下一代云计算平台。本文结合社区kubernetes的设计和实现,并结合openstack云基础架构,深入分析kubernetes服务部署的设计与实现。如果您在寻找服务发布的方案或者在寻找kubernetes服务相关的模块的原理或行为,阅读本文会让你有比较明确的方向。 阅读详情

相关推荐

ESP32 DMX512与RDM协议栈开发指南

DMX512-A是专业灯光控制领域广泛采用的串行通信标准,基于RS-485物理层实现确定性单向数据传输;RDM(Remote Device Management)则在其基础上扩展双向、可寻址、可配置的智能管理能力,满足现代舞台设备远程固件升级、自动发现与参数配置需求。二者共用同一总线但时序与帧结构严格隔离,对硬件定时精度、中断响应延迟及电气隔离提出极高要求。在嵌入式实践中,ESP32凭借Wi-Fi/蓝牙连接能力与丰富外设资源,成为构建低成本智能DMX节点的理想平台。esp_dmx协议栈正是面向该场景的高性能

weixin_34945060的博客 316

HBase -- 使用HBaseMiniCluster本地调试HBase

HBaseMiniCluster背景和介绍使用POM创建Endpoint创建测试类,使用MiniCluster调试问题解决 背景和介绍   在测试HBase CDC时使用了HBase的Observer和Endpoint的协处理器,由于协处理器是运行在服务器端的,即regionserver上的代码,每次测试协处理器时需要打包到服务器,卸掉再重新关联协处理器,非常麻烦,且一旦出错也不可调试。   为了方便开发人员,HBase以及其它Hadoop组件提供了Mini Cluster的运行方式:在一个JVM里模拟运行

TheBigBlue的博客 907

软件项目管理期末复习(看这一篇就够了)

软件项目管理考试复习 🔶🔶🔶🔶🔶加了🔶的是考点 第一章软件项目管理概述 1.1.1项目及其特征 项目定义:🔶 项目就是为了创造一个唯一的产品或提供一个唯一的服务而进行的临时性的努力; 是以一套独特而互相联系的任务为前提,有效地利用资源,在一段时间内满足一系列特定目标的多项相关工作的总称。 日常运作和项目的区别: 项目是一次性的,而日常运作是重复进行的。 项目是以目标为导向的,日常运作是通过效率和有效性体现的。 项目是通过项目经理及其团队工作完成的,日常运作是职能式的线性管理。 项目存在大量的变更管理,

qq_50886857的博客 3万+

使用HBaseTestingUtility进行本地单元测试

1:简介 在调试MR任务或者操作Hbase表时,往往我们需要将本地代码打成Jar包,然后上传到Hadoop集群上去跑,这样不仅麻烦,还不方便调试,Hadoop开发团队提供了在本地调试代码的API,就是MiniHbaseCluster, 在本机JVM中模拟一个Hadoop集群,与真实环境的Hadoop集群并没有区别,方便我们提交任务和Debug。 ...

weixin_43930865的博客 1785

AUTOSAR R20-11标准下载!

这是公众号的第2篇推文,粉丝数49 Document Search Classic Platform Adaptive Platform Foundation 文档截图 以为会在明天的发布会之后才上线,没想到官网现在就悄悄放出来了。 中国由于网络问题,下载速度比较慢或者会中断。 “阅读原文”提供多种下载方式,可以在线浏览,可以集中下载也可单个文档下载。 如有增减我也会及时在公众号里通知大家,不过我觉得不会变动了。 整理不宜,好东西要分...

Adaptive_AUTOSAR的博客 1891

西门子S7-1200和IFM IO-Link主站连接与设定

硬件配置:S7-1200 1214DC/DC/DC,IFM AL1102支持Profinet,IFM支持IO-Link的流量传感器SBG233,流量开关SI5010,接近开关IF6123。第三步:打开IFM moneo configure可查看到流量传感器SBG233 PLC映射所有输出共占用4个byte,也可在IFM官网下载传感器对应IODD文件。第五步:组态编程编译下载。最近新做了一个项目,用到了IO-Link设备,今天来分享一下S7-1200和IFM IO-Link主站模块AL1102的连接过程。

GreatShen168的博客 6493

使用MiniCluster快速配置Hadoop开发环境

前年的时候用过Hadoop,那时候各种资料缺乏,各种摸索以后写出了能用的东西,然后打包仍服务器就再也没有管过。效率什么的谈不上,但是一直能用。 当时花费了很多时间搭建一个环境,各种xml配置,然后引入依赖包,写好以后打包然后命令行测试一下,想想就耽误事儿。 最近需要改动一下之前的程序,然后就纠结了。Hadoop已经2.3.0了,从MR换到了Yarn,虽然老版本兼容,不过还是随大流升级把。 版

dac55300424的专栏 1958

cesium 实时轨迹

运用cesium中model和polyline添加模型和轨迹线,用CallbackProperty方法来实时改变经纬度。

God's asylum的博客 1964

使用常用工具测试HBase应用

虽然业界采用Apache HBase来构建终端用户应用的范围越来越多,但是许多这种应用并没有经过良好的测试。通过这篇文章,你可以了解到有关这方面的一些容易实现的测试方法。 我们首先以JUnit为例, 然后是Mockito和Apache MRUnit, 接着会使用HBase的一个微型集群来做集成测试。(HBase自身的代码也是通过一个微型的集群来测试的, 所以对于上游的应用为什么不能这样测试呢...

836811384 298

DICOM标准:DICOM医学影像中的覆盖层(Overlay)概念详解

DICOM标准:深入详解DICOM医学影像中的覆盖层(Overlay)

编程技术探索者,分享C/C++、C#、Java、数据库等开发经验,聚焦实战技巧与AI兴趣,助力编程爱好者成长。 1563

(功能安全六)硬件FMEDA计算

FMEDA(故障模式、影响与诊断分析)是功能安全验证的核心方法,通过量化分析硬件故障模式及其影响,计算SPFM、LFM、PMHF等关键指标。分析过程包含六大步骤:计算元器件失效率、识别故障模式、评估安全机制诊断覆盖率、分类计算各类失效率、量化指标计算及设计优化。输入需要系统架构图、硬件故障模式清单等资料,输出安全指标达标情况及改进建议,确保设计满足ASIL等级要求。该方法通过系统化的故障分类和量化评估,为硬件安全设计提供科学依据。

Dayongger的博客 1453

使用HBaseTestingUtility进行本地调试

要想测试hbase的功能,不一定非要启动hbase集群,可以用HBaseTestingUtility在本地进行hbase的部分功能调试 [code="java"] TableName tableName = TableName.valueOf("testBar"); String family = "cf"; HTableDescriptor htd = new HTa...

大神带我来搬砖 803

【Bug已解决】Request timed out / API Timeout — Claude Code 请求超时解决方案

方案适用场景推荐指数难度方案一:增加超时大任务处理⭐⭐⭐⭐⭐低方案二:切换 SonnetOpus 太慢⭐⭐⭐⭐⭐低方案三:缩小范围大代码库⭐⭐⭐⭐⭐低方案四:优化网络网络延迟高⭐⭐⭐⭐中方案五:减少 MCPMCP 超时⭐⭐⭐中方案六:流式响应长生成任务⭐⭐⭐低根本原因:请求超时最常见原因是请求体过大(35%)和 Opus 模型推理慢(25%),默认 60 秒超时阈值对大型任务不够最佳实践。

一键难忘的博客 5162

简单两步在单元测试中使用HDFS和Hive

INSERT VALUES Unit Test Validated SqlNode在这里插入代码片 before fix INSERT INTO `CATALOG`.`SALES`.`T3` VALUES ROW('a', CAST(1.0 AS INTEGER), CAST(1 AS SMALLINT)), ROW('b', 2, CAST(2 AS SMALLINT)), ROW('c', 3.0, CAST(3 AS SMALLINT)), ROW('d', 4.0, 4), ROW('e', 5

JiajunBernoulli的博客 1120

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

廖雪峰Python教程[完整版]

廖雪峰的python教程整理的,已经排好版了,而且还是完整的,适合小白

Flink 集群启动流程

MiniCluster的启动流程: 首先来看最简单的本地模式MiniCluster的启动流程,以此来分析Flink的具体启动流程以及内部各组件之间的交互形式。MiniCluster可以看做是内嵌的Flink运行时环境,所有的组件都在独立的本地线程中运行。MiniCluster的启动入口在LocalStreamEnvironment#execute(jobName)中。其基本的相关的主要类图和actor模型如下: 在MiniCluster#start启动源码中,启动流程大...

METON的博客 3956

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Hadoop-2.2.0中文文档—— Common - CLI MiniCluster

目的 使用 CLI MiniCluster, 用户可以简单地只用一个命令就启动或关闭一个单一节点的Hadoop集群,不需要设置任何环境变量或管理配置文件。 CLI MiniCluster 同时启动一个 YARN/MapReduce 和 HDFS 集群。 这对那些想要快速体验一个真实的Hadoop集群或是测试依赖明显的Hadoop函数的非Java程序 的用户很有用。 Hadoop Ta

三分地 3103

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

HBase基本操作

HBase Java API 操作 Tips: 其实每一个操作都可以简化为: 1、配置并连接数据库 2、编写 Java API 的 HBase 的操作 3、使用权限 执行操作 要对一个Hbase数据库进行操作的话,首先我们要进行一系列准备操作 //创建HBase配置对象 Configuration conf=HBaseConfiguration.create(); //指定ZooKeeper集群地址 conf.set("hbase.zookeeper.quorum", "centos01:2181,cent

Leviathan的博客 964

HBase+ZooKeeper+Hadoop2.6.0的ResourceManager HA集群高可用配置 [复制链接] 韩克拉玛寒 韩克拉玛寒 当前离线 积分2439. 窥视卡 雷达

HBase+ZooKeeper+Hadoop2.6.0的ResourceManager HA集群高可用配置 [复制链接]     韩克拉玛寒 韩克拉玛寒 当前离线 积分2439 窥视卡 雷达卡 40 主题

张伟的专栏 1510

hadoop2.7.2学习笔记06-CLI MiniCluster

CLI cluster功能可以使用一个命令直接启动一个包含yarn/mapreduce和hdfs的hadoop集群,避免了配置环境变量和配置文件。 首先需要指定一个环境变量,否则会抛出异常说找不到某个类 $ export HADOOP_CLASSPATH=./share/hadoop/yarn/test/hadoop-yarn-server-tests-2.7.2-tests.jar

qq_34617750的博客 738

专题:如何写测试——HBase

最近做Spark Streaming任务时用到了HBase做中间状态查询和存储,顺手写了一些测试,小小总结了一下各部分测试的写法。

Oh Captain, My Captain 1173

Hadoop CLI MiniCluster

CLI MiniCluster

1804
上一篇: Disruptor Ring Buffer as a Blocking Queue
下一篇: Machine Learning Method In eBay Bot Detection
ebay
博客等级 码龄24年 109粉丝 69原创
评论 1
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值