QueryDatabaseTable 在 2 节点 集群上两次从 Mysql 表中获取行。当执行设置被配置到所有节点时,抓取过程本身不会被分发。每个节点获取相似的数据,这不是我需要的理想输出。 换成主节点也能正常工作,但是一个节点承担了整个获取数据的过程,这就违背了分布式计算的意义。有解决方法吗?
最佳答案
QueryDatabaseTable 设计为仅在主节点上运行一个任务,它只执行一次提取,不是分布式解决方案。对于集群中的并行/分布式抓取,您需要以下内容:
GenerateTableFetch -> RemoteProcessGroup -> 输入端口 -> ExecuteSQL
GenerateTableFetch应设置为仅在主节点上执行一项任务。它通过生成 SQL 语句来获取指定大小的批量行来完成 QueryDatabaseTable 所做的“前半部分”。但它不执行提取。
相反,您将 SQL 语句发送到 RemoteProcessGroup (RPG) 指向 Input Port在同一个集群上。这将在 NiFi 集群的节点之间分发 SQL 语句。
ExecuteSQL每个节点上的处理器将获取要执行的 SQL 语句的子集,从而在集群中并行执行提取。请注意,此流程的其余部分将并行执行,您稍后将无法合并结果,但听起来这并不是您想要的。
关于hadoop - QueryDatabaseTable Nifi 处理器从 mysql 数据库中获取重复行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48294976/