zoukankan      html  css  js  c++  java
  • kudu简介与操作方式

    kudu简介与操作方式

    0.932018.06.09 16:13:35字数 750阅读 30042

    1、kudu整体介绍

    Kudu是cloudera开源的运行在hadoop平台上的列式存储系统,拥有Hadoop生态系统应用的常见技术特性,运行在一般的商用硬件上,支持水平扩展,高可用。

    kudu的使用场景:

    • Strong performance for both scan and random access to help customers simplify complex hybrid architectures(适用于那些既有随机访问,也有批量数据扫描的复合场景)
    • High CPU efficiency in order to maximize the return on investment that our customers are making in modern processors(高计算量的场景)
    • High IO efficiency in order to leverage modern persistent storage(使用了高性能的存储设备,包括使用更多的内存)
    • The ability to update data in place, to avoid extraneous processing and data movement(支持数据更新,避免数据反复迁移)
    • The ability to support active-active replicated clusters that span multiple data centers in geographically distant locations(支持跨地域的实时数据备份和查询)

    kudu使用时的优势:
    1)一个table由多个tablet组成,对分区查看、扩容和数据高可用支持非常好
    2)支持update和upsert操作。
    3)与imapla集成或spark集成后(dataframe)可通过标准的sql操作,使用起来很方便
    4)可与spark系统集成

    kudu使用时的劣势:
    1)只有主键可以设置range分区,且只能由一个主键,也就是一个表只能有一个字段range分区,且该字段必须是主键。
    2)如果是pyspark连接kudu,则不能对kudu进行额外的操作;而scala的spark可以调用kudu本身的库,支持kudu的各种语法。
    3)kudu的shell客户端不提供表schema查看。如果你不通过imapla连接kudu,且想要查看表的元数据信息,需要用spark加载数据为dataframe,通过查看dataframe的schema查看表的元数据信息。
    3)kudu的shell客户端不提供表内容查看。如果你想要表的据信息,要么自己写脚本,要么通过spark、imapla查看。
    4)如果使用range 分区需要手动添加分区。假设id为分区字段,需要手动设置第一个分区为1-30.第二个分区为30-60等等
    5)时间格式是utc类型,需要将时间戳转化为utc类型,注意8个小时时差

    2、kudu操作

    2.1、pyspark连接kudu

    pyspark --jars /home/oicq/guomm/kudu-spark2_2.11-1.6.0.jar # 启动 
    sqlContext = pyspark.sql.SQLContext(spark) # 创建sql连接 
    df = sqlContext.read.format('org.apache.kudu.spark.kudu').options(**{"kudu.master":"127.0.0.1:7051", "kudu.table":"python-example"}).load() # 读取kudu表
    df.write.format('org.apache.kudu.spark.kudu').option('kudu.master', '127.0.0.1:7051').option('kudu.table', 'python-example1').mode('append').save() # 写入kudu表
    

    2.2、scala spark连接kudu(记得添加jar包)

    jar包:
    kudu-client-1.6.0.jar
    kudu-spark2_2.11-1.6.0.jar

    package com.is
    import org.apache.spark.SparkConf
    import org.apache.spark.SparkContext
    import org.apache.spark.SparkContext._
    import org.apache.spark.sql.{SQLContext, SparkSession}
    
    import org.apache.kudu.spark.kudu._
    import org.apache.kudu.spark
    
    
    
    object SparkKuduWrite {
    
      def main(args:Array[String]) {
        if(args.length < 2){
          println("Usage:SparkKuduWrite <data_path><kudu_table_name><kudu_master_hosts>")
          System.exit(1)
        }
        var data_path = args(0)
        var kudu_table_name = args(1)
        var kudu_master_hosts = args(2)
    
        println(data_path)
        println(kudu_table_name)
        println(kudu_master_hosts)
    
        var conf = new SparkConf().setAppName("stra_platform_test")
        val spark = SparkSession.builder().config(conf).getOrCreate()
        val sc = spark.sparkContext
    
        import spark.implicits._
    
        val kuduContext = new KuduContext(kudu_master_hosts, sc)
        var df = spark.read.load(data_path)
        # 通过kuduContext可以操作kudu的所有功能
        kuduContext.upsertRows(df, kudu_table_name)
      }
    
    }
    

    3、有用的文章:

    kudu主页:https://kudu.apache.org/docs/index.html
    kudu的分区详细信息:https://kudu.apache.org/docs/schema_design.html
    操作kudu的各种形式:https://kudu.apache.org/docs/developing.html#_viewing_the_api_documentation
    kudu python客户端源代码:https://github.com/apache/kudu/blob/master/python/kudu/client.pyx
    kudu scala spark操作详细例子:https://blog.cloudera.com/blog/2017/02/up-and-running-with-apache-spark-on-apache-kudu/

  • 相关阅读:
    JavaScript实现接口的三种经典方式
    javascript实现继承3种方式: 原型继承、借用构造函数继承、组合继承,模拟extends方法继承
    JavaScript简单重写构造器的原型
    cocos2d-x中的宏定义CC_PROPERTY
    CCCallFunc CCCallFuncN CCCallFuncND的区别和使用
    action(二)
    action(一)
    CShopDialog类
    cocos2d-x与ISO内存管理(转)
    CGameConfig类
  • 原文地址:https://www.cnblogs.com/grj001/p/12223734.html
Copyright © 2011-2022 走看看