apache / seatunnel

SeaTunnel is a next-generation super high-performance, distributed, massive data integration tool.
https://seatunnel.apache.org/
Apache License 2.0
7.82k stars 1.76k forks source link

FAQ #267

Closed garyelephant closed 1 year ago

garyelephant commented 5 years ago

FAQ 1. Waterdrop开发者自己开发插件时,是否需要了解Waterdrop代码,是否需要把代码写到Waterdrop项目里?

开发者开发的插件,与waterdrop项目可以完全没有关系,不需要把你的插件代码写到waterdrop项目里面。 插件可以是一个完全独立的项目,在里面你用java,scala,maven,sbt,gradle,都随你。 这也是我们建议开发者开发插件的方式。


FAQ 2. 以集群模式(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

如有其他需要,请加微信garyelephant 为您服务。


FAQ 3. 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


FAQ 4. 我想学习Waterdrop 源码,从哪里开始呢?

Waterdrop 拥有完全抽象化,结构化的代码实现,已经有很多人选择将Waterdrop的源码作为学习Spark的方式,你可以从主程序入口开始学习源码:Waterdrop.scala


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

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


FAQ 6. Waterdrop 是否支持在Azkaban, Oozie 这些任务调度框架中运行呢?

当然可以,请见下面的截图:


FAQ 7. 使用Waterdrop时遇到问题,我自己解决不了,我应该怎么办?

请进入项目主页,找到项目负责人的微信号,加他微信。


FAQ 8. 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 需要与配置中的变量名相同。


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

多数情况,OOM是由消费没有限速导致的,解决方法如下:

image

详见:https://www.processon.com/view/link/5c9862ece4b0c996d36fe7d7


RickyHuo commented 5 years ago

FAQ 10. Exception in thread "main" java.lang.NoSuchFieldError: INSTANCE

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

FAQ 11. 我的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"
 ...
}

FAQ 11. 如何为Waterdrop on Yarn指定不同的JDK版本?

比如,你希望将JDK版本定为JDK8

分两种情况:

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

spark {
 ...
 spark.executorEnv.JAVA_HOME="/your/java_8_home/directory"
 spark.yarn.appMasterEnv.JAVA_HOME="/your/java_8_home/directory"
 ...
}

FAQ 12 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 { ... }
}

类似这样的配置,可以实现多源数据处理。


RickyHuo commented 4 years ago

FAQ 13. 在output里面没看到有Hive,请问怎么写Hive?

参考 #431

garyelephant commented 4 years ago

FAQ 14. 多行文本如何实现

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

var = """
 whatever you want
"""

FAQ 15. 多行文本如何实现变量替换

但是当你想在多行文本中做变量替换时,就会麻烦一点,因为变量不能包括在三个双引号之内。

var = """
your string 1
"""${you_var}""" your string 2"""

参考:https://github.com/lightbend/config/issues/456

RickyHuo commented 4 years ago

FAQ 16. 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"
        }
    }
}
  1. 使用 cluster 模式
    {
    output {
        clickhouse {
            # 仅配置一个
            host = "ck1:8123"
            cluster = "clickhouse_cluster_name"
            # 本地表
            table = "table_name"
        }
    }
    }
garyelephant commented 4 years ago

FAQ 17. 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

RickyHuo commented 4 years ago

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

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

cd seatunnel
mkdir -p plugins/my_plugins/lib
cp third-part.jar plugins/my_plugins/lib

my_plugins 可以为任意字符串

garyelephant commented 4 years ago

FAQ 19. Waterdrop-v1(Spark) 有3种设置Logging相关参数的方法(如Log Level)

spark {
    spark.driver.extraJavaOptions = "-Dlog4j.configuration=file:<file path>/log4j.properties"
    spark.executor.extraJavaOptions = "-Dlog4j.configuration=file:<file path>/log4j.properties"
}
input {
  ...
}
filter {
 ...
}
output {
  ...
}

参考的配置文件内容如下:

$ cat log4j.properties
log4j.rootLogger=ERROR, console

# set the log level for these components
log4j.logger.org=ERROR
log4j.logger.org.apache.spark=ERROR
log4j.logger.org.spark-project=ERROR
log4j.logger.org.apache.hadoop=ERROR
log4j.logger.io.netty=ERROR
log4j.logger.org.apache.zookeeper=ERROR

# add a ConsoleAppender to the logger stdout to write to the console
log4j.appender.console=org.apache.log4j.ConsoleAppender
log4j.appender.console.layout=org.apache.log4j.PatternLayout
# use a simple message format
log4j.appender.console.layout.ConversionPattern=%d{yyyy-MM-dd HH:mm:ss} %-5p %c{1}:%L - %m%n

疑问:Waterdrop-v2(Spark, Flink) 如何设置logging相关配置?

目前暂时还不能直接设置,需要用户修改waterdrop启动脚本,在spark-submit或者flink的提交任务命令中指定相关参数,具体是哪些参数,可直接参照


Reference:

https://stackoverflow.com/questions/27781187/how-to-stop-info-messages-displaying-on-spark-console

http://spark.apache.org/docs/latest/configuration.html#configuring-logging

https://medium.com/@iacomini.riccardo/spark-logging-configuration-in-yarn-faf5ba5fdb01

https://stackoverflow.com/questions/27781187/how-to-stop-info-messages-displaying-on-spark-console

garyelephant commented 4 years ago

FAQ 20 如何用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
    }
}
RickyHuo commented 3 years ago

FAQ 21 写入ClickHouse 报错: ClassCastException

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

  1. Filter Convert插件
  2. Filter Sql插件

详细的数据类型转换参考:https://interestinglab.github.io/waterdrop-docs/#/zh-cn/v1/configuration/output-plugins/Clickhouse?id=clickhouse%e7%b1%bb%e5%9e%8b%e5%af%b9%e7%85%a7%e8%a1%a8

参考Issue: #488 #382

garyelephant commented 3 years ago

FAQ 22 Waterdrop 如何访问kerberos鉴权的HDFS、YARN、Hive等资源?

请参考:https://github.com/InterestingLab/waterdrop/issues/590

garyelephant commented 3 years ago

FAQ 23 如何排查NoClassDefFoundError、ClassNotFoundException 等问题?

出现这种情况,大概率是Java Classpath中有多个不同版本的对应Jar包class load时因为顺序问题冲突了,而不是真的缺少这个Jar,请修改这个waterdrop启动命令,在spark-submit提交的地方加入以下参数,通过输出的日志来详细debug。

spark-submit --verbose
    ...
   --conf 'spark.driver.extraJavaOptions=-verbose:class'
   --conf 'spark.executor.extraJavaOptions=-verbose:class'
    ...
garyelephant commented 3 years ago

FAQ 24 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

点击apply,设置完毕就可以畅快使用sbt了。

参考:https://monkeywie.cn/2020/04/14/setup-scala-on-idea/

garyelephant commented 3 years ago

FAQ 25 有没有HBase插件?

有hbase input 插件,从这里下载:https://github.com/garyelephant/waterdrop-input-hbase

garyelephant commented 3 years ago

FAQ 26 如何使用Waterdrop完成跨HDFS集群数据同步?

只要把hdfs-site.xml配置好即可,参见这篇文章:https://www.cnblogs.com/suanec/p/7828139.html

另外附送一篇如何修改spark代码完成配置的代码(waterdrop不需要这么做):https://www.jianshu.com/p/3e84c4c97610

IsisPolei commented 3 years ago

如何使用waterdrop将clickhouse数据同步到hdfs?

2000liux commented 2 years ago

Good

davidzollo commented 2 years ago

this issue is very import, is there anybody who can describe it in English?

maijh commented 2 years ago

想问下如何同步到doris?我用1.5.4、1.5.7都发现Caused by: java.lang.ClassNotFoundException: Doris,我看开发才有doris connect请问使用?

yx91490 commented 2 years ago

可以自己mvn package编译一下,安装包在seatunnel-dist/target下面

maijh commented 2 years ago

可以自己mvn package编译一下,安装包在seatunnel-dist/target下面

请问是在seatunnel-dist层编译还是最外一层编译?

maijh commented 2 years ago

可以自己mvn package编译一下,安装包在seatunnel-dist/target下面

请问是在seatunnel-dist层编译还是最外一层编译?

@yx91490

RickyHuo commented 2 years ago

@maijh doris connector developed at dev branch but the release of 1.5.x based on master branch.

BTW, the project compile at the outermost layer.

yx91490 commented 2 years ago

可以自己mvn package编译一下,安装包在seatunnel-dist/target下面

请问是在seatunnel-dist层编译还是最外一层编译?

是的,在根路径。

ruanjianershu commented 2 years ago

我使用的是 waterdrop-dist-2.0.4-2.11.8 使用的基于flink的方式去做的同步数据,同步类型是 kafka-> Ck

可是当我启动之后,项目的jdbc连接报错 image

请问这个问题需要怎么解决 ?

2022-02-10 16:00 更新 和霍总联系,定位是驱动连接的问题,解决方案待定