Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/hadoop/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Hadoop 基于部分HBase行创建RDD_Hadoop_Apache Spark_Hbase - Fatal编程技术网

Hadoop 基于部分HBase行创建RDD

Hadoop 基于部分HBase行创建RDD,hadoop,apache-spark,hbase,Hadoop,Apache Spark,Hbase,我正试图根据HBase表中的数据创建RDD: val targetRDD = sparkContext.newAPIHadoopRDD(hBaseConfig, classOf[TableInputFormat], classOf[ImmutableBytesWritable], classOf[Result]) .map { case (key, row) => parse(key, row) } 对每个表行调用parse,而不考虑对数据进行进一步的操作 是

我正试图根据
HBase
表中的数据创建
RDD

val targetRDD = sparkContext.newAPIHadoopRDD(hBaseConfig,
  classOf[TableInputFormat],
  classOf[ImmutableBytesWritable],
  classOf[Result])
  .map {
    case (key, row) => parse(key, row)
  }
对每个表行调用
parse
,而不考虑对数据进行进一步的操作


是否可以仅检索具有与某些条件匹配的特定键的行(即键在某些特定范围内),以便仅对其进行操作?

HBase是一个键/值存储,其中的行按键排序,这意味着:

  • 它在按键检索单行或按键范围检索行序列时非常有效
  • 在某些条件下检索随机行是无效的
所有检索操作归结为两类:和。这不难猜测它们的作用,除非指定stopRow/startRow,否则scan将迭代所有行。您也可以在扫描时设置过滤器,但它仍然必须迭代所有行,过滤器可以降低网络压力,因为HBase可能必须返回更少的行

在您的示例中,使用内部扫描访问Hbase:

public void setConf(配置){
this.conf=配置;
扫描=空;
如果(conf.get(SCAN)!=null){
试一试{
scan=TableMapReduceUtil.convertStringToScan(conf.get(scan));
}捕获(IOE异常){
LOG.error(“发生错误”,e);
}
}否则{
试一试{
scan=createScanFromConfiguration(conf);
}捕获(例外e){
LOG.error(StringUtils.stringifyException(e));
}
}
设置扫描;
}
中的方法还可以提示您如何设置过滤器和键范围:

公共静态扫描createScanFromConfiguration(配置配置)引发IOException{
扫描=新扫描();
if(conf.get(扫描行开始)!=null){
scan.setStartRow(Bytes.tobytes二进制(conf.get(scan_ROW_START));
}
如果(conf.get(扫描行停止)!=null){
scan.setStopRow(Bytes.tobytes二进制(conf.get(scan_ROW_STOP));
}
if(conf.get(扫描列)!=null){
addColumns(scan,conf.get(scan_COLUMNS));
}
if(conf.get(扫描列族)!=null){
scan.addFamily(Bytes.toBytes(conf.get(scan_COLUMN_FAMILY));
}
if(conf.get(扫描时间戳)!=null){
setTimeStamp(Long.parseLong(conf.get(scan_TIMESTAMP));
}
if(conf.get(SCAN\u TIMERANGE\u START)!=null和&conf.get(SCAN\u TIMERANGE\u END)!=null){
scan.setTimeRange(
parseLong(conf.get(SCAN\u TIMERANGE\u START)),
parseLong(conf.get(SCAN_TIMERANGE_END));
}
if(conf.get(SCAN_MAXVERSIONS)!=null){
setMaxVersions(Integer.parseInt(conf.get(scan_MAXVERSIONS));
}
if(conf.get(SCAN_CACHEDROWS)!=null){
setCaching(Integer.parseInt(conf.get(scan_CACHEDROWS));
}
if(conf.get(SCAN\u BATCHSIZE)!=null){
setBatch(Integer.parseInt(conf.get(scan_BATCHSIZE));
}
//默认情况下为false,全表扫描会产生太多BC搅动
setCacheBlocks((conf.getBoolean(scan_CACHEBLOCKS,false));
返回扫描;
}

此stackoverflow提供了一个如何在
hbaseConfig
上设置扫描的示例,请注意,尽管您不必设置扫描,但您可以从上面提到的
createScanFromConfiguration
设置特定属性,如Scan\u ROW\u START和其他属性。

谢谢,我来试试。设置
SCAN\u ROW\u START
的方式适合我。请使答案更简洁。您可能需要签出,并且,这两个选项都可以轻松地使用筛选器加载hbase表conditions@Shankar是的,我看了《凤凰星火》,谢谢。