sparksql查询时是不是要把要查询的整张表的数据都要加载到内存中进行计算

迷途1503 2018-07-13 05:56:16
我做了一个使用sparksql查询hbase数据的功能,只取结果的1000条数据,用的limit算子,最后用foreachPartition算子将数据插入数据库中,但是hbase那张表的数据量很大,有3000多个region,查看sparkui,发现尽然是要把所有的数据都要加载一遍取出对应的数据,所以请教各位大神,sparksql计算的时候是要把所有的数据都要加载一遍计算吗
...全文
1159 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
LinkSe7en 2018-07-23
  • 打赏
  • 举报
回复
如果数据量巨大而集群计算资源吃不消的话,就建议不要用HBase存储数据,HBase并不留存任何结构化信息,同时也没有索引,因此并不适合多维查询。用Hive+Parquet+合理的分区分桶优化+SparkSQL查询性能会可观得多。
另外更酷炫的是Spark+CarbonData,满足绝大多数OLAP需求,甚至详单查询的性能也很恐怖。最美妙的是支持update delete insert
LinkSe7en 2018-07-23
  • 打赏
  • 举报
回复

JavaPairRDD<ImmutableBytesWritable, Result> myRDD = context.newAPIHadoopRDD(configuration,TableInputFormat.class, ImmutableBytesWritable.class, Result.class);

你得到这个RDD的时候,已经是Scan过的数据了。然后你需要将它map成JavaRDD<org.apache.spark.sql.Row>,或者JavaRDD<[表对应的Bean]>。然后通过sqlContext.createDataFrame来创建DataFrame,然后才可以执行SparkSQL查询
迷途1503 2018-07-17
  • 打赏
  • 举报
回复
代码是这样
JavaSparkContext context = new JavaSparkContext(spark.sparkContext());

Configuration configuration = HBaseConfiguration.create();
configuration.set("hbase.zookeeper.property.clientPort", "2181");
configuration.set("hbase.zookeeper.quorum", "192.168.10.82");
//configuration.set("hbase.master", "192.168.10.82:60000");



Scan scan = new Scan();
String tableName = "test_lcc_person";
configuration.set(TableInputFormat.INPUT_TABLE, tableName);

ClientProtos.Scan proto = ProtobufUtil.toScan(scan);
String ScanToString = Base64.encodeBytes(proto.toByteArray());
configuration.set(TableInputFormat.SCAN, ScanToString);

JavaPairRDD<ImmutableBytesWritable, Result> myRDD = context.newAPIHadoopRDD(configuration,TableInputFormat.class, ImmutableBytesWritable.class, Result.class);
迷途1503 2018-07-17
  • 打赏
  • 举报
回复
要想使用sparksql不得先把表准备好呀,所以要用sparksql的sql语句计算,就要把表的数据都要在内存读一遍是吗
迷途1503 2018-07-17
  • 打赏
  • 举报
回复
用sparksql写的,context.newAPIHadoopRDD读的hbase
LinkSe7en 2018-07-16
  • 打赏
  • 举报
回复
你在读取HBase的时候,用了Scan条件吗?如果不是,那就是把整张表读到Spark(当然是分步的)内存中去做过滤,计算。一个Region的数据对应Spark RDD的一个分区。

1,258

社区成员

发帖
与我相关
我的任务
社区描述
Spark由Scala写成,是UC Berkeley AMP lab所开源的类Hadoop MapReduce的通用的并行计算框架,Spark基于MapReduce算法实现的分布式计算。
社区管理员
  • Spark
  • shiter
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧