QueryDatabaseTable在2节点集群上两次从Mysql表中获取行。当将执行设置配置到所有节点时,获取进程本身并不是分布式的。每个节点都获取类似的数据,这不是我所需要的理想输出。无论如何将其转换为主节点,都可以很好地工作,但是单个节点要承担整个数据获取过程的负担,这就违背了分布式计算的要求。有解决办法吗?
发布于 2018-01-17 13:32:57
QueryDatabaseTable被设计为只在主节点上运行,只有一个任务,它只进行一次获取,而不是分布式解决方案。对于集群中的并行/分布式抓取,您需要以下内容:
GenerateTableFetch -> RemoteProcessGroup ->输入端口-> ExecuteSQL
应该将GenerateTableFetch设置为只对一个任务在主节点上执行。它执行QueryDatabaseTable所做的“前半部分”操作,方法是生成SQL语句以获取指定大小的行的批次。但它不会去取东西。
相反,您可以将SQL语句发送到指向同一集群上的RemoteProcessGroup (RPG)的输入端口。这将在NiFi集群中的节点之间分发SQL语句。
每个节点上的ExecuteSQL处理器将获得要执行的SQL语句的子集,从而在集群中并行执行fetch。注意,这个流的其余部分将并行执行,稍后您将无法加入结果,但听起来似乎并不是您想要的结果。
发布于 2018-01-17 07:20:14
rdbms (mysql)不属于分布式计算。
因此,最好只在主节点上摄取这些源的数据。
但是,在摄入之后,您可以拆分数据并将其分布到整个nifi集群中。
参见本文https://community.hortonworks.com/articles/16120/how-do-i-distribute-data-across-a-nifi-cluster.html
https://stackoverflow.com/questions/48294976
复制相似问题