将 SQL 连接到 apache nifi

Posted

技术标签:

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

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

提前致谢 山姆

【问题讨论】:

【参考方案1】:

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

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

    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"]
    上图使用apache/nifi作为基础镜像。如果您愿意,可以使用任何具有基础的 nifi docker 映像。 您可以为lib/jdbc 指定任何位置,只需记住您需要将此作为文件位置的引用,以便将其引用为file:///lib/jdbc/mssql-jdbc-6.2.2.jre8.jar 最后,切换回 nifi 用户并使用标准的 nifi 图像细节结束。这将使图像能够正确运行。

【讨论】:

感谢您提供此答案。我在 Docker 中使用 NiFi 1.13。我已按照您的示例进行操作,但我的 DBCPConnectionPool 卡在Enabling 上。带有错误消息Can't load Database Driver。我可以尝试其他任何想法吗? 没有看到 docker 文件,我唯一的猜测是您可能在 wget 中指定了不兼容的驱动程序,或者您需要在 NiFi 本身中指定的 jar 的位置是找不到

以上是关于将 SQL 连接到 apache nifi的主要内容,如果未能解决你的问题,请参考以下文章

Apache 不会使用 PHP 连接到 SQL Server

无法使用 Jupyter 笔记本上的 pyspark 从 Apache Spark 连接到 MS SQL

无法使用 pymssql 烧瓶连接到 ms sql 服务器

在 vagrant 中将 Node.js 连接到 apache 服务器上的 postgres

将 Apache ServiceMix 连接到 Websphere MQ

将 Apache Cassandra 连接到 DataGrip