MapReduce跑数导入HBase
来源:互联网 发布:2016淘宝618活动 编辑:程序博客网 时间:2024/05/22 05:00
日常开发中可能会碰到需要编写MapReduce从HDFS上读取数据,然后导入HBase。一般会使用到两种方式,下面分别介绍下。
第一种方式:
指定OutputFormatClass为TableOutputFormat,构造Put对象,然后设置到OutputValueClass去。
Configuration conf = ConfSource.getHBaseConf();Job j = new Job(conf, "Import table " + tbName + " into hbase table:bigtable from " + path);j.setMapperClass(Sync2HBaseMapper.class);j.setOutputFormatClass(TableOutputFormat.class);j.getConfiguration().set(TableOutputFormat.OUTPUT_TABLE, "bigtable");j.setOutputKeyClass(ImmutableBytesWritable.class);j.setOutputValueClass(Put.class);j.setNumReduceTasks(0);j.setJarByClass(Sync2HBaseJob.class);
但是,这种写法在数据量大、节点比较多的情况效率不太好。Reduce节点的输出在MapReduce运行过程中不断导入到HBase,会造成很大的网络开销,而且事务控制也是难点,所以,只是在数据量较少的情况下可以使用该方法。
第二种方式:
使用HFileOutputFormat2类生成HFile, HFile是HBase中KeyValue数据的存储格式,Hadoop的二进制格式文件,实际上StoreFile就是对HFile做了轻量级包装,即StoreFile底层就是HFile。生成的HFile会放置在指定的HDFS目录下,然后是使用completebulkload命令就可以快速地导入到HBase,相对跑MapReduce的时间,completebulkload的执行时间几乎可以忽略不计,本人在16核,128G内存的机器下,600M的数据源MapReduce跑了20分钟,而使用completebulkload导入HBase只需要几秒,非常快。但是要注意的是运行completebulkload后,HDFS上的HFile会被自动删除掉,最好做下备份。
Configuration conf = ConfSource.getHBaseConf();Job job = new Job(conf, "Import into hbase table"+ confClz.getHbaseTable() + " from "+ confClz.getDownloadPath());job.setJarByClass(Sync2HBaseJobViaHFile.class);FileInputFormat.setInputPaths(job, confClz.getDownloadPath());job.setMapperClass(Sync2HBaseMapper.class);HTable table = new HTable(conf, confClz.getHbaseTable());job.setReducerClass(PutSortReducer.class);Path outputDir = new Path(confClz.getHfilePath());FileOutputFormat.setOutputPath(job, outputDir);job.setMapOutputKeyClass(ImmutableBytesWritable.class);job.setMapOutputValueClass(Put.class);HFileOutputFormat2.configureIncrementalLoad(job, table);TableMapReduceUtil.addDependencyJars(job);
0 0
- MapReduce跑数导入HBase
- hbase 结合MapReduce 批量导入
- HBase结合MapReduce批量导入
- HBase结合MapReduce批量导入
- Hbase结合MapReduce批量导入数据
- 自定义MapReduce导入HDFS数据到HBase
- HDFS数据用MapReduce导入Hbase
- 使用MapReduce读取SequenceFile文件,批量导入HBase
- 非mapreduce生成Hfile,然后导入hbase当中
- Hadoop之——HBASE结合MapReduce批量导入数据
- MapReduce将HDFS文本数据导入HBase中
- MapReduce编程实现txt文件中的内容导入HBase
- 1007-使用MapReduce把数据从HDFS导入到HBase
- 非mapreduce生成Hfile,然后导入hbase当中
- 使用java MapReduce job 批量导入大额数据到Hbase
- 通过MapReduce把Hive表数据导入到HBase
- 基于MapReduce,使用bulkload方式像hbase导入数据
- Phoenix通过MapReduce对HBase批量导入数据
- 路由器交换机配置第三章EIGRP
- static和变量的说道
- 计算机网络基础第一章
- 【Jason's_ACM_解题报告】Brackets sequence
- 网络安全第一章
- MapReduce跑数导入HBase
- sqlplus 命令操作大全
- 网络安全第五章
- Linux Shell脚本攻略(三)
- git笔记--(2) 远程库
- hdu4126 Genghis Khan the Conqueror Prim + 树形dp
- 网络安全第七章
- MySQL_MySQL5.6解压缩版配置安装
- 网络安全第十二章