Spark向Hbase读写操作

初始化操作

create 'student', 'message'

向Hbase写入数据

import java.util.UUID
import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.Put
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapred.TableOutputFormat
import org.apache.hadoop.hbase.util.Bytes
import org.apache.hadoop.mapred.JobConf
import org.apache.spark.{SparkConf, SparkContext}
object demo06 {
  def main(args: Array[String]): Unit = {
    // 定义配置
    val config = new SparkConf().setMaster("local[*]").setAppName("hbase")
    //根据配置实例spark 上下文对象
    val sc = new SparkContext(config)
    //定义hbase 连接器
    val conf = HBaseConfiguration.create()
    // 添加连接配置
    conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181")
    //读取数据
    val data = sc.textFile("./data/hbase.txt").map(x => {
      // 按照\t 切分 返回元组
      val split = x.split("\t");
      (split(0), split(1), split(2), split(3))
    })
    // 将每一条数据进行转换为 put
    val value = data.map(x => {
      // 定义put 添加信息
      val put = new Put(Bytes.toBytes(UUID.randomUUID().toString.substring(0, 10).toUpperCase))
      //向put 添加value
      put.addImmutable(Bytes.toBytes("message"), Bytes.toBytes("name"), Bytes.toBytes(x._1))
      put.addImmutable(Bytes.toBytes("message"), Bytes.toBytes("class"), Bytes.toBytes(x._2))
      put.addImmutable(Bytes.toBytes("message"), Bytes.toBytes("sex"), Bytes.toBytes(x._3))
      put.addImmutable(Bytes.toBytes("message"), Bytes.toBytes("province"), Bytes.toBytes(x._4))
      // 返回元组
      (new ImmutableBytesWritable(), put)
    })
    //根据 conf 获取连接
    val job = new JobConf(conf)
    // 定义输出类型
    job.setOutputFormat(classOf[TableOutputFormat])
    // 设置要向那个表写入
    job.set(TableOutputFormat.OUTPUT_TABLE, "student")
    // 提交数据
    value.saveAsHadoopDataset(job)
    println("数据写入成功")
  }
}

向Hbase读取数据

import org.apache.hadoop.hbase.HBaseConfiguration
import org.apache.hadoop.hbase.client.Result
import org.apache.hadoop.hbase.io.ImmutableBytesWritable
import org.apache.hadoop.hbase.mapreduce.TableInputFormat
import org.apache.hadoop.hbase.util.Bytes
import org.apache.spark.{SparkConf, SparkContext}
object demo07 {
  def main(args: Array[String]): Unit = {
    // 定义配置
    val config = new SparkConf().setMaster("local[*]").setAppName("hbase")
    //根据配置实例spark 上下文对象
    val sc = new SparkContext(config)
    //定义hbase 连接器
    val conf = HBaseConfiguration.create()
    // 添加连接配置
    conf.set("hbase.zookeeper.quorum", "node01:2181,node02:2181,node03:2181")
    // 设置要读取的那个表中的信息
    conf.set(TableInputFormat.INPUT_TABLE, "student")
    // 添加配置 TableInputFormat 读取的格式  ImmutableBytesWritable 输入的key  Result 输入的value
    var hbase = sc.newAPIHadoopRDD(conf, classOf[TableInputFormat], classOf[ImmutableBytesWritable], classOf[Result])
    //循环遍历数据
    hbase.foreach {
      case (_, result) =>
        //获取rowkey
        val rowkey = Bytes.toString(result.getRow)
        // 获取姓名
        val name = Bytes.toString(result.getValue(Bytes.toBytes("message"), Bytes.toBytes("name")))
        // 获取班级
        val class_ = Bytes.toString(result.getValue(Bytes.toBytes("message"), Bytes.toBytes("class")))
        // 获取省份
        val sex = Bytes.toString(result.getValue(Bytes.toBytes("message"), Bytes.toBytes("sex")))
        // 获取省份
        val province = Bytes.toString(result.getValue(Bytes.toBytes("message"), Bytes.toBytes("province")))
        // 输出
        println(s"rowKey ${rowkey} name ${name}  class ${class_} sex ${sex} province ${province}")
    }

    sc.stop()
  }

发布了88 篇原创文章 · 获赞 99 · 访问量 21万+

猜你喜欢

转载自blog.csdn.net/qq_43791724/article/details/105374109
今日推荐