kudu简介与操作方式

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/

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Tech Talk

从CPU爆表问题排查谈Java性能监测之道

记一次Java线上服务器CPU过载问题的排查过程,详解排查过程中用到的Java性能监测工具:jvisualvm、jstack、jstat、jmap。

46410
来自专栏高性能服务器开发

强大的搜索开源框架Elastic Search介绍

近期工作需要,需要从成千上万封邮件中搜索一些关键字并返回对应的邮件内容,经调研我选择了Elastic Search。

1591
来自专栏博客园迁移

redis见解

http://blog.csdn.net/zhiguozhu/article/details/50517527 Redis 原生session与redis中的s...

811
来自专栏数据和云

当Java虚拟机遇上Linux Arena内存池

作者简介 刘韬,云和恩墨中间件服务交付团队专家 Java开发出身,10年WebLogic相关开发、运维工作经验,熟悉SOA、现代业务系统架构中各层组件,尤其擅长...

4847
来自专栏皮振伟的专栏

[linux][kernel]meltdown攻击和retpoline防御分析

前言: Intel爆出来的漏洞,搞了一个大新闻,然后Linus也对Intel的补丁批判了一番。 关于meltdown攻击的原理,以及retpoline防御,见下...

3726
来自专栏趣谈编程

用户空间和内核空间是什么?

学习 Linux 时,经常可以看到两个词:User space(用户空间)和 Kernel space(内核空间)。

1503
来自专栏容器云生态

Docker监控方案(TIG)的研究与实践之Influxdb

前言: Influxdb也是有influxdata公司(www.influxdata.com )开发的用于数据存储的时间序列数据库.可用于数据的时间排列。在整个...

2738
来自专栏阮一峰的网络日志

User space 与 Kernel space

学习 Linux 时,经常可以看到两个词:User space(用户空间)和 Kernel space(内核空间)。 简单说,Kernel space 是 Li...

2705
来自专栏aCloudDeveloper

Docker 基础技术之 Linux namespace 详解

Docker 是“新瓶装旧酒”的产物,依赖于 Linux 内核技术 chroot 、namespace 和 cgroup。本篇先来看 namespace 技术。...

3887
来自专栏散尽浮华

Redis Cluster集群总结性梳理

前面已经介绍了Redis Cluster集群及其部署过程,下面再补充下有关Redis Cluster应用原理部分内容,以便更加深刻透彻地理解Redis Clus...

4389

扫码关注云+社区