使用带有JAVA的Spark从HBase读取数据

时间:2017-02-21 14:33:08

标签: java hadoop apache-spark hbase

我想使用JAVA通过Spark访问HBase。除了this之外,我还没有找到任何这方面的例子。在答案中写道,

  

你也可以用Java编写这个

我从How to read from hbase using spark复制了此代码:

import org.apache.hadoop.hbase.client.{HBaseAdmin, Result}
import org.apache.hadoop.hbase.{ HBaseConfiguration, HTableDescriptor }
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.io.ImmutableBytesWritable

import org.apache.spark._

object HBaseRead {
  def main(args: Array[String]) {
    val sparkConf = new SparkConf().setAppName("HBaseRead").setMaster("local[2]")
    val sc = new SparkContext(sparkConf)
    val conf = HBaseConfiguration.create()
    val tableName = "table1"

    System.setProperty("user.name", "hdfs")
    System.setProperty("HADOOP_USER_NAME", "hdfs")
    conf.set("hbase.master", "localhost:60000")
    conf.setInt("timeout", 120000)
    conf.set("hbase.zookeeper.quorum", "localhost")
    conf.set("zookeeper.znode.parent", "/hbase-unsecure")
    conf.set(TableInputFormat.INPUT_TABLE, tableName)

    val admin = new HBaseAdmin(conf)
    if (!admin.isTableAvailable(tableName)) {
      val tableDesc = new HTableDescriptor(tableName)
      admin.createTable(tableDesc)
    }

    val hBaseRDD = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[ImmutableBytesWritable], classOf[Result])
    println("Number of Records found : " + hBaseRDD.count())
    sc.stop()
  }
}

任何人都可以给我一些提示如何找到正确的依赖项,对象和东西吗?

似乎HBaseConfiguration位于hbase-client,但实际上我坚持TableInputFormat.INPUT_TABLE。这不应该是相同的依赖吗?

使用spark访问hbase有更好的方法吗?

2 个答案:

答案 0 :(得分:0)

<header id="title-display"> <h1><strong>Adrian's Workflow</strong></h1> <p class="kicker">Designer // Programmer // Youtuber</p> </header>类位于hbase-server.jar中,您需要在pom.xml中添加该依赖项。请在Spark用户列表中查看HBase and non-existent TableInputFormat

TableInputFormat

以下是使用Spark从Hbase读取的示例代码。

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-server</artifactId>
    <version>1.3.0</version>
</dependency>

答案 1 :(得分:0)

是。有。使用Cloudera的SparkOnHbase

<dependency>
    <groupId>org.apache.hbase</groupId>
    <artifactId>hbase-spark</artifactId>
    <version>1.2.0-cdh5.7.0</version>
</dependency>

使用HBase扫描从您的HBase表中读取数据(如果您知道要检索的行的键,则使用Bulk Get)。

Configuration conf = HBaseConfiguration.create();
conf.addResource(new Path("/etc/hbase/conf/core-site.xml"));
conf.addResource(new Path("/etc/hbase/conf/hbase-site.xml"));
JavaHBaseContext hbaseContext = new JavaHBaseContext(jsc, conf);

Scan scan = new Scan();
scan.setCaching(100);

JavaRDD<Tuple2<byte[], List<Tuple3<byte[], byte[], byte[]>>>> hbaseRdd = hbaseContext.hbaseRDD(tableName, scan);

System.out.println("Number of Records found : " + hBaseRDD.count())