初始化操作
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()
}