排出两个元组后的Python螺栓悬挂

时间:2015-08-11 10:26:48

标签: python apache-storm

我有一个python bolt来解析文件中的信息。有问题的螺栓接收文件路径,解析文件,然后从for循环中发出一些元组。

问题是当它运行时只发出两个元组然后它就会挂起。在日志中,我可以看到已经从文件中解析了正确数量的键,并且已经发出了前两个元组,但在此之后没有与该螺栓相关的其他日志。 (仅指标日志)

  

38640 [Thread-19] INFO backtype.storm.task.ShellBolt - ShellLog   pid:14644,name:ParseFileBolt键数= 1373

     

38870 [Thread-21] INFO backtype.storm.daemon.task - Emitting:   ParseFileBolt默认[“177328623”]

     

38870 [Thread-21] INFO backtype.storm.daemon.task - Emitting:   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。 本地和远程群集都会出现此问题。

对这个问题的任何想法都会受到高度赞赏。

0 个答案:

没有答案