将大型 Hbase 表加载到 SPARK RDD 中需要很长时间

Posted

技术标签:

【中文标题】将大型 Hbase 表加载到 SPARK RDD 中需要很长时间【英文标题】:Loading a large Hbase table into SPARK RDD takes long time 【发布时间】:2014-12-04 22:33:07 【问题描述】:

我正在尝试将大型 Hbase 表加载到 SPARK RDD 中以在实体上运行 SparkSQL 查询。对于大约 600 万行的实体,将其加载到 RDD 大约需要 35 秒。是预期的吗?有什么办法可以缩短加载过程吗?我从http://hbase.apache.org/book/perf.reading.html 那里得到了一些提示来加快这个过程,例如, scan.setCaching(cacheSize) 并且只添加必要的属性/列进行扫描。 我只是想知道是否有其他方法可以提高速度?

这里是sn-p的代码:

SparkConf sparkConf = new SparkConf().setMaster("spark://url").setAppName("SparkSQLTest");
JavaSparkContext jsc = new JavaSparkContext(sparkConf);
Configuration hbase_conf = HBaseConfiguration.create();
hbase_conf.set("hbase.zookeeper.quorum","url");
hbase_conf.set("hbase.regionserver.port", "60020");
hbase_conf.set("hbase.master", "url");
hbase_conf.set(TableInputFormat.INPUT_TABLE, entityName);
Scan scan = new Scan();
scan.addColumn(Bytes.toBytes("MetaInfo"), Bytes.toBytes("col1"));
scan.addColumn(Bytes.toBytes("MetaInfo"), Bytes.toBytes("col2"));
scan.addColumn(Bytes.toBytes("MetaInfo"), Bytes.toBytes("col3"));
scan.setCaching(this.cacheSize);
hbase_conf.set(TableInputFormat.SCAN, convertScanToString(scan));
JavaPairRDD<ImmutableBytesWritable, Result> hBaseRDD 
= jsc.newAPIHadoopRDD(hbase_conf,
            TableInputFormat.class, ImmutableBytesWritable.class,
            Result.class);
logger.info("count is " + hBaseRDD.cache().count());    

【问题讨论】:

【参考方案1】:

根据您的集群大小和行的大小(列和列族,以及您的区域的拆分方式),它可能会有所不同 - 但这听起来并不合理。考虑一下每秒有多少行:)

【讨论】:

以上是关于将大型 Hbase 表加载到 SPARK RDD 中需要很长时间的主要内容,如果未能解决你的问题,请参考以下文章

spark将数据加载到hbase--bulkload方式

spark将数据加载到hbase--bulkload方式

spark将数据加载到hbase--bulkload方式

转换CassandraTableScanRDD org.apache.spark.rdd.RDD

Spark - 将通用数组传递给 GenericRowWithSchema

sparkSQL自定义数据源