python在发出两个元组后挂起

mbzjlibv  于 2021-06-21  发布在  Storm
关注(0)|答案(0)|浏览(171)

我有一个python螺栓,它解析文件中的信息。有问题的bolt接收文件路径,解析文件,然后从for循环中发出许多元组。
问题是,当它运行时,只发出两个元组,然后挂起。在日志中,我可以看到已经从文件中解析了正确数量的键,并且发出了前两个元组,但是在这之后,就没有其他与bolt相关的日志了(仅度量日志)
38640[thread-19]信息backtype.storm.task.shellbolt-shelllogpid:14644, name:parsefilebolt number 钥匙数量=1373
38870[thread-21]info backtype.storm.daemon.task-发射:parsefilebolt默认值[“177328623”]
38870[thread-21]info backtype.storm.daemon.task-发射:parsefilebolt默认值[“177328532”]
下面是产生问题的代码的简化版本。如代码中所述,如果我手动输入一些键,而不是从文件中解析它们,它们都会成功发出。

import gzip
import storm

class ParseFileBolt(storm.BasicBolt):
    def process(self, tup):
        file_path = tup.values[0]

        # If I parse keys from a file only two get emitted
        keys = get_keys(file_path)
        # e.g keys = {'393548331', '177329025', '123456789'}

        # If I manually enter the keys they all get emitted
        #keys = [1,2,3,4,5,6,7,8,9,10,11,12,13,14,15]

        storm.logInfo("Number of keys = {0}".format(len(keys)))
        for key in keys:
            storm.emit([key])

def get_keys(file_name):
    with gzip.open(file_name, 'rt') as file:
        key_set = set()
        for line in file:
            if line.startswith("#"):
                continue
            else:
                columns = line.split("|")
                key = columns[0].strip(' \t\n\r')
                key_set.add(key)
    return key_set

ParseFileBolt().run()

正在分析的文件是一个.gz文件,其中包含一个以#开头的头行,后跟以“|”分隔的数据行。


# Header Row

177328623|columns1|column2|column3
177328532|columns1|column2|column3
123456789|columns1|column2|column3
...

我在windows上使用apache-storm-0.9.4。本地和远程群集上都会出现此问题。
如果您对这个问题有任何想法,我们将不胜感激。

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题