如何提高spark批量读取HBase数据的性能

问题描述

Configurationconf=HBaseConfiguration.create();StringtableName="testTable";Scanscan=newScan();scan.setCaching(10000);scan.setCacheBlocks(false);conf.set(TableInputFormat.INPUT_TABLE,tableName);ClientProtos.Scanproto=ProtobufUtil.toScan(scan);StringScanToString=Base64.encodeBytes(proto.toByteArray());conf.set(TableInputFormat.SCAN,ScanToString);JavaPairRDD<ImmutableBytesWritable,Result>myRDD=sc.newAPIHadoopRDD(conf,TableInputFormat.class,ImmutableBytesWritable.class,Result.class);在Spark使用如上Hadoop提供的标准接口读取HBase表数据(全表读),读取5亿左右数据,要20M+,而同样的数据保存在Hive中,读取却只需要1M以内,性能差别非常大。现在项目已基本选型要使用HBase作为大数据的存储,而Spark读取HBase数据的性能却如此慢,已经偿试了直接读取HFile,但只读取解析一片HFile文件的性能也很慢(400M数据大约需90s),还有没有其它的解决办法?难道Spark就不能以Hbase作为基础存储了吗?

解决方案

解决方案二:
请问楼主您的问题解决了吗?可以分享下经验吗?

时间: 2024-10-25 08:44:42

如何提高spark批量读取HBase数据的性能的相关文章

SQL Server插入或者批量导入大量数据的性能表现

我经常看到客户测试SQL Server 的插入(INSERT)或者批量导入大量数据的性能表现.其中有测试大量INSERT的TSQL脚本如下: use myDB go createtable t1(id intprimarykeynothttp://www.aliyun.com/zixun/aggregation/19527.html">nullidentity (1,1),name varchar(200),memo char(500)); go truncatetable t1 go d

spark利用newAPIHadoopRDD读取hbase数据不完整的问题

问题描述 参照org.apache.spark.examples包中的HBaseTest编写一个读取HBase表中数据转换为RDD的程序.目标表中数据量为2494068条,但是使用newAPIHadoopRDD读进来的RDD.count后的结果为1440966.是何原因,为什么读入的数据集不完整?代码如下:importorg.apache.hadoop.hbase.client.HBaseAdminimportorg.apache.hadoop.hbase.{HBaseConfiguration

如何利用mapreduce批量读写hbase数据

package com.mr.test; import java.io.IOException; import java.util.Iterator; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hbase.HBaseConfiguration; import org.apache.hadoop.hbase.KeyValue; imp

spark批量插入hbase

问题描述 当rdd是自定义的list的时候可以这么写valrdd=List((1,"lilei",14),(2,"hanmei",18),(3,"someone",38))vallocalData=sc.parallelize(rdd).map(convert)localData.saveAsHadoopDataset(jobConf)defconvert(triple:(String,String,String))={valp=newPut(B

大数据应用之HBase数据插入性能优化之多线程并行插入测试案例

一.引言: 上篇文章提起关于HBase插入性能优化设计到的五个参数,从参数配置的角度给大家提供了一个性能测试环境的实验代码.根据网友的反馈,基于单线程的模式实现的数据插入毕竟有限.通过个人实测,在我的虚拟机环境下,单线程插入数据的值约为4w/s.集群指标是:CPU双核1.83,虚拟机512M内存,集群部署单点模式.本文给出了基于多线程并发模式的,测试代码案例和实测结果,希望能给大家一些启示: 二.源程序: import org.apache.hadoop.conf.Configuration;

elasticsearch 是怎么读取Hbase里面数据

问题描述 elasticsearch是怎么读取Hbase数据. 解决方案 解决方案二:天啦噜0回复.我还想看看呢.解决方案三:ElasticSearch项目里有个River他主要是用数据同步.可以在River用定时器进行HBase数据的获取,拿到数据结果给回ElasticSearch接口.

python操作 hbase 数据的方法_python

配置 thrift python使用的包 thrift 个人使用的python 编译器是pycharm community edition. 在工程中设置中,找到project interpreter, 在相应的工程下,找到package,然后选择 "+" 添加, 搜索 hbase-thrift (Python client for HBase Thrift interface),然后安装包. 安装服务器端thrift. 参考官网,同时也可以在本机上安装以终端使用. thrift Ge

hive数据批量导入hbase过程中遇到分区文件不存在异常

问题描述 hive数据批量导入hbase过程中遇到分区文件不存在异常 在做一个hive数据批量导入hbase的方法,根据官方文档一步一步的做下来,但是在生成HFILE文件时却报了一个比较让人纠结的错误,在网上找了很长时间,都木有合适的答案,在hive命令行中执行的代码如下: SET mapred.reduce.tasks=5; SET hive.mapred.partitioner=org.apache.hadoop.mapred.lib.TotalOrderPartitioner; SET t

spark读取hbase空指针异常,跪求大神指导

问题描述 spark版本:1.2.1hbase版本:0.98importorg.apache.hadoop.hbase.HBaseConfigurationimportorg.apache.hadoop.hbase.mapreduce.TableInputFormatimportorg.apache.spark.SparkConfimportorg.apache.spark.SparkContextobjectHBaseTest{defmain(args:Array[String]){valsp