Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/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
Scala 编译Spark代码时出错:对象mapreduce不是包org.apache.hadoop.hbase的成员_Scala_Maven_Hbase_Apache Spark - Fatal编程技术网

Scala 编译Spark代码时出错:对象mapreduce不是包org.apache.hadoop.hbase的成员

Scala 编译Spark代码时出错:对象mapreduce不是包org.apache.hadoop.hbase的成员,scala,maven,hbase,apache-spark,Scala,Maven,Hbase,Apache Spark,编辑:我将顶级pom文件中定义的hbase依赖项添加到项目级pom中,现在它可以找到包了 我有一个scala对象从Spark(1.0.1)中的HBase(0.98.4-hadoop2)表读取数据。但是,在尝试导入org.apache.hadoop.hbase.mapreduce.TableInputFormat时,使用maven编译会导致错误 error: object mapreduce is not a member of package org.apache.hadoop.hbase 代

编辑:我将顶级pom文件中定义的hbase依赖项添加到项目级pom中,现在它可以找到包了

我有一个scala对象从Spark(1.0.1)中的HBase(0.98.4-hadoop2)表读取数据。但是,在尝试导入org.apache.hadoop.hbase.mapreduce.TableInputFormat时,使用maven编译会导致错误

error: object mapreduce is not a member of package org.apache.hadoop.hbase
代码和相关pom如下所示:

import org.apache.hadoop.hbase.util.Bytes
import org.apache.spark.rdd.NewHadoopRDD
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.mapred.JobConf
import org.apache.spark.SparkContext
import java.util.Properties
import java.io.FileInputStream
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapreduce.TableInputFormat

object readDataFromHbase {

  def main(args: Array[String]): Unit = {
    var propFileName = "hbaseConfig.properties"
    if(args.size > 0){
      propFileName = args(0)
    }

    /** Load properties **/
    val prop = new Properties
    val inStream = new FileInputStream(propFileName)
    prop.load(inStream)

    //set spark context and open input file
    val sparkMaster = prop.getProperty("hbase.spark.master")
    val sparkJobName = prop.getProperty("hbase.spark.job.name")
    val sc = new SparkContext(sparkMaster,sparkJobName )
    //set hbase connection
    val hbaseConf = HBaseConfiguration.create()
    hbaseConf.set("hbase.rootdir", prop.getProperty("hbase.rootdir"))
    hbaseConf.set(TableInputFormat.INPUT_TABLE, prop.getProperty("hbase.table.name"))

   val hBaseRDD = sc.newAPIHadoopRDD(hbaseConf, classOf[org.apache.hadoop.hbase.mapreduce.TableInputFormat], 
    classOf[org.apache.hadoop.hbase.io.ImmutableBytesWritable], 
    classOf[org.apache.hadoop.hbase.client.Result]
    )
    val hBaseData = hBaseRDD.map(t=>t._2)
    .map(res =>res.getColumnLatestCell("cf".getBytes(), "col".getBytes()))
    .map(c=>c.getValueArray())
    .map(a=> new String(a, "utf8"))

    hBaseData.foreach(println)
  }

}
pom文件的Hbase部分是(Hbase.version=0.98.4-hadoop2):


org.apache.hbase
数据库
${hbase.version}
org.apache.hbase
hbase客户端
${hbase.version}
org.apache.hbase
hbase服务器
${hbase.version}
org.apache.hbase
hbase通用
${hbase.version}
org.apache.hbase
hbase-hadoop2-compat
${hbase.version}
org.apache.hbase
hbase hadoop compat
${hbase.version}
org.apache.hbase
hbase hadoop compat
${hbase.version}
org.apache.hbase
hbase协议
${hbase.version}

我把包裹洗干净了,运气不好。我从导入中需要的主要内容是用于设置RDD的classOf(TableInputFormat)。我怀疑我的pom文件中缺少一个依赖项,但无法确定是哪一个。非常感谢您的帮助。

在spark 1.0及更高版本中:

将所有hbase jar放入spark/assembly/lib或spark/core/lib目录。希望您有docker来自动化所有这些

a) 对于CDH版本,relate hbase jar通常位于/usr/lib/hbase/*.jar下,它是指向正确jar的符号链接


b) 从
org.apache.hadoop.hbase.mapreduce中可以看到一篇很好的文章
packacge,它是工件的一部分,因此您需要将其作为依赖项添加,如@commented:

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-server</artifactId>
    <version>${hbase.version}</version>
</dependency>

org.apache.hbase
hbase服务器
${hbase.version}

好的。对我来说,它在hbase服务器中。
<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-server</artifactId>
    <version>${hbase.version}</version>
</dependency>