参照org.apache.spark.examples包中的HBaseTest编写一个读取HBase表中数据转换为RDD的程序。
目标表中数据量为2494068条,但是使用newAPIHadoopRDD读进来的RDD.count后的结果为1440966。是何原因,为什么读入的数据集不完整?
代码如下:
import org.apache.hadoop.hbase.client.HBaseAdmin
import org.apache.hadoop.hbase.{HBaseConfiguration, HTableDescriptor, TableName}
import org.apache.hadoop.hbase.mapreduce.TableInputFormatval conf = HBaseConfiguration.create()
conf.set(TableInputFormat.INPUT_TABLE, "protal")
conf.set("hbase.zookeeper.property.clientPort", "2181")
conf.set("hbase.zookeeper.quorum", "data6,data7,data8")val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat],
  classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable],
  classOf[org.apache.hadoop.hbase.client.Result])hBaseRDD.count测试了两个表,表1中数据量为200余万条,数据总大小40G左右,表2中数据量为200余万条,数据总大小10G左右。
结果表1不能完整读入,表2就可以。

解决方案 »

  1.   

    RDD.count后的结果为Hbase的行数,也就是rowkey的数目。你说的目标数据量是不是总列的数量
      

  2.   

    我刚好跟你相反,我用newAPIHadoopRDD读取后调用count(),返回的结果比Hbase里面表的数量多。后来发现Spark并不一定说每次都把一行数据完整地读进来,可能分了几次,并不知道为什么会这样。
      

  3.   

    我读HBase的方法和你的有点区别
    你的Scan呢?没有设置Filter么?而且读出来的RDD<ImmutableBytesWritable,Result>不转成dataset么
      

  4.   

    是不是spark的环境参数配置有问题啊,运行过程中有出现warn之类的吗,shuffle有出现问题么?