spark2.4.3+kudu1.9

1 批量读

val df = spark.read.format("kudu")
.options(Map("kudu.master" -> "master:7051", "kudu.table" -> "impala::test_db.test_table"))
.load
df.createOrReplaceTempView("tmp_table")
spark.sql("select * from tmp_table limit 10").show()

2 批量写

import org.apache.kudu.spark.kudu.{KuduContext, KuduWriteOptions}

val kuduMaster = "master:7051"
val table = "impala::test_db.test_table" val kuduContext = new KuduContext(kuduMaster, sc) kuduContext.upsertRows(df, table, new KuduWriteOptions(false, true))

3 单个读/条件读

cd $SPARK_HOME
bin/spark-shell --packages org.apache.kudu:kudu-spark2_2.11:1.9.0 import org.apache.kudu.client.{KuduPredicate, RowResult}
import org.apache.kudu.spark.kudu.KuduContext val kuduMaster = "master:7051"
val table = "impala::test_db.test_table" val kuduContext = new KuduContext(kuduMaster, sc)
val table = kuduContext.syncClient.openTable(table)
val predicate = KuduPredicate.newComparisonPredicate(table.getSchema().getColumn("id"),KuduPredicate.ComparisonOp.EQUAL, "testid")
val scanner = kuduContext.syncClient.newScannerBuilder(table).addPredicate(predicate).build() scanner.hasMoreRows
val rows = scanner.nextRows
rows.hasNext
val row = rows.next println(row.getString(0))

4 单个写

cd $SPARK_HOME
bin/spark-shell --packages org.apache.kudu:kudu-spark2_2.11:1.9.0 import org.apache.kudu.client.{KuduPredicate, RowResult}
import org.apache.kudu.spark.kudu.KuduContext
import org.apache.kudu.client.SessionConfiguration val kuduMaster = "172.26.192.219:7051" val kuduContext = new KuduContext(kuduMaster, sc)
val kuduClient = kuduContext.syncClient
val kuduTable = kuduClient.openTable("impala::dataone_xishaoye.tbl_order_union")
val kuduSession = kuduClient.newSession() //AUTO_FLUSH_BACKGROUND AUTO_FLUSH_SYNC MANUAL_FLUSH
kuduSession.setFlushMode(SessionConfiguration.FlushMode.AUTO_FLUSH_SYNC)
kuduSession.setMutationBufferSpace(1000) val insert = kuduTable.newInsert()
val row = insert.getRow()
row.addString(0, "hello")
kuduSession.apply(insert)
//kuduSession.flush

其他:newInsert/newUpdate/newDelete/newUpsert

5 错误定位

如果apply之后发现修改没有生效,并且确认已经提交,可能有报错(不会抛异常),需要从OperationResponse中打印错误信息

val opResponse = session.apply(op)
if (opResponse != null && opResponse.hasRowError) println(opResponse.getRowError.toString)

注意一定要使用FlushMode.AUTO_FLUSH_SYNC,详见源代码

org.apache.kudu.client.KuduSession

    public OperationResponse apply(Operation operation) throws KuduException {
while(true) {
try {
Deferred<OperationResponse> d = this.session.apply(operation);
if(this.getFlushMode() == FlushMode.AUTO_FLUSH_SYNC) {
return (OperationResponse)d.join();
} return null;
} catch (PleaseThrottleException var5) {
PleaseThrottleException ex = var5; try {
ex.getDeferred().join();
} catch (Exception var4) {
LOG.error("Previous batch had this exception", var4);
}
} catch (Exception var6) {
throw KuduException.transformException(var6);
}
}
}

参考:

https://kudu.apache.org/docs/developing.html

【原创】大数据基础之Kudu(4)spark读写kudu的更多相关文章

  1. 【原创】大数据基础之Flume(2)kudu sink

    kudu中的flume sink代码路径: https://github.com/apache/kudu/tree/master/java/kudu-flume-sink kudu-flume-sin ...

  2. 【原创】大数据基础之Zookeeper(2)源代码解析

    核心枚举 public enum ServerState { LOOKING, FOLLOWING, LEADING, OBSERVING; } zookeeper服务器状态:刚启动LOOKING,f ...

  3. 大数据学习系列之七 ----- Hadoop+Spark+Zookeeper+HBase+Hive集群搭建 图文详解

    引言 在之前的大数据学习系列中,搭建了Hadoop+Spark+HBase+Hive 环境以及一些测试.其实要说的话,我开始学习大数据的时候,搭建的就是集群,并不是单机模式和伪分布式.至于为什么先写单 ...

  4. CentOS6安装各种大数据软件 第十章:Spark集群安装和部署

    相关文章链接 CentOS6安装各种大数据软件 第一章:各个软件版本介绍 CentOS6安装各种大数据软件 第二章:Linux各个软件启动命令 CentOS6安装各种大数据软件 第三章:Linux基础 ...

  5. 大数据平台搭建(hadoop+spark)

    大数据平台搭建(hadoop+spark) 一.基本信息 1. 服务器基本信息 主机名 ip地址 安装服务 spark-master 172.16.200.81 jdk.hadoop.spark.sc ...

  6. 大数据系列之并行计算引擎Spark部署及应用

    相关博文: 大数据系列之并行计算引擎Spark介绍 之前介绍过关于Spark的程序运行模式有三种: 1.Local模式: 2.standalone(独立模式) 3.Yarn/mesos模式 本文将介绍 ...

  7. 大数据系列之并行计算引擎Spark介绍

    相关博文:大数据系列之并行计算引擎Spark部署及应用 Spark: Apache Spark 是专为大规模数据处理而设计的快速通用的计算引擎. Spark是UC Berkeley AMP lab ( ...

  8. 【原创】大数据基础之Kudu(5)kudu增加或删除目录/数据盘

    kudu加减数据盘不能直接修改配置fs_data_dirs后重启,否则会报错: Check failed: _s.ok() Bad status: Already present: FS layout ...

  9. 大数据基础知识问答----spark篇,大数据生态圈

    Spark相关知识点 1.Spark基础知识 1.Spark是什么? UCBerkeley AMPlab所开源的类HadoopMapReduce的通用的并行计算框架 dfsSpark基于mapredu ...

随机推荐

  1. 如何快速查找到HTML头尾对应标签?

    在使用Atom编辑器整理HTML代码的时候,希望快速找到HTML头尾对应的标签.  ctrl+m 试试看 

  2. leetcode1283 使结果不超过阈值的最小除数

    这道题第一思路是用二分查找 因为使用二分法:所以复杂度为O(n*logk), k介于 left=sum/threshold(向下取整) 和 right=num_max之间:而right<=10^ ...

  3. 【Makefile】Makefile中的常用函数简介

    1. subst函数 格式:$(subst <from>, <to>, <text>)功能:把字串<text>中的<from>字符串替换成& ...

  4. 重画GoogleClusterTrace数据

    由于项目计划书写作需要,重画了Qi Zhang, Mohamed Faten Zhani, Raouf Boutaba, Joseph L. Hellerstein, Dynamic Heteroge ...

  5. flutter Android打包

    以下内容均是在mac版本电脑上的操作 1.生成签名 //根目录执行以下命令 keytool -genkey -v -keystore ~/sign.jks -keyalg RSA -keysize 2 ...

  6. docker版的zabbix部署

    环境准备:一台server端,两台agent端 server端部署zabbix-server和mariadb服务 agent端部署zabbix-agent服务 一.docker容器里下载zabbix和 ...

  7. Attention机制在深度学习推荐算法中的应用(转载)

    AFM:Attentional Factorization Machines: Learning the Weight of Feature Interactions via Attention Ne ...

  8. docker命令小结

    文档:docker命令小结.note链接:http://note.youdao.com/noteshare?id=54015b76db9ae764182cb921e348b7fc&sub=DD ...

  9. Servlet(2):Requset/Response Encoding and Filter

    Requset/Response Encoding 表单提交分GET和POST,接下来分开讨论. (1)GET/URL提交的数据 在 Tomcat中,默认情况下使用"URIEncoding& ...

  10. C# 3Des加密解密

      第三方的加密规则约定:加密经过3DES加密后的Base64 编码 最近在对接一个第三方接口,请求参数和响应参数全采用3des加密规则,由于我是用.NET对接的,而第三方是Java开发的,所以两种程 ...