最近一个群友的boss让研究hbase,让hbase的入库速度达到5w+/s,这可愁死了,4台个人电脑组成的集群,多线程入库调了好久,速度也才1w左右,都没有达到理想的那种速度,然后就想到了这种方式,但是网上多是用mapreduce来实现入库,而现在的需求是实时入库,不生成文件了,所以就只能自己用代码实现了,但是网上查了很多资料都没有查到,最后在一个网友的指引下,看了源码,最后找到了生成Hfile的方式,实现了之后,发现单线程入库速度才达到1w4左右,和之前的多线程的全速差不多了,百思不得其解之时,调整了一下代码把列的Byte.toBytes(cols)这个方法调整出来只做一次,速度立马就到3w了,提升非常明显,这是我的电脑上的速度,估计在它的集群上能更快一点吧,下面把代码和大家分享一下。
String tableName = "taglog" [] family = Bytes.toBytes("logs" Configuration conf = conf.set("hbase.master", "192.168.1.133:60000" conf.set("hbase.zookeeper.quorum", "192.168.1.135" conf.set("hbase.metrics.showTableName", "false" String outputdir = "hdfs://hadoop.Master:8020/user/SEA/hfiles/" Path dir = Path familydir = FileSystem fs = BloomType bloomType = HFileDataBlockEncoder encoder = blockSize = 64000 Configuration tempConf = tempConf.set("hbase.metrics.showTableName", "false" tempConf.setFloat(HConstants.HFILE_BLOCK_CACHE_SIZE_KEY, 1.0f StoreFile.Writer writer = StoreFile.WriterBuilder(conf, start = DecimalFormat df = DecimalFormat("0000000" KeyValue kv1 = KeyValue kv2 = KeyValue kv3 = KeyValue kv4 = KeyValue kv5 = KeyValue kv6 = KeyValue kv7 = KeyValue kv8 = [] cn = Bytes.toBytes("cn" [] dt = Bytes.toBytes("dt" [] ic = Bytes.toBytes("ic" [] ifs = Bytes.toBytes("if" [] ip = Bytes.toBytes("ip" [] le = Bytes.toBytes("le" [] mn = Bytes.toBytes("mn" [] pi = Bytes.toBytes("pi" maxLength = 3000000 ( i=0;i<maxLength;i++ String currentTime = ""+System.currentTimeMillis() + current = kv1 = family, cn,current,KeyValue.Type.Put,Bytes.toBytes("3" kv2 = family, dt,current,KeyValue.Type.Put,Bytes.toBytes("6" kv3 = family, ic,current,KeyValue.Type.Put,Bytes.toBytes("8" kv4 = family, ifs,current,KeyValue.Type.Put,Bytes.toBytes("7" kv5 = family, ip,current,KeyValue.Type.Put,Bytes.toBytes("4" kv6 = family, le,current,KeyValue.Type.Put,Bytes.toBytes("2" kv7 = family, mn,current,KeyValue.Type.Put,Bytes.toBytes("5" kv8 = family,pi,current,KeyValue.Type.Put,Bytes.toBytes("1" HTable table = LoadIncrementalHFiles loader = loader.doBulkLoad(dir, table);
最后再附上查看hfile的方式,查询正确的hfile和自己生成的hfile,方便查找问题。
转载于:https://my.oschina.net/u/923508/blog/413939
分享到:
相关推荐
MapReduce生成HFile入库到HBase 可能需要的jar包,一共有3个 可以直接放在每台机器的${HADOOP_HOME}/lib下 hadoopHadoop 1.1.2 + hbase 0.94.6.1
在Java编程环境中,将本地文件读取并上传到HBase是一项常见的任务,特别是在大数据处理和存储的场景下。HBase是一个分布式、版本化的NoSQL数据库,基于Apache Hadoop,适用于大规模数据存储。以下是一个详细的过程,...
HFile 是 Hbase 的存储文件格式,预先生成 HFile 后,可以将其直接加载到 Hbase 中。这是一种高效的入库方式,尤其是在大规模数据集的情况下。预先生成 HFile 入库的优点是快捷、可靠,缺点是需要提前生成 HFile,...
【标题】:“Hadoop MR(MapReduce)将文件转换为HFile并导入到HBase” 在大数据处理领域,Hadoop MapReduce是一种广泛使用的分布式计算框架,而HBase是基于Hadoop的数据存储系统,用于处理大规模的非结构化数据。...
通过学习和理解这些代码,你可以更好地掌握如何在实际生产环境中使用MapReduce进行HBase的数据批量导入。在具体操作时,需要注意数据的正确性、性能优化以及错误处理,以确保数据加载的稳定性和高效性。
这个格式会将输出结果先写入HDFS上的HFile,然后通过HBase的bulk load功能加载到表中,以提高写入效率。 5. **Java编程**:由于HBase MapReduce主要基于Java实现,所以开发过程中需要掌握Java编程。此外,理解HBase...
如果数据量非常大,可以使用HBase的批处理接口`TableOutputFormat`和`BulkLoad`功能,将数据先写入HDFS的临时目录,然后使用`HFile`格式进行批量导入,提高效率。 5. **错误处理和重试机制**:在导入过程中,可能会...
2. **使用HFileOutputFormat**:HBase提供了HFileOutputFormat类,可以将数据直接写入HFile格式,跳过HBase的内部流程,从而提高数据导入效率。这种方法适用于离线大批量数据导入场景。 3. **并行导入**:利用...
《HBase 1.0.3 进阶学习——Part2》 在深入探讨HBase 1.0.3的Part2之前,我们先回顾一下HBase的基本概念。HBase,作为Apache Hadoop生态系统中的一个分布式列式数据库,提供实时读写、强一致性的存储服务。它基于...
5. **执行MapReduce作业**:编写一个MapReduce作业,该作业使用HFileOutputFormat作为输出格式,将上一步骤中写入HDFS的数据转化为HBase可读的HFile格式。 6. **加载HFiles**:最后,通过HBase的Admin API或者HBase...
为了解决这个问题,HBase提供了批量加载(Bulk Loading)机制,它允许我们将数据预先转换成HFile格式,然后一次性地快速加载到表中,极大地提高了数据导入速度。 批量加载的基本流程如下: 1. **生成SequenceFile*...
5. **MapReduce支持**: HBase与Hadoop的MapReduce框架紧密集成,方便进行大规模批处理作业,如数据导入、统计分析等。 6. **RESTful接口**: HBase提供REST接口,使其能被任何支持HTTP的编程语言访问,增加了其应用...
4. **运行bulk load命令**:通过HBase的shell或者Java API执行`hbase org.apache.hadoop.hbase.mapreduce.LoadIncrementalHFiles`命令,指定待导入的HFile所在的目录和目标HBase表名。 5. **清理工作**:批量导入...
HBase集群通常会与Hadoop集群设置在同一个集群中,这意味着HBase使用的分布式文件系统(HDFS)就是生成HFile文件的MapReduce任务所在的同一集群。这样设置的好处是减少了数据迁移过程中的网络传输,并且可以利用...
- **批量加载**:HBase提供批量导入数据的工具,如HFile或MapReduce,提高数据导入效率。 4. **HBase高可用与容错** - **RegionServer故障恢复**:当RegionServer宕机,Master会自动重新分配其上的Region到其他...
7.3. Accessing Other HBase Tables in a MapReduce Job 7.4. Speculative Execution 8. HBase安全 8.1. 安全客户端访问 HBase 8.2. 访问控制 9. 架构 9.1. 概述 9.2. Catalog Tables 9.3. 客户端 9.4. Client ...
5. MapReduce集成:HBase与Hadoop的MapReduce框架无缝集成,可用于批量处理和分析存储在HBase中的大数据。 6. 灵活的数据模型:HBase允许动态添加列,适应不断变化的数据需求。 7. 复制与容错:通过主备复制机制,...
或者,使用MapReduce任务将ORDER_INFO.txt转换为HFile格式,然后使用`importtsv`命令批量导入。 4. **验证导入**:导入完成后,可以通过`get`或`scan`命令检查数据是否正确导入。 ```bash hbase(main):004:0> ...
直接在批量导入过程中写入 HFile**:介绍了一种在批量导入过程中直接写入HFile的方法。 - **49. 行计数示例**:通过一个简单的例子来演示如何使用MapReduce来计算HBase表中的行数。 - **50. Map 任务分割**:解释了...
HBase中的批量加载通常使用MapReduce实现,这种方式可以有效地处理大量的数据导入操作。 #### 多项选择题解析 1. **HBase的特性** - HBase是开源的:虽然题目中提到“不是开源的”这个选项不正确,但HBase确实...