spark2.4.3+kudu1.9

1 批量读

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

2 批量写

  1. import org.apache.kudu.spark.kudu.{KuduContext, KuduWriteOptions}
  2.  
  3. val kuduMaster = "master:7051"
  4. val table = "impala::test_db.test_table"
  5.  
  6. val kuduContext = new KuduContext(kuduMaster, sc)
  7.  
  8. kuduContext.upsertRows(df, table, new KuduWriteOptions(false, true))

3 单个读/条件读

  1. cd $SPARK_HOME
  2. bin/spark-shell --packages org.apache.kudu:kudu-spark2_2.11:1.9.0
  3.  
  4. import org.apache.kudu.client.{KuduPredicate, RowResult}
  5. import org.apache.kudu.spark.kudu.KuduContext
  6.  
  7. val kuduMaster = "master:7051"
  8. val table = "impala::test_db.test_table"
  9.  
  10. val kuduContext = new KuduContext(kuduMaster, sc)
  11. val table = kuduContext.syncClient.openTable(table)
  12. val predicate = KuduPredicate.newComparisonPredicate(table.getSchema().getColumn("id"),KuduPredicate.ComparisonOp.EQUAL, "testid")
  13. val scanner = kuduContext.syncClient.newScannerBuilder(table).addPredicate(predicate).build()
  14.  
  15. scanner.hasMoreRows
  16. val rows = scanner.nextRows
  17. rows.hasNext
  18. val row = rows.next
  19.  
  20. println(row.getString(0))

4 单个写

  1. cd $SPARK_HOME
  2. bin/spark-shell --packages org.apache.kudu:kudu-spark2_2.11:1.9.0
  3.  
  4. import org.apache.kudu.client.{KuduPredicate, RowResult}
  5. import org.apache.kudu.spark.kudu.KuduContext
  6. import org.apache.kudu.client.SessionConfiguration
  7.  
  8. val kuduMaster = "172.26.192.219:7051"
  9.  
  10. val kuduContext = new KuduContext(kuduMaster, sc)
  11. val kuduClient = kuduContext.syncClient
  12. val kuduTable = kuduClient.openTable("impala::dataone_xishaoye.tbl_order_union")
  13. val kuduSession = kuduClient.newSession()
  14.  
  15. //AUTO_FLUSH_BACKGROUND AUTO_FLUSH_SYNC MANUAL_FLUSH
  16. kuduSession.setFlushMode(SessionConfiguration.FlushMode.AUTO_FLUSH_SYNC)
  17. kuduSession.setMutationBufferSpace(1000)
  18.  
  19. val insert = kuduTable.newInsert()
  20. val row = insert.getRow()
  21. row.addString(0, "hello")
  22. kuduSession.apply(insert)
  23. //kuduSession.flush

其他:newInsert/newUpdate/newDelete/newUpsert

5 错误定位

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

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

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

org.apache.kudu.client.KuduSession

  1. public OperationResponse apply(Operation operation) throws KuduException {
  2. while(true) {
  3. try {
  4. Deferred<OperationResponse> d = this.session.apply(operation);
  5. if(this.getFlushMode() == FlushMode.AUTO_FLUSH_SYNC) {
  6. return (OperationResponse)d.join();
  7. }
  8.  
  9. return null;
  10. } catch (PleaseThrottleException var5) {
  11. PleaseThrottleException ex = var5;
  12.  
  13. try {
  14. ex.getDeferred().join();
  15. } catch (Exception var4) {
  16. LOG.error("Previous batch had this exception", var4);
  17. }
  18. } catch (Exception var6) {
  19. throw KuduException.transformException(var6);
  20. }
  21. }
  22. }

参考:

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. Nginx-HTTP之框架的初始化

    http 框架的初始化与 nginx-rtmp 框架的初始化类似: Nginx-rtmp之配置项的管理 1. ngx_http_module_t ngx_http_module 核心模块定义了新的模块 ...

  2. MySql、PostgreSql、SqlServer三种数据库的造数存储过程实例

    主要实例:把临时表tmp_table数据插入到目标表target_table 一.MySql造数存储过程实例 mysql造数 -- 第一步,创建临时表 CREATE TEMPORARY TABLE I ...

  3. [MyBatis] 如何让MyBatis支持代码级事务处理

    MyBatis提供的sqlSession对象是可以用来帮助我们实现事务处理的,方式和JDBC的类似,具体请见代码: import java.sql.Connection; import java.sq ...

  4. [Ubuntu]18安装navicat 破解版&官方版本

    破解版本: 一.下载破解版的navicat  链接:https://pan.baidu.com/s/1ulptSderoG0EbEQpO3Adww提取码:8oc3 二.解压到桌面 在下载压缩文件之后, ...

  5. 深度学习之Faster-R-CNN

    哎!还是看大神博客吧 https://blog.csdn.net/liuxiaoheng1992/article/details/81843363

  6. curl获取远程页面

    // 创建一个新cURL资源$ch = curl_init(); // 设置URL和相应的选项$options = array(CURLOPT_URL => 'http://www.w3csch ...

  7. 利用phpStudy 探针 提权网站服务器

    声明: 本教程仅仅是演示管理员安全意识不强,存在弱口令情况.网站被非法入侵的演示,请勿用于恶意用途! 今天看到论坛有人发布了一个通过这phpStudy 探针 关键字搜索检索提权网址服务器,这个挺简单的 ...

  8. 小D课堂-SpringBoot 2.x微信支付在线教育网站项目实战_5-10.Springboot2.x用户登录拦截器开发实战

    笔记 10.Springboot2.x用户登录拦截器开发实战     简介:实战开发用户登录拦截器拦截器 LoginInterceptor                  1.实现接口 LoginI ...

  9. Elasticsearch.Net API 图片汇总

  10. playbook部署coredns

    playbook部署coredns 说明test1是主控节点,目的是给test4 node节点安装coredns, 1.coredns-1.2.2.tar.gz安装包放到主控节点/server/sof ...