WaterDrop的使用

支持多种数据源与输出

数据输入形式有两种:一种是批,一种是流(分别对应sparksql中的一次性读取,与structruedstreaming的流式处理)

批处理有:ElasticSearch  File  Hdfs  Hive  Hbase  JDBC  Kudu  MongDB  Mysql 等(Hbase为商业版,普通版需要实现可以使用Hive映射HBase表的方式)

流式处理有:FileStream  HdfsStream KafakStream  SocketStream  RedisStream  S3Stream

支持多种数据输出

Clickhouse  ES File Hbase(商业版支持)  Hdfs  Http(商业版支持)  Jdbc Kafka  Kudu  MongoDB  Mysql Opentsdb  S3 StdOut  

waterdrop配置文件分四部分:

spark { spark运行参数配置好了大部分时间不需要变更}

input {配置输入源}

filter {配置数据处理过程}

output {配置数据输出}

很可能只是数据同步,没有数据处理的话 filter也必须要有,可以保留为空 filter{ }

spark参数部分:

spark {

      #批处理没有这个参数流式应用才有,单位为秒

      spark.streaming.batchDuration = 5 

      #应用名称

       spark.app.name = "Waterdrop"

       #excetor的数量

       spark.executor.instances = 2

       #每个excuter的核数

        spark.executor.cores = 1

        #executer的内存

        spark.executor.memory = "1g"

}

了解spark的话,spark运行参数在里面添加或更改,如果不了解spark的话,就采用上面的默认配置就好

Input部分

公共参数result_table_name=tableName 指输入后的数据源注册成表,表名叫tableName,fileter中可以根据这个表名做处理

input支持多个数据源,只展示几个常用的数据源

hdfs:

input{

    hdfs{

      #必须要有指定hdfs路径

     path = "hdfs://hadoop01:8020/user/hive/warehouse/myhive.db/clickhousetest"

     #指定读取的文件的格式 csvjsonparquet 、xmlorc和 text.

      format="text"

     #执行读取数据后注册成表的表名

     result_table_name = "test_source"

     #如果format为xml必须有下面配置

     optionss.rowTag=xxx

     }

}

ES

input{

elasticsearch {

    hosts = ["localhost:9200"]

    #支持匹配模式 index* 所有以index开头的索引

     index = "index"

     result_table_name = "source_table"

     #指定读取字段,不写就是全读其他es参数以es.开头进行设置

     es.read.field.include = "id, name"

     es.input.max.docs.per.partition = 10 #指定spark分区数量,不设置为shard数量

    }

}

Mysql/JDBC

input{

mysql {

     url = "jdbc:mysql://localhost:3306/database"

     #读取的表,还可以用sql 如 table = "(select * from CDS where CD_ID>16) AS a"

     table = "waterdrop"

     user = "root"

     password = "root"

     result_table_name = "sourcetable"

    #一下jdbc参数为saprk jdbc参数,开头要用jdbc.除非特殊要求,不然以下列可以用不设置

    #jdbc.partitionColumn = "item_id"

    #jdbc.numPartitions = "10"

    # jdbc.lowerBound = 0

    #jdbc.upperBound = 100

}

}

input{

jdbc{

    #dirver名称,需要把dirver驱动包放到waterdrop安装目录的plugins目录下,如:cp xxx.jar plugins/myplugins/lib

    driver = "com.mysql.jdbc.Driver"

    url = "jdbc:mysql://node03:3306/hive"

     #读取的表,还可以用sql 如 table = "(select * from waterdrop where id>16) AS a"

     table = "waterdrop"

     user = "root"

     password = "root"

     result_table_name = "sourcetable"

    #以下jdbc参数为saprk jdbc参数,开头要用jdbc.除非特殊要求,不然以下列可以用不设置

    # jdbc.partitionColumn = "item_id"

    # jdbc.numPartitions = "10"

    # jdbc.lowerBound = 0

    # jdbc.upperBound = 100

}

}

Kudu

input{

kudu{

    #kudu mater地址

     kudu_master="hadoop01:7051,hadoop02:7051,hadoop03:7051"

     kudu_table="myKuduTable"

    result_table_name="source_table"

}

}

Hive

需要提前做spark与hive的集成(百度)

input {

hive {

pre_sql = "select * from database.table"

result_table_name = "source_table"

}

}

KafkaStream(structuredstreaming)

input{

kafkaStream {

topics = "waterdrop"

consumer.bootstrap.servers = "hadoop:9092"

consumer.group.id = "group"

#kafka与structruedstreaming整合的参数通过consumer.xxxx添加,必须要有consumer.前缀

#consumer.failOnDataLoss = false

#如果kafka中message为json可以使用以下schemal

#schema = "{\"name\":\"string\",\"age\":\"integer\",\"addrs\":{\"country\":\"string\",\"city\":\"string\"}}

}

}

filter部分

filter部分不总结了,如果需要使用WaterDrop做ETL,参考官网吧,函数比较多,本质就是spark算子.

https://interestinglab.github.io/waterdrop-docs/#/zh-cn/v1/configuration/filter-plugin

output部分

hdfs

output{

    hdfs {

         #hdfs地址

        path = "hdfs:///var/logs-${now}"

        #格式化上方地址${now}

        path_time_format = "yyyy.MM.dd"

       /#输出格式csv、json、parquet、orc和text

        format = "json"

       #文件保存模式overwrite(覆盖),append(追加),ignore(存在则忽略)以及error(存在则报错)

        save_mode = "error"

}

}

Jdbc/Mysql

output{

jdbc {

driver = "com.mysql.jdbc.Driver"

url = "jdbc:mysql://hadoop01:3306/waterdrop"

table = "waterdrop"

user = "root"

password = "root"

#文件保存模式overwrite(覆盖),append(追加),ignore(存在则忽略)以及error(存在则报错)

save_mode=append

}

}

output{

mysql {

url = "jdbc:mysql://localhost:3306/info"

table = "access" user = "username"

password = "password"

#文件保存模式overwrite(覆盖),append(追加),ignore(存在则忽略)以及error(存在则报错)

save_mode = "append"

}

}

 

ES

output{

elasticsearch {

hosts = ["localhost:9200"]

index = "waterdrop-${now}"

index_type="log"

#上方now格式化

index_time_format = "yyyy.MM.dd"

#es参数通过es.配置

es.batch.size.entries = 100000

}

}

Kudu

output{

kudu{

kudu_master="hadoop01:7051,hadoop02:7051,hadoop03:7051"

kudu_table="my_kudu_table"

#写入kudu中采取的模式,支持 insert|update|upsert|insertIgnore,insert与insetIgnore区别在于后者主键重复不会报错,upsert与update就不用说了

mode="upsert" }

}

clickhouse

output{

 clickhouse {

      #注意如果没有配置clickhouse,将无法访问,需要在clickhouse-server 的config配置文件中配置<listen_host>::</listen_host>
       host = "hadoop01:8123"

       database = "waterdrop"

       table = "mytable"

       fields = ["id", "name"]

       username = "root"

       password = "root"

      #批次大小

       bulk_size = 20000

       #ClickHouse 配置分布式表的时候,提供配置表隶属的集群名称

       #cluster=

       #异常码重试

       retry_codes = [209, 210]

       #重试次数

       retry = 3

       #其他clickhouse参数

      # clikhouse.****=****
}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值