zoukankan      html  css  js  c++  java
  • 用Nifi 从web api 取数据到HDFS

    1. 全景图

    NewImage
     

    2. 用ExecuteScript生成动态日期参数

     
    为了只生成一个flowfile:
    NewImage
     
     
     
    Groovy 代码:

    import org.apache.commons.io.IOUtils
    import java.nio.charset.*
    import java.text.SimpleDateFormat;
    import java.lang.StringBuilder;
    import java.util.Calendar;

    def flowFile = session.create()

    def days = 10000

    flowFile = session.write(flowFile, {inputStream, outputStream ->
    SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMdd");
    Calendar cal = Calendar.getInstance();
    StringBuilder sb = new StringBuilder();

    cal.add(Calendar.DATE,1)

    for(int i = 0; i < days; i++) {
      cal.add(Calendar.DATE, -1);
      sb.append(sdf.format(cal.getTime()) + " " );
     }

    //println(sb);

    outputStream.write(sb.toString().getBytes(StandardCharsets.UTF_8))
    } as StreamCallback)

    //flowFile = session.putAttribute(flowFile, 'filename', 'get_date')
    session.transfer(flowFile, REL_SUCCESS)

     

    3. 用SplitText生成每行一个的日期

    Line Split Count    1

     

    4. 用ExtractText 取到日期参数

    NewImage

     

    5. 用UpdateAttribute生成url及filename

    NewImage

    这里一定要设置filename,不然,所有的文件名都一样,最后只能成功插入一个记录到HDFS。

     

    6.  用InvokeHttp获取数据

    NewImage

    NewImage

     

    7. 添加一个 RouteOnContent来过滤空数据

    NewImage

     

    8. 用PutHDFS把数据插入到HDFS

    NewImage

    注意这里的Directory 要加上/, 不然就插入到user/root/nifi下了,而不是files下在的nifi了。

     

    9. 每天更新数据

    NewImage

    每天20点更新数据

    代码小改下:

    def count = 1



     

     

    NIFI 中国社区 QQ群:595034369


  • 相关阅读:
    第一天上班见面用英语打招呼
    wx.NET CLI wrapper for wxWidgets
    WSEventing、WSTransfer Web服务标准
    .net 应用迁移到Mono 工具 (Moma)
    PhalangerPHP的.NET编译器
    WPF/XML 资源及相关开源项目
    IronPython引出微软“秘密计划”
    微软软件 Office Accounting
    .NET 2.0 中使用Active Directory 应用程序模式 (ADAM)
    WSS and MOSS
  • 原文地址:https://www.cnblogs.com/fengwenit/p/5589397.html
Copyright © 2011-2022 走看看