一、概述

HBase 本身提供了很多种数据导入的方式,目前常用的有三种常用方式:

  • 使用 HBase 原生 Client API 。
  • 使用 HBase 提供的 TableOutputFormat,原理是通过一个 Mapreduce 作业将数据导入 HBase 。
  • 使用 Bulk Load 方式:原理是使用 MapReduce 作业以 HBase 的内部数据格式输出表数据,然后直接将生成的 HFile 加载到正在运行的 HBase 中。

二、方式对比

前两种方式:需要频繁的与数据所存储的 RegionServer 通信,一次性导入大量数据时,可能占用大量 Regionserver 资源,影响存储在该 Regionserver 上其他表的查询。

第三种方式:了解过 HBase 底层原理的应该都知道,HBase 在 HDFS 中是以 HFile 文件结构存储的,一个比较高效便捷的方法就是先生成 HFile,再将生成的 HFile 加载到正在运行的 HBase 中。即使用 HBase 提供的 HFileOutputFormat2 类或者 importtsv 工具来完成上述操作。

经过对比得知:如果数据量很大的情况下,使用第三种方式(Bulk Load)更好。占用更少的 CPU 和网络资源就实现了大数据量的导入。本篇文章也将主要介绍 Bulk Load 方式。

三、Bulk Load 说明

Bulk Load 方式之所以高效,是因为绕过了正常写数据的路径(WAL、MemStore、flush)。总的来说,Bulk Load 方式使用 MapReduce 作业以 HBase 的内部数据格式输出表数据,然后直接将生成的 HFiles 加载到正在运行的 HBase 中。与仅使用 HBase API 相比,使用 Bulk Load 方式不占用 Region 资源,不会产生巨量的写入 I/O,将使用更少的 CPU 和网络资源。

HBase Bulk Load 过程包括两个主要步骤:

  • 将 准备的数据 生成 HFile :使用 importtsv 工具将数据转化为 HFile ,或者通过 HBase 提供的 HFileOutputFormat2 类编写 MapReduce 程序。
  • 将 HFile 导入到 HBase 中:使用 LoadIncrementalHFiles 或者 completebulkload 将 HFile 导入到 HBase中。

3.1 将准备的数据生成HFile

将数据生成 HFile,有两种方式,分别是:

  • 通过 HBase 提供的 HFileOutputFormat2 类编写 MapReduce 程序来生成 HFile 。(本篇文章不扩展)
  • 使用 importtsv 工具将 TSV 格式数据转换为 HFile ,自动生成 MapReduce 任务。

importtsv 是一个实用工具,它将 TSV 格式的数据加载到 HBase 中。它有两种用法,分别为:

  • importtsv 工具默认使用 HBase put API 导入数据,将数据从 HDFS 中的 TSV 格式直接加载到 HBase 的 MemStore 中。非 Bulk Load 方式,比较占用集群资源,不建议在处理大数据量时使用。

    hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c <tablename> <hdfs-inputdir>
  • Bulk Load 方式,当使用选项 -Dimporttsv.bulk.output 时,将会先生成 HFile 文件的内部格式的文件,这时并不会写数据到 HBase 中。建议使用 √
    hbase org.apache.hadoop.hbase.mapreduce.ImportTsv -Dimporttsv.columns=a,b,c -Dimporttsv.bulk.output=hdfs://storefile-outputdir <tablename> <hdfs-data-inputdir>

    注意:使用 importtsv -Dimporttsv.bulk.output 选项时,如果目标表尚不存在,则将使用默认列族描述符创建目标表。如果准备了大量数据要进行Bulk Load,请确保对目标 HBase 表进行适当的预分区,也就是预先创建多个 Region ,避免热点与数据倾斜问题。

    importtsv 可以使用 -D 指定的其他选项,以下列举了11条:

  • -Dimporttsv.skip.bad.lines=true / false :在导入过程中,如果有不符合分割标准的行,被称之为 badlines ,设置是否跳过,如果不跳过,则 MapReduce 任务停止。
  • -Dimporttsv.separator='|' :例如使用 管道符 来代替 tab 键(\t),importtsv 默认是以 tab 键分隔。
  • -Dimporttsv.timestamp=currentTimeAsLong :使用特殊的时间戳导入。
  • -Dimporttsv.mapper.class=my.Mapper :用户定义的Mapper代替org.apache.hadoop.hbase.mapreduce.TsvImporterMapper。
  • -Dmapreduce.job.name=jobName :用户指定 MapReduce 任务名称
  • -Dmapreduce.job.queuename=queue:指定作业提交到的队列名
  • -Dmapreduce.job.priority=VERY_HIGH / HIGH / NORMAL / LOW / VERY_LOW :指定作业的优先级
  • -Dcreate.table=yes / no :如果 HBase 中没有创建表,是否使用 importtsv 工具创建该表,如果设置为 no,则在 HBase 中表必须存在。
  • -Dno.strict=true / false :忽略 HBase 表中的列族检查,默认为 false 。
  • -Dmapreduce.map/reduce.memory.mb=5120 :map / reduce 端分配的内存大小,一般来说是 1024 的倍数,这里配置了 5G。
  • -Dmapreduce.map/reduce.java.opts=-Xmx4096m :指定 map / reduce 端的 JVM 参数,这个的大小一般是上一个参数的 0.75 倍,要剩一些内存给非 JVM 进程。

尽管 importtsv 工具在许多情况下很有用,但高级用户可能希望以编程方式生成数据,或使用其他格式导入数据。如果有这样的需求,请深入了解 ImportTsv.java 和 HFileOutputFormat 的 JavaDoc ,修改源码进行实现。

3.2 完成数据加载,将HFile加载到HBase中

completebulkload 工具用于将数据导入正在运行的 HBase 中。此命令行工具遍历准备好的数据文件(HFile),确定每个 HFile 所属的 Region,然后联系相应的 RegionServer 将 HFile 移入其存储目录并将数据供客户端使用。

如果在 Bulk Load 准备过程中或在准备和完成步骤之间 Region 边界已更改,则 completebulkload 工具会自动将 HFile 拆分为与新边界对应的部分。此过程效率不高,因此用户应尽量减少 准备 HFile将 HFile 加载到 HBase 中 这两步骤之间的时间延迟,尤其是在其他客户端通过其他方式同时加载数据时也要注意。

将 HFile 加载到 HBase 中有两种方式:

  • LoadIncrementalHFiles

    hbase org.apache.hadoop.hbase.tool.LoadIncrementalHFiles <hdfs://storefileoutput> <tablename>
  • completebulkload
    export HBASE_HOME=/usr/hdp/{hdp-version}/hbase
    HADOOP_CLASSPATH=`${HBASE_HOME}/bin/hbase classpath` ${HADOOP_HOME}/bin/hadoop jar ${HBASE_HOME}/lib/hbase-mapreduce-{version}.jar completebulkload <hdfs://storefileoutput> <tablename>

    四、示例

    说一下我的运行环境:CentOS-7,1个 HBase Master,3个 RegionServer,三台机器均是 8G 内存。

    4.1 创建表的同时创建10个分区

    create 'default:people', {NAME=>'basic_info'}, {NAME=>'other_info'}, SPLITS=>['10|','20|','30|','40|','50|','60|','70|','80|','90|']

HBase应用:数据批量导入说明相关推荐

  1. HBase结合MapReduce批量导入

    Hbase是Hadoop生态体系配置的数据库,我们可以通过HTable api中的put方法向Hbase数据库中插入数据,但是由于put效率太低,不能批量插入大量的数据,文本将详细介绍如何通过MapR ...

  2. word录入表单数据 java 导入系统,java导入excel | 怎么把excel中的数据批量导入到word中的表格中...

    用javascript怎么实现把excel中的数据批量导入到数据库表中 这个js不能直接实现吧 我们程序用到 先读取excel内容转换成数组 然后放到页面上 再提交表单 储存 MySql如何批量添加数 ...

  3. dataset中的数据批量导入oracle数据库,c#如何将dataset中的数据批量导入oracle数据库...

    c#如何将dataset中的数据批量导入oracle数据库以下文字资料是由(历史新知网www.lishixinzhi.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! c#如何将da ...

  4. .net excel导入mysql_.NET Core使用NPOI将Excel中的数据批量导入到MySQL - 追逐时光者 - 博客园...

    前言: 在之前的几篇博客中写过.NET Core使用NPOI导出Word和Excel的文章,今天把同样我们日常开发中比较常用的使用Excel导入数据到MySQL数据库中的文章给安排上.与此同时还把NP ...

  5. 如何将excel里的数据批量导入ACCESS,要用vb代码?

    下面是对EXECL的基础操作说明: Set xlApp = CreateObject("Excel.Application") '激活EXCEL应用程序 xlApp.Visible ...

  6. ANSYS FLUENT 超临界流体物性分段线性插值数据批量导入

    使用fluent自带数据库进行超临界流体仿真时,时不时会出现计算错误,考虑是数据库不稳定引起,而使用自定义的分段线性插值物性则不会出现上述情况. 超临界流体在拟临界点附近物性变化剧烈,需要使用较多的数 ...

  7. 【云速建站】后台数据批量导入导出

    [摘要] 主要分享了云速建站后台管理的批量导入数据操作方法,如产品分类.产品.淘宝在售产品等的批量导入 1      产品分类的导入导出 1.1 进入后台管理 首先登录云速建站控制台,进入后台管理-产 ...

  8. XX健康:预约管理-预约设置日历插件文件简单下载Excel文件解析Excel表数据批量导入

    1. 需求分析 前面我们已经完成了检查项管理.检查组管理.套餐管理等.接下来我们需要进行预约设置,其实就是设置每一天的体检预约最大数量.客户可以通过微信端在线预约,在线预约时需要选择体检的时间,如果客 ...

  9. springboot 导入excel(数据批量导入)

    springboot excel数据批量导入 1.pom.xml 引入poi依赖 <!--poi--><dependency><groupId>org.apache ...

  10. [Excel知识技能] Txt文件数据批量导入Excel

    记录(日期: 2022/5/20) 在实际工作中,遇到过将Txt格式的数据导入到Excel中,为此特意记录以下操作过程,便于日后的回顾和学习 需要导入的文本文件如下图所示: Txt文本数据源 Site ...

最新文章

  1. Exchange日常管理之二十二:配置保留策略
  2. redis的string类型和bitmap
  3. 【机器学习基础】Python机器学习的神器- Scikit-learn使用说明
  4. boost::mp11::mp_and相关用法的测试程序
  5. GDB入门:A GDB Tutorial with Examples
  6. python数据预处理——数据分箱(将值归类)
  7. python做副业_学习Python可以做哪些副业,你是不是感觉自己错过了一个亿?
  8. pyltp进行词性标注
  9. U-Mail邮件网关智能DNS技术,解决海外邮件接收问题
  10. 论项目管理中的量化管理
  11. python3笔记_Python3入门笔记
  12. 基于Qt、FFMpeg的音视频播放器设计五(FFMpeg音频实现)
  13. ballerina 学习二十八 快速grpc 服务开发
  14. Elasticsearch+logstash+kibana
  15. 【有利可图网】PS教程:简单制造火焰文字特效
  16. ryu-manager报错SyntaxError: invalid syntax
  17. 微信直播相对一般直播平台怎么样?有哪些优势?
  18. 2021秋冬上海时装周开启,聚焦8大国内外品牌
  19. CCIE-EI 思科企业基础架构专家
  20. 1.5小时,一键部署Oracle 11GR2 RAC 集群

热门文章

  1. Echarts 改变地图文字颜色大小,以及鼠标经过颜色
  2. MySQL恢复 利用innodb_force_recovery修复MySQL数据页损坏
  3. 工作好多年,回忆人生--高中三年
  4. 金融信创扛大旗|优炫软件联合发起成立金融信创协同汇
  5. 微软发布WP8谷歌android发布会取消
  6. 爬虫入门之handler与opener(三)
  7. 支持向量机的概率计算
  8. 基于多因子模型的中证500增强组合
  9. 总结:Spring Boot 之spring.factories
  10. 显卡风扇太吵_太吵了