mysql 批量导入hbase_数据快速批量快速导入HBASE方法

面对10TB数据的快速导入需求,本文介绍了通过分布式集群并行处理,将数据先存入HDFS,然后利用MapReduce生成HFile,最后使用HBase的LoadIncrementalHFiles工具进行批量导入的方法。关键步骤包括MapReduce作业的配置,以及解决无Reduce阶段导致的Rowkey排序问题和提升导入速度的分区策略。
摘要由CSDN通过智能技术生成

10T的数据如何快速导入到HBASE呢?本文介绍一种高效快速的导入方法

处理思路:

1、如果要求快速就必须是利用分布式集群的并行运算能力

2、将数据放入HDFS中,实现一次写入多出读

3、通过MR并行处理并生产HFILE文件

4、导入HFILE文件进入数据库

编写一个Map程序生产HFile格式的文件

protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {

ImmutableBytesWritable rowkey = new ImmutableBytesWritable(

value.toString().split(",")[0].getBytes());

List list = null;

list = createKeyValue(value.toString());

Iterator it = list.iterator();

while (it.hasNext()) {

KeyValue kv = new KeyValue();

kv = it.next();

if (kv != null) {

context.write(rowkey, kv);

}

以下是导入数据到hbase

job.setJarByClass(ImportToHBase.class);

//设置Map任务输出Key-Value类型,一定要为该类型,Value可以改为HBase的Put类型

job.setOutputKeyClass(ImmutableBytesWritable.class);

job.setOutputValueClass(KeyValue.class);

//设置Mapper与Reducer类

job.setMapperClass(HFileGenerateMapper.class);

job.setReducerClass(KeyValueSortReducer.class);

job.setOutputFormatClass(HFileOutputFormat2.class);

FileSystem fs = FileSystem.get(URI.create("/"),conf);

Path outPath = new Path(PATH_OUT);

if (fs.exists(outPath))fs.delete(outPath, true);

FileInputFormat.setInputPaths(job, new Path(PATH_IN));

FileOutputFormat.setOutputPath(job, outPath);

HTable table = new HTable(conf, TABLENAME);

HFileOutputFormat2.configureIncrementalLoad(job, table);

if(job.waitForCompletion(true)){

LoadIncrementalHFiles loader = new LoadIncrementalHFiles(conf);

loader.doBulkLoad(outPath, table);

}

其实编码的过程很简单,但是必须面对思考的问题:

1、程序中没有定义Reduce,为什么不定义Reduce,或者Reduce起什么作用?

我们知道,Hbase里面的Rowkey是排序的,如果没有Reduce的话数据进入Hbase时候可能出现rowkey是非排序写入的,导致数据写入失败

2、导入过程是Reduce输出的过程,如果提升速度呢?

1、预定义分区,默认每个分区对应一个Reduce

2、预定义分区,以减少大量数据导入过程导致的Hbase中Region不停的Split

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值