Waterdrop FAQ/常见问题

前言

由于github老是打不开,转载部分waterdrop常见问题。
原文地址:https://github.com/InterestingLab/waterdrop/issues/267
waterdrop使用文档地址:https://interestinglab.github.io/waterdrop-docs/#/zh-cn/v1/

问题及解决办法

  1. 以集群模式(cluster)运行waterdrop,提示找不到:plugins.tar.gz
    使用cluster模式提交前,需要您先执行如下命令:

    备注: 预计下一个版本发布时,v1.2.3 我们会支持插件目录自动打包,无需再执行此命令。
    tar zcvf plugins.tar.gz plugins

    将插件目录打包后,执行(之后如果您的plugins目录没有添加或删除插件,则不需要再次打包了)

    ./bin/start-waterdrop.sh --master yarn --deploy-mode cluster --config ./config/first.conf

  2. Waterdrop启动后报错如下:

    ANTLR Runtime version 4.7 used for parser compilation does not match the current runtime version 4.5.3ANTLR Runtime version 4.7 used for parser compilation does not match the current runtime version 4.5.3

    你的问题是jar包依赖冲突了,可以下载一下最新版本试试,应该没事了:

    https://github.com/InterestingLab/waterdrop/releases/download/v1.2.3/waterdrop-1.2.3.zip

  3. Waterdrop 是否支持动态的变量替换,比如我想在定时任务中替换sql中的where条件?

    没问题,都支持,具体配置例子,请见 用${varname} 做变量替换的配置示例。

  4. Waterdrop 中如何在配置中指定变量,之后在运行时,动态指定变量的值?

    Waterdrop 从v1.2.4开始,支持在配置中指定变量,此功能常用于做定时或非定时的离线处理时,替换时间、日期等变量,用法如下:

    在配置中,配置变量名称,比如:

    ...
    
    filter {
      sql {
        table_name = "user_view"
        sql = "select * from user_view where city ='"${city}"' and dt = '"${date}"'"
      }
    }
    ...
    这里只是以sql filter举例,实际上,配置文件中任意位置的key = value中的value,都可以使用变量替换功能。
    

    详细配置示例,请见variable substitution

    启动命令如下:

    	# local  模式
    ./bin/start-waterdrop.sh -c ./config/your_app.conf -e client -m local[2] -i city=shanghai -i date=20190319
    
    # yarn client 模式
    ./bin/start-waterdrop.sh -c ./config/your_app.conf -e client -m yarn -i city=shanghai -i date=20190319
    
    # yarn cluster 模式
    ./bin/start-waterdrop.sh -c ./config/your_app.conf -e cluster -m yarn -i city=shanghai -i date=20190319
    
    # mesos, spark standalone  启动方式相同。
    

    可以用参数 -i 或者 --variable 后面指定 key=value来指定变量的值,其中key 需要与配置中的变量名相同。

  5. Waterdrop消费Kafka出现OOM怎么解决?

    多数情况,OOM是由消费没有限速导致的,解决方法如下:
    在这里插入图片描述
    详见:https://www.processon.com/view/link/5c9862ece4b0c996d36fe7d7

  6. Exception in thread “main” java.lang.NoSuchFieldError: INSTANCE

    原因是CDH版本Spark自带的 httpclient.jar 版本较低,而ClickHouse JDBC基于的httpclient版本为4.5.2,包版本冲突。解决方法是用 httpclient-4.5.2 版本替换掉 CDH 自带的jar包

  7. 我的Spark集群的默认jdk是java7,我安装了java8之后,如何指定让waterdrop使用java启动:

    在waterdrop的config 文件中,指定如下配置:

    spark {
     ...
     spark.executorEnv.JAVA_HOME="/your/java_8_home/directory"
     spark.yarn.appMasterEnv.JAVA_HOME="/your/java_8_home/directory"
     ...
    }
    
  8. waterdrop配置多个数据源, 比如在input里面同时配置es和hdfs, 有这种多数据源的案例吗?

    多数据源举例如下:

    spark {
    ...
    }
    
    input {
      hdfs { ... }	
      elasticsearch { ... }
      mysql {...}
    }
    
    filter {
    	sql {
    	 sql = """
    	 	select .... from hdfs_table 
    	 	join es_table 
    	 	on hdfs_table.uid = es_table.uid where ..."""
    	}
    }
    
    output {
    	elasticsearch { ... }
    }
    
  9. 多行文本如何实现

    当你有一个配置,文本非常长,希望能够换行时,可以使用三个双引号来表示

    var = """
     whatever you want
    """
    
  10. 多行文本如何实现变量替换

但是当你想在多行文本中做变量替换时,就会麻烦一点,因为变量不能包括在三个双引号之内。 
```bash
var = """
your string 1
"""${you_var}""" your string 2"""

```
  1. Waterdrop 写 ClickHouse 多个实例如何实现负载均衡?
    1)直接写分布式表(不推荐)
    2)通过在ClickHouse多个实例前新增代理或者域名(DNS)

    {
        output {
            clickhouse {
                host = "ck-proxy.xx.xx:8123"
                # 本地表
                table = "table_name"
            }
        }
    }
    

    3)在配置里面配置多个实例

    {
        output {
            clickhouse {
                host = "ck1:8123,ck2:8123,ck3:8123"
                # 本地表
                table = "table_name"
            }
        }
    }
    

    4)使用 cluster 模式

    {
        output {
            clickhouse {
                # 仅配置一个
                host = "ck1:8123"
                cluster = "clickhouse_cluster_name"
                # 本地表
                table = "table_name"
            }
        }
    }
    
  2. Spark local[*] 模式下跑Waterdrop,总是出现OOM,怎么办?

    如果用local模式跑的话,需要修改一下start-waterdrop.sh的脚本,在spark-submit后面,增加一个参数 --driver-memory 4g 这样的。一般情况下,我们生产环境,不用local 模式,所以这个参数在On Yarn时,一般不需要设置。
    详见 : https://spark.apache.org/docs/latest/configuration.html#application-properties

  3. 自己编写的插件或者是第三方的jdbc.jar放在哪里可以被 Waterdrop 加载?

    将 Jar 包,放置在 plugins 目录指定结构下,如下

    cd waterdrop
    mkdir -p plugins/my_plugins/lib
    cp third-part.jar plugins/my_plugins/lib
    
  4. 如何用Waterdrop把数据写入Hive?

    spark {
      spark.sql.catalogImplementation = "hive"
      // 如果需要写入hive时设置hive.exec.dynamic.partition、hive.exec.dynamic.partition.mode这两个参数,可以在这里设置,前面记得加spark.hadoop
      spark.hadoop.hive.exec.dynamic.partition = "true"
      spark.hadoop.hive.exec.dynamic.partition.mode = "nonstrict"
    }
    
    filter {
      sql = "insert into ..."
    }
    
    output {
        // 数据已经通过sql filter写入hive了,这里只是占位,实际上不起作用。
        stdout {
            limit = 1
        }
    }
    
  5. 写入ClickHouse 报错: ClassCastException

    在Waterdrop里面不会主动对数据类型进行转,在Input读取数据之后,生成对应的Schema。而在写入ClickHouse的时候,需要字段类型严格匹配,不匹配的需要进行数据转换,数据转换可以通过以下2种插件实现:

    Filter Convert插件
    Filter Sql插件

  6. Waterdrop v1 的编译打包工具是sbt,下载依赖非常慢怎么办?

    有办法,参照下面的去做,优先使用国内镜像,会快很多,以Mac + IDEA系统的配置方法为例子。

    第一步:在~/.sbt目录下创建repositories文件,内容如下:

    [repositories]
    local
    nexus-aliyun:https://maven.aliyun.com/nexus/content/groups/public
    huaweicloud-maven: https://repo.huaweicloud.com/repository/maven/
    typesafe: https://repo.typesafe.com/typesafe/ivy-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext], bootOnly
    ivy-sbt-plugin:https://dl.bintray.com/sbt/sbt-plugin-releases/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
    sbt-plugin-repo: https://repo.scala-sbt.org/scalasbt/sbt-plugin-releases, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
    sonatype-oss-releases
    maven-central
    sonatype-oss-snapshots
    

    第二步:在 IDEA 设置中搜索sbt,然后修改VM parameters,填入以下内容:

    -Dsbt.override.build.repos=true
    -Dsbt.repository.config=${改成你的用户目录}\.sbt\repositories
    
  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 7
    评论
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值