73.1。概观

HBase 包括几种将数据加载到表中的方法。最直接的方法是使用 MapReduce 作业中的TableOutputFormat类,或使用普通的客户端 API;然而,这些并不总是最有效的方法。

批量加载功能使用 MapReduce 作业以 HBase 的内部数据格式输出表数据,然后直接将生成的 StoreFiles 加载到正在运行的集群中。与仅使用 HBase API 相比,使用批量加载将使用更少的 CPU 和网络资源。

73.2。批量加载架构

HBase 批量加载过程包括两个主要步骤。

73.2.1。通过 MapReduce 作业准备数据

批量加载的第一步是使用HFileOutputFormat2从 MapReduce 作业生成 HBase 数据文件(StoreFiles)。此输出格式以 HBase 的内部存储格式写出数据,以便以后可以非常有效地将它们加载到集群中。

为了有效地工作,必须配置HFileOutputFormat2使得每个输出 HFile 适合单个区域。为此,将输出将批量加载到 HBase 中的作业使用 Hadoop 的TotalOrderPartitioner类将映射输出划分为密钥空间的不相交范围,对应于表中区域的键范围。

HFileOutputFormat2包括便利功能configureIncrementalLoad(),它根据表格的当前区域边界自动设置TotalOrderPartitioner

73.2.2。完成数据加载

准备好数据导入后,使用带有“importtsv.bulk.output”选项的importtsv工具或使用HFileOutputFormat的其他 MapReduce 作业,completebulkload工具用于将数据导入正在运行的集群。此命令行工具遍历准备好的数据文件,并且每个文件确定文件所属的区域。然后它会联系相应的 RegionServer,它采用 HFile,将其移入其存储目录并使数据可供客户端使用。

如果在批量装载准备过程中或在准备和完成步骤之间区域边界已更改,则completebulkload实用程序将自动将数据文件拆分为与新边界对应的部分。此过程效率不高,因此用户应注意尽量减少准备批量加载和将其导入群集之间的延迟,尤其是在其他客户端通过其他方式同时加载数据时。

$ hadoop jar hbase-server-VERSION.jar completebulkload [-c /path/to/hbase/config/hbase-site.xml] /user/todd/myoutput mytable 

-c config-file选项可用于指定包含相应 hbase 参数的文件(例如,hbase-site.xml)(如果 CLASSPATH 上尚未提供)(此外,CLASSPATH 必须包含具有 zookeeper 配置文件的目录,如果 zookeeper 不是由 HBase 管理的)。

如果 HBase 中尚不存在目标表,则此工具将自动创建表。

73.3。也可以看看

有关引用的实用程序的更多信息,请参阅 ImportTsvCompleteBulkLoad

请参阅操作方法:使用 HBase 批量加载,以及为什么获取最新博客的当前批量加载状态。

73.4。高级用法

尽管importtsv工具在许多情况下很有用,但高级用户可能希望以编程方式生成数据,或从其他格式导入数据。要开始这样做,请深入研究ImportTsv.java并检查 JavaDoc for HFileOutputFormat。

批量加载的导入步骤也可以通过编程方式完成。有关更多信息,请参见LoadIncrementalHFiles类。

73.5。批量加载复制

HBASE-13153 为批量加载的 HFile 增加了复制支持,自 HBase 1.3 / 2.0 起可用。通过将hbase.replication.bulkload.enabled设置为true(默认为false)启用此功能。您还需要将源群集配置文件复制到目标群集。

还需要其他配置:

  1. hbase.replication.source.fs.conf.provider

    这定义了在目标集群中加载源集群文件系统客户端配置的类。应为目标群集中的所有 RS 配置此项。默认值为org.apache.hadoop.hbase.replication.regionserver.DefaultSourceFSConfigurationProvider

  2. hbase.replication.conf.dir

    这表示将源群集的文件系统客户端配置复制到目标群集的基本目录。应为目标群集中的所有 RS 配置此项。默认值为$HBASE_CONF_DIR

  3. hbase.replication.cluster.id

    群集中需要此配置,其中启用了批量加载数据的复制。源群集由目标群集使用此 ID 唯一标识。应为所有 RS 的源群集配置文件中的所有 RS 配置此项。

例如:如果将源群集 FS 客户端配置复制到目录/home/user/dc1/下的目标群集,则hbase.replication.cluster.id应配置为dc1hbase.replication.conf.dir应配置为/home/user

DefaultSourceFSConfigurationProvider仅支持xml类型文件。它仅加载源群集 FS 客户端配置一次,因此如果更新源群集 FS 客户端配置文件,则必须重新启动每个对等群集 RS 以重新加载配置。