采用MapReduce作业如何在HBase中加载大数据 - 产品和技术

采用MapReduce作业如何在">HBase中加载大数据 发布时间:2012.04.16 14:51      来源:博客     作者:博客

一、概述

HBase有很多种方法将数据加载到表中,最简单直接的方法就是通过MapReduce调用TableOutputFormat方法,或者在client上调用API写入数据。但是,这都不是最有效的方式。

这篇文档将向你描述如何在HBase中加载大数据。采用MapReduce作业,将数据以HBase内部的组织格式输出成文件,然后将数据文件加载到已运行的集群中。(注:就是生成HFile,然后加载到HBase中。)

二、大数据载入的步骤

大数据的加载包含了2个步骤:

1、通过MapReduce的作业进行数据准备过程

首先,通过MapReduce使用HFileOutputFormat来生成HBase的数据文件格式。这样格式的数据文件就是HBase内部的文件组织格式,并且在将数据写入到集群的过程中是相当容易的。

为了使该方法更有效,HFileOutputFormat必须通过配置,每个输出的HFile必须适应单个的region。为了实现此功能,MapReduce的Job采用了Hadoop的TotalOrderPartitioner类,通过进行分区操作用以对应表中各个region。

同时,HFileOutputFormat包含有一个非常方便的方法,configureIncrementalLoad(), 这个方法会基于表的当前区域边界自动设置一个TotalOrderPartitioner。

2、数据加载过程

通过HFileOutputFormat准备好数据之后,使用命令行工具将数据加载到集群中。这个命令行工具遍历准备好的数据文件,并确定每一个文件所属的region。然后,当连接到对应的Region Server,移动到HFile到存储目录为用户提供数据。

如果在数据准备或者数据载入的时候,region边界发生了变化,那么HBase将自动进行块分割,用以适应新的边界变化。这个过程效率是很低下的,特别是有其他的client在做数据录入操作。所以需要注意,尽量使用少的时间去创造数据文件以及录入该数据文件进入集群。

3、使用importtsv为大数据加载做准备

HBase自带了importtsv命令工具。通过hadoop jar /path/to/hbase-VERSION.jar importtsv 来使用这个命令。如果不带参数的执行会打印以下帮助信息:

Usage: importtsv -Dimporttsv.columns=a,b,c

Imports the given input directory of TSV data into the specified table.

The column names of the TSV data must be specified using the -Dimporttsv.columns option.

This option takes the form of comma-separated column names, where each column name is either a simple column family, or a columnfamily:qualifier.

The special column name HBASE_ROW_KEY is used to designate that this column should be usedas the row key for each imported record.

You must specify exactly one column to be the row key.

In order to prepare data for a bulk data load, pass the option:

-Dimporttsv.bulk.output=/path/for/output

Other options that may be specified with -D include:

-Dimporttsv.skip.bad.lines=false - fail if encountering an invalid line

4、使用completebulkload来载入数据

当使用importtsv导入数据之后,completebulkload 是用来导入数据到在运行的集群中。

completebulkload就是采用与importtsv 相同的输出路径和表的名称来执行。 例如:

$ hadoop jar hbase-VERSION.jar completebulkload /user/todd/myoutput mytable

这个命令会执行的非常快,完成之后在集群中就能看到新的数据。

5、高级用法

虽然importtsv 命令很有用,但是在许多情况下,用户可能需要通过编写代码或其他形式的导入数据。

如果要这样做,可以查看ImportTsv.java 源代码,并阅读HFileOutputFormat的Javadoc帮助文档。

通过代码编写载入大数据量可关注 LoadIncrementalHFiles类。

时间: 2024-12-03 05:37:49

采用MapReduce作业如何在HBase中加载大数据 - 产品和技术的相关文章

如何在C#中加载自己编写的动态链接库(DLL)

动态|加载|链接 摘要 本文主要讲述如何在C#中逐步实现加载自己用C++语言编写的动态链接库,以及在导入时如何进行C#和C++语言的数据类型匹配 关键词 C# C++ 动态链接库 加载 数据类型匹配 一.发生的背景 在开发新项目中使用了新的语言开发C#和新的技术方案WEB Service,但是在新项目中,一些旧的模块需要继续使用,一般是采用C或C++或Delphi编写的,如何利用旧模块对于开发人员来说,有三种可用方法供选择:第一.将C或C++函数用C#彻底改写一遍,这样整个项目代码比较统一,维护

从资源中加载皮肤

由于单位上最近要开发一个内部使用的小型项目,我需要一个运行稳定的,能够将皮肤文件放到资源里的并且易于使用的界面开发包,当然,免费的最好.于是利用google一阵狂搜,嘿,真还找到了这样的一个开发库:AppFace For VC 0.2. AppFace For VC 支持Win9X/NT/2K/XP,UNICODE/ANSI,能够对目标进程里的所有Widows标准控件,系统菜单,通用对话框等实现换肤,对非商业用途而言,它是完全免费的.关键的是AppFace的使用非常简单,很容易添加到已有的工程中

从资源中加载皮肤, 使用免费界面库 AppFace For VC 0.2 美化您的软件

由于单位上最近要开发一个内部使用的小型项目,我需要一个运行稳定的,能够将皮肤文件放到资源里的并且易于使用的界面开发包,当然,免费的最好.于是利用google一阵狂搜,嘿,真还找到了这样的一个开发库:AppFace For VC 0.2 . AppFace For VC 支持Win9X/NT/2K/XP,UNICODE/ANSI,能够对目标进程里的所有Widows标准控件,系统菜单,通用对话框等实现换肤,对非商业用途而言,它是完全免费的.关键的是AppFace的使用非常简单,很容易添加到已有的工程

Android通过AsyncTask与ThreadPool(线程池)两种方式异步加载大量数据的分析与对比

   在加载大量数据的时候,经常会用到异步加载,所谓异步加载,就是把耗时的工作放到子线程里执行,当数据加载完毕的时候再到主线程进行UI刷新.在数据量非常大的情况下,我们通常会使用两种技术来进行异步加载,一是通过AsyncTask来实现,另一种方式则是通过ThreadPool来实现,今天我们就通过一个例子来讲解和对比这两种实现方式.     本文原创,如需转载,请注明转载地址http://blog.csdn.net/carrey1989/article/details/12002033     项

如何在Word中加页码

Word中加页码功能很强大也很常用,我们经常在制作长篇文档时都会派上用场,给文档加页码我们可以清楚的看到文档的页数,可能这一操作有很多朋友都觉得非常简单,但针对自定义加页码来说是有一定难度的,今天我们就来系统的学习一下在各种Word文档加页码的方式. 1.最基本的加页码操作方法.这个是最简单加页码,就是给文中所有页面加上页码,而且是按顺序来排的. 选择菜单栏的"插入"–页码,在弹出的"页码"窗口中我们可以任意选择页码的位置,如:是显示在"页眉"顶

ios-IOS&Android开发:如何从大量未加载的数据中加载一定量的数据到列表中

问题描述 IOS&Android开发:如何从大量未加载的数据中加载一定量的数据到列表中 绝大多数新闻资讯类应用开发过程中都会遇到这么一个问题: 规定每次从服务器最多只能获取20条数据,第一次刷新获取了20条最新的数据,添加到列表中,过一段时间有了30条未刷新的记录,这下问题来了:第二次刷新时是获取最新的20条还是接着第一次获取之后的20条数据放在列表前面?前者会导致列表中间空缺一部分数据,后者问题是要多刷新几次才能把所有数据获取到. 有过相关开发经验的大神们来说说你们的解决方案. 解决方案 刷新

hbase-Titan1.0.0图数据库如何批量加载大规模数据,后端存储是Hbase?

问题描述 Titan1.0.0图数据库如何批量加载大规模数据,后端存储是Hbase? 我有1亿的顶点和几十亿的边,如何通过BLVP加载到Titan 中,我后端的存储平台用的是Hbase. 解决方案 我也在用titan+hbase,但使用Gremlin-Server的REST api一直出问题,请问你有自己的安装笔记吗? 解决方案二: fragment中数据库的数据加载批量从数据库是提取数据,并显示出来.批量加载数据到SQL数据表 解决方案三: 有安装的详细笔记吧,你私信我吧.

ASP.NET MVC中加载WebForms用户控件(.ascx)

原文:ASP.NET MVC中加载WebForms用户控件(.ascx) 问题背景 博客园博客中的日历用的是ASP.NET WebForms的日历控件(System.Web.UI.WebControls.Calendar),它会为"上一月"."下一月"的链接生成"__doPostBack()"的js调用,如下图: 目前发现它会带来两个问题: 1. 不支持IE10: 2. 某些电脑不允许执行__doPostBack. 问题提炼 前提: 我们想以最低

Tiger系列一:从XML中加载属性

xml|加载 JDK1.5(代号Tiger)中更新了java.util.Properties类,提供了从XML文件中读写key-value对属性的简单方法:loadFromXML()和storeToXML() 1.基本加载属性的方法 l Sample属性文件:sample.properties foo=barfu=bazl 加载属性的Sample程序 import java.io.FileInputStream;import java.util.Properties; public class