【问题标题】:connect SQL to apache nifi将 SQL 连接到 apache nifi
【发布时间】:2017-05-20 06:41:09
【问题描述】:

我是 nifi 的新手,我想将 SQL Server 数据库连接到 nifi 并使用处理器创建数据流。我该怎么做,谁能帮我解决这个问题。

提前致谢 山姆

【问题讨论】:

    标签: sql-server apache-nifi


    【解决方案1】:

    这里有两篇关于使用 NiFi 将信息输入和输出数据库的精彩文章:

    1. http://www.batchiq.com/database-injest-with-nifi.html

    2. http://www.batchiq.com/database-extract-with-nifi.html

    它们描述/说明了如何配置 DBCPConnectionPool 服务以提供与 RDBMS 的连接,以及提取数据和摄取数据的示例流程。

    【讨论】:

    • 我需要在我的机器上安装 SQL server-2012,我需要安装一个。可以分享给我正确的 SQL server 链接,以便与 nifi 连接。
    • 到 DBCPConnectionPool 的链接已过期。目前看起来 v1.7.0 在这里:nifi.apache.org/docs/nifi-docs/components/org.apache.nifi/… 遗憾的是,文档使用 iframe,因此获取页面的直接链接会丢失菜单。最好去nifi.apache.org/docs.html 并在菜单中找到 DBCPConnectionPool。当您搜索“数据库”或“JDBC”或“RDBMS”或其他内容时,组件的愚蠢名称。
    【解决方案2】:

    扩展至mattyb answer

    如果您使用的是最新的 Hortonworks 沙箱,或其他使用 docker 容器的设置,请阅读下文。

    您必须在 docker 中安装 JDBC jar 文件。 SQL Server 需要 6.2 以上。

    docker ps
    docker exec -it <mycontainer uuid> bash
    

    How do I get into a Docker container's shell? 将帮助您登录容器。

    cd file:///usr/lib/jvm/jre/lib/
    mkdir jdbc
    cd ./jdbc
    wget https://download.microsoft.com/download/3/F/7/3F74A9B9-C5F0-43EA-A721-07DA590FD186/sqljdbc_6.2.2.0_enu.tar.gz
    tar xvzf sqljdbc_6.2.2.0_enu.tar.gz
    cp ./sqljdbc_6.2/enu/mssql-jdbc-6.2.2.jre8.jar ./
    

    jdbc:sqlserver://192.168.1.201:1433;databaseName=[your database]
    com.microsoft.sqlserver.jdbc.SQLServerDriver
    

    您可能需要将 IP 地址替换为在 Windows 中的 ipconfig 或 Mac/Linux 中的 ifconfig 下找到的主机的 IPv4 地址。

    您可以将file:///usr/lib/jvm/jre/lib/ 更改为您想要的任何路径。

    【讨论】:

    • 这太棒了!太感谢了!我正要把头撞到多堵墙上,因为我在 docker 中运行,不知道如何从容器中完成。我认为可能值得为此添加一些代码,以允许将 jdbc 驱动程序作为 docker 映像的一部分下载,这样您就可以拥有 jdbc 而不必执行它
    • 如果您评论或链接到一个工作示例,我很乐意添加它
    • 我实际上正在处理一个 dockerfile,以便我们可以将它用于我们的解决方案。一旦它工作,我会在这里发布:)
    • 仅供参考 - sqljdbc 版本 8.4.1 向我抛出“过时”错误,并且仅在使用此处提到的 6.2 版本时才成功。
    【解决方案3】:

    扩展至TamusJRoyce's answer

    如果您通过像 apache/nifi 这样的 docker 镜像或前面提到的 Hortonworks 沙箱运行 nifi,以下内容应该可以帮助您在镜像上获取所需的驱动程序,这样您就不需要 exec 进入容器来执行手动。

    查看 docker 文件下面的 cmets

    FROM apache/nifi
    
    USER root
    RUN mkdir /lib/jdbc
    WORKDIR /lib/jdbc
    RUN wget https://download.microsoft.com/download/3/F/7/3F74A9B9-C5F0-43EA-A721-07DA590FD186/sqljdbc_6.2.2.0_enu.tar.gz
    RUN tar xvzf sqljdbc_6.2.2.0_enu.tar.gz
    RUN cp ./sqljdbc_6.2/enu/mssql-jdbc-6.2.2.jre8.jar ./
    
    USER nifi
    
    EXPOSE 8080 8443 10000 8000
    
    WORKDIR ${NIFI_HOME}
    ENTRYPOINT ["../scripts/start.sh"]
    
    1. 上图使用apache/nifi作为基础镜像。如果您愿意,可以使用任何具有基础的 nifi docker 映像。
    2. 您可以为lib/jdbc 指定任何位置,只需记住您需要将此作为文件位置的引用,以便将其引用为file:///lib/jdbc/mssql-jdbc-6.2.2.jre8.jar
    3. 最后,切换回 nifi 用户并使用标准的 nifi 图像细节结束。这将使图像能够正确运行。

    【讨论】:

    • 感谢您提供此答案。我在 Docker 中使用 NiFi 1.13。我已按照您的示例进行操作,但我的 DBCPConnectionPool 卡在Enabling 上。带有错误消息Can't load Database Driver。我可以尝试其他任何想法吗?
    • 没有看到 docker 文件,我唯一的猜测是您可能在 wget 中指定了不兼容的驱动程序,或者您需要在 NiFi 本身中指定的 jar 的位置是找不到
    猜你喜欢
    • 1970-01-01
    • 2022-12-16
    • 1970-01-01
    • 2017-10-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-10-31
    • 1970-01-01
    相关资源
    最近更新 更多