0

私の python スクリプト: #!/usr/bin/python インポート sys インポート ダンボ インポート cgi、urlparse #ダンボ.lib インポート JoinReducer から #ダンボ.装飾インポート プライマリ、セカンダリ

def mapper(key, value):
    line = value.split('\t')
    line[1] = float(line[1])  # Unix timestamp
    line[3] = int(line[3])    # Port
    line[4] = float(line[4])  # Delay
    url_part = urlparse.urlsplit(line[6])
    if url_part.path not in ('/android-test.htm',
                    '/iphone-test.htm',
                    '/symbian-test.htm',
                    '/meego-test.htm',
                    '/mobile-test.htm',
                    '/showlog.php',
                    '/showlognew.php',):
        qs_dict = cgi.parse_qs(url_part.query)
        line[6] = qs_dict
        line[7] = int(line[7])    # HTTP status code
        yield line
def reducer(key, values):
    yield key, values

if __name__ == "__main__":
    dumbo.run(mapper)

実行コマンド:

dumbo start logparser.py -input analytics.log-20111209 -output analytics-log -python \ python2.6 -hadoop /usr/local/cloudera/hadoop-0.20.2-cdh3u3/

jobtracker ログの hadoop エラー

    2012-03-15 09:53:18,931 INFO org.apache.hadoop.mapred.TaskInProgress: Error from attempt_201203131446_0006_m_000003_2: java.lang.RuntimeException: java.lang.NullPointerException
    at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:376)
    at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:572)
    at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:136)
    at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:57)
    at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
    at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:391)
    at org.apache.hadoop.mapred.MapTask.run(MapTask.java:325)
    at org.apache.hadoop.mapred.Child$4.run(Child.java:270)
    at java.security.AccessController.doPrivileged(Native Method)
    at javax.security.auth.Subject.doAs(Subject.java:415)
    at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1157)
    at org.apache.hadoop.mapred.Child.main(Child.java:264)

原因: org.apache.hadoop.streaming.io.TypedBytesOutputReader.readKeyValue(TypedBytesOutputReader.java:57) での java.lang.NullPointerException 事前にすべてのヘルプに感謝します。

4

1 に答える 1

0

マップステージでキーと値の両方を別々に生成する必要があります。

def mapper(key, value):
    ...
    yield line[0], line[1:]

また、マップされた値が単一のオブジェクトであることを確認してください。複数の値を複数の値またはリストにラップする必要があります。

于 2013-02-27T08:43:26.453 に答える