簡體   English   中英

基本的hadoop mapreduce工作正在啟動,但尚未完成

[英]Basic hadoop mapreduce job is starting, but not completing

我正在查看Hadoop,但是當我嘗試提交mapreduce作業時,Hadoop似乎啟動了,但隨后掛起,沒有任何進度或其他活動的跡象。 “應用程序狀態”頁面說它已經提交並顯示了工作,但是什么也沒發生,我很好奇應該去哪里解決這個問題。

我正在使用Hadoop版本2.7.1,該版本使用Homebrew和Java 1.8.0_45安裝在OS X 10.10.4中。 我已按照以下說明對其進行了配置: https : //datarecipe.wordpress.com/2015/06/05/setup-hadoop-2-6-on-mac-osx-10-9/

數據是一個簡單的文本文件,稱為“ purchases.txt”,其中包含以下內容(制表符分隔):

2013-03-29  2:30    miami   cup 2.43    visa
2013-04-23  1:34    miami   cup 2.43    visa
2013-04-23  10:15   LA  spoon   1.32    visa
2013-04-28  6:34    LA  bottle  3.56    cash
2013-05-23  1:43    miami   glass   3.21    visa

我已將其上傳到hadoop中(已創建數據文件夾):

hadoop fs -put purchases.txt /data/

然后,我在python中設置了以下映射器(根據在線教程),並將其命名為“ mapper.py”:

import sys

def mapper():
    for line in sys.stdin:
        tempdata = line.strip().split("\n")
        for l in tempdata:
            if (len(l.split("\t")) == 6):
                date, time, store, item, cost, payment = l.split("\t")
                print("{0}\t{1}".format(store,cost))

def main():
    mapper()

if __name__=="__main__":
    main()

我對化簡器代碼進行了相同的操作,並將其稱為“ reducer.py”:

import sys

def reducer():
    salesTotal = 0
    oldKey = None
    for line in sys.stdin:
        data = line.strip().split("\t")
        if len(data)!=2:
            continue
        thisKey, thisSale = data
        if oldKey and oldKey != thisKey:
            print("{0}\t{1}".format(oldKey,salesTotal))
            salesTotal=0
        oldKey = thisKey
        salesTotal+=float(thisSale)
    if oldKey != None:
        print("{0}\t{1}".format(oldKey,salesTotal))

def main():
    reducer()

if __name__=="__main__":
    main()

測試這些代碼位可在命令行上運行:

Tophers-Retina-MBP:Hadoop tkessler$ cat purchases.txt | ./mapper.py | sort | ./reducer.py 
LA  4.88
miami   5.640000000000001

但是,當我運行流流程以在Hadoop中運行它時,它停滯在這里:

Tophers-Retina-MBP:lib tkessler$ hadoop jar ./hadoop-streaming-2.7.1.jar -mapper ~/PycharmProjects/Hadoop/mapper.py -reducer ~/PycharmProjects/Hadoop/reducer.py -file ~/PycharmProjects/Hadoop/mapper.py -input /data -output /project1out
packageJobJar: [/Users/tkessler/PycharmProjects/Hadoop/mapper.py, /var/folders/f_/3zvmc1g95lqgt1cp2dtnrtqw0000gp/T/hadoop-unjar2355518779286421017/] [] /var/folders/f_/3zvmc1g95lqgt1cp2dtnrtqw0000gp/T/streamjob8766144507660069606.jar tmpDir=null

似乎可以很好地啟動該作業,並接受mapper和reducer,然后運行“ mapred job -list all”顯示作業已全部運行,但從未完成,其狀態僅列為“未知”。 我不確定是否是Hadoop配置問題或其他問題(如果有人有任何見識)。

加成:

當我運行以下示例命令時,進度似乎只是停止在以下行:

Tophers-Retina-MBP:~ tkessler$ hadoop jar /usr/local/Cellar/hadoop/2.7.1/libexec/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar pi 4 1000
Number of Maps  = 4
Samples per Map = 1000
Wrote input for Map #0
Wrote input for Map #1
Wrote input for Map #2
Wrote input for Map #3
Starting Job

通過關閉namenode和datanode清除Hadoop,然后使用brew uninstall hadoop卸載它,然后按照此頁面上的說明進行設置: http : //amodernstory.com/2014/09/23/installing-hadoop- on-mac-osx-優勝美地/

現在似乎工作得很好,所以也許只是輕微的配置更改(可能使用臨時文件位置),但是現在它可以很好地處理mapper和reducer。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM