spark集成kudu遇到的坑

1.使用spark创建表不设置逻辑库的时候是默认存储在default库里的;
2.刚刚使用spark创建的表是没法被impala发现的,需要使用impala同步kudu的元数据 在impala中使用INVALIDATE METADATA命令;
3.impala中只是kudu表的映射,删除表需要去kudu里删除表,再接在linux系统里敲命令 kudu table delete 10.152.160.135:7051 testcontext 因为kudu中没有库的概念 我们看到的kudu的库.表名是逻辑库 所以直接写表名就可以了
4.CREATE TABLE my_first_table
( id BIGINT,
name STRING,
PRIMARY KEY(id) )
PARTITION BY HASH PARTITIONS 16
STORED AS KUDU;
5. CREATE TABLE new_table
PRIMARY KEY (ts, name)
PARTITION BY HASH(name) PARTITIONS 8
STORED AS KUDU
AS SELECT ts, name, value FROM old_table;
6.impala+kudu支持insert select插入数据
7.spark2.4.3+kudu1.9
引入依赖

<dependency>
            <groupId>org.apache.kudu</groupId>
            <artifactId>kudu-spark2_2.11</artifactId>
            <version>${kudu.version}</version>
        </dependency>
        <dependency>
            <groupId>org.apache.kudu</groupId>
            <artifactId>kudu-spark2-tools_2.11</artifactId>
            <version>1.9.0</version>
        </dependency>

        <dependency>
            <groupId>org.apache.kudu</groupId>
            <artifactId>kudu-client</artifactId>
            <version>1.9.0</version>
        </dependency>

需要注意的是 KuduWriteOptions 是spark-kudu-1.9.0中的类,如果再cdh环境中运行,而cdh中的kudu版本过低比如说1.5.0的时候,是会报ClassNotFound的,找不到KuduWriteOptions 类.此时使用upsert和insert因为1.9.0版本中这两个方法必须用到KuduWriteOptions 类,所以在1.5.0环境中无法运行,只能使用

df.write.format("org.apache.kudu.spark.kudu")
      .mode("append")
      .option("kudu.master", kuduMasters)
      .option("kudu.table", tableName)
      .save()

才可以兼容1.9.0和1.5.0的kudu版本,程序才可以正常运行.
因为引入的jar包依赖是kudu1.9.0的版本,此版本中的insertRows和upsertRows都会隐式或者显式的使用KuduWriteOptions类
而KuduWriteOptions类和集群环境中的kudu1.5.0版本不兼容,不存在这个类
在集群spark-shell中运行语句kuduContext.insertRows(df,tableName)之所以可以运行是环境中直接引用了kudu1.5.0中的类库,
kudu的这个版本中的insertRows方法不会自动调用KuduWriteOptions类,也就是代码api版本和kudu版本一致,所以不会报错

	kuduContext.upsertRows(res, tableName, new KuduWriteOptions(false, true))
    kuduContext.insertRows(df,tableName)

8.spark2.4.3+kudu1.9版本代码在cdh5-13中运行kudu版本为1.5.0,当hadoop-yarn将spark写入数据至kudu任务分发至kudu的master所在的机器运行时,会报错hadoop.tracing.TraceUtils.wrapHadoopConf,但是当hadoop-yarn将spark写入数据至kudu任务分发至其他kudu所在slave节点时,不会报错,可以正常运行.原因未知.

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值