美文网首页mysql
使用Phoenix操作NoSQL数据库-HBase

使用Phoenix操作NoSQL数据库-HBase

作者: 多彩海洋 | 来源:发表于2020-09-12 16:06 被阅读0次

    背景

    在使用hbase的过程中,使用jdbc原生api方式连接hbase的代码写的很难受,而且维护二级索引也不方便,所以使用了hbase的皮肤--phoenix.

    在phoenix中,新增和修改使用同一种sql语法实现

    upsert into us_population values('NY','NewYork',8143197);--如果不存在insert,存在则update
    

    phoenix和hbase表之间的映射

    默认情况下,直接在hbase中创建的表,通过phoenix是查看不到的。比如kylin相关表是在hbase中直接创建的,在phoenix中是查看不到kylin等表的。

    在hbase建表
    create 'test',{NAME=>'info1'},{NAME=>'info2'}

    在phoenix中使用create table 建立映射
    create table "test"(
    id varchar primary key,
    "info1"."firstname" varchar,
    "info1"."lastname" varchar,
    "info2"."company" varchar,
    "info2"."address" varchar);

    spark读写hbase(使用phoenix方式)代码果然清爽了许多:)

    object SparkHBaseDataFrame {
      def main(args: Array[String]) {
        // 屏蔽不必要的日志显示在终端上
        Logger.getLogger("org.apache.spark").setLevel(Level.WARN)
    
        val spark = SparkSession.builder().appName("SparkHBaseDataFrame").getOrCreate()
    
        val url = s"jdbc:phoenix:localhost:2181"
        val dbtable = "PHOENIXTEST"
    
        //spark 读取 phoenix 返回 DataFrame 的 第一种方式
        val rdf = spark.read
          .format("jdbc")
          .option("driver", "org.apache.phoenix.jdbc.PhoenixDriver")
          .option("url", url)
          .option("dbtable", dbtable)
          .load()
        rdf.printSchema()
    
        //spark 读取 phoenix 返回 DataFrame 的 第二种方式
        val df = spark.read
          .format("org.apache.phoenix.spark")
          .options(Map("table" -> dbtable, "zkUrl" -> url))
          .load()
        df.printSchema()
    
        //spark DataFrame 写入 phoenix,需要先建好表
        df.write
          .format("org.apache.phoenix.spark")
          .mode(SaveMode.Overwrite)
          .options(Map("table" -> "PHOENIXTESTCOPY", "zkUrl" -> url))
          .save()
    
        spark.stop()
      }
    }
    

    相关文章

      网友评论

        本文标题:使用Phoenix操作NoSQL数据库-HBase

        本文链接:https://www.haomeiwen.com/subject/zjuwektx.html