지도 축소 기능을 사용하지 않아 파이썬으로 알고리즘을 작성했으며 'n'데이터 세트에서 같은 프로그램 ('알고리즘')의 'n'맵 인스턴스를 실행해야합니다. 내 코드가 파이썬이기 때문에, 나는 내 코드에 대해 hadoopstreaming을 사용하고있다.hadoop의 분할 수와 맵 작업 수
하둡 스트리밍 설명서에서 "입력 파일의 전체 HDFS 경로를 포함하는 파일 생성 : 각 맵 작업은 하나의 파일 이름을 입력으로 가져옵니다."
그래서 각 데이터 세트 파일에 대한 경로가있는 텍스트 파일을 만들었습니다. 시험을 위해서, 나는 이것으로부터 단어 카운트 프로그램을 작성했습니다 - http://www.michael-noll.com/tutorials/writing-an-hadoop-mapreduce-program-in-python/. 그리고 내지도 기능에, 나는 실제 단어를하기 전에 코드의 아래 부분이
for line in sys.stdin:
# obtain filename from file list
filename = line.rstrip('\n')
localfilename = ntpath.basename(filename)
os.environ("hadoop dfs -get"+line+ " " + localfilename)
Q1을 계산 작성했습니다. 그래서 내 이해는 각 줄을 내지도 함수에 분할로 주어 지므로 분할 수는 주 파일의 분할 수 또는 줄 수 여야합니다. 내 주 파일에 세 개의 파일 이름이 있지만 두 개의 분할이 만들어져 있음을 알 수 있습니다. 왜 그래야만하지?
Q2. 그리고 내 일이 실패하고, 나는 왜 이런 로그 파일을 확인해야 할 지 모르겠다.
Q3. 그리고 그 외에도 다른 요구 사항을 처리하는 또 다른 옵션이 있습니다. 세 개의 데이터 세트를 모두 한 파일에 저장하고 특정 구분 기호로 구분 한 다음이 conf.set ("textinputformat.record.delimiter", "specific-delimiter "),하지만 문제는 java에서 수행되어야한다는 것입니다. 또한, 많은 포럼에서이를 달성하기 위해 사용자 정의 레코드 판독기를 작성했습니다. 이후 Java에서 좋은 아니에요, 나는 파이썬에서 내 구현을 작성 오전, 어쨌든이 매개 변수를 설정하거나 Java 코드를 작성하지 않고합니까?
4. hadoop에 내 요구 사항을 처리하기 위해 누락 된 다른 옵션이 있습니까?
[email protected]:~/code$ hadoop jar /usr/local/hadoop-2.2.0/share/hadoop/tools/lib/hadoop-streaming-2.2.0.jar -mapper "python $PWD/fileprocess.py" -reducer "python $PWD/reduce.py" -input final.txt -output output.txt
14/09/16 05:27:23 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
packageJobJar: [/home/hduser/tmp/hadoop-unjar4045267665479713934/] [] /tmp/streamjob4078572719514334736.jar tmpDir=null
14/09/16 05:27:26 INFO client.RMProxy: Connecting to ResourceManager at master/10.0.0.4:8032
14/09/16 05:27:26 INFO client.RMProxy: Connecting to ResourceManager at master/10.0.0.4:8032
14/09/16 05:27:31 INFO mapred.FileInputFormat: Total input paths to process : 1
14/09/16 05:27:31 INFO mapreduce.JobSubmitter: number of splits:2
14/09/16 05:27:31 INFO Configuration.deprecation: user.name is deprecated. Instead, use mapreduce.job.user.name
14/09/16 05:27:31 INFO Configuration.deprecation: mapred.jar is deprecated. Instead, use mapreduce.job.jar
14/09/16 05:27:31 INFO Configuration.deprecation: mapred.output.value.class is deprecated. Instead, use mapreduce.job.output.value.class
14/09/16 05:27:31 INFO Configuration.deprecation: mapred.mapoutput.value.class is deprecated. Instead, use mapreduce.map.output.value.class
14/09/16 05:27:31 INFO Configuration.deprecation: mapred.job.name is deprecated. Instead, use mapreduce.job.name
14/09/16 05:27:31 INFO Configuration.deprecation: mapred.input.dir is deprecated. Instead, use mapreduce.input.fileinputformat.inputdir
14/09/16 05:27:31 INFO Configuration.deprecation: mapred.output.dir is deprecated. Instead, use mapreduce.output.fileoutputformat.outputdir
14/09/16 05:27:31 INFO Configuration.deprecation: mapred.map.tasks is deprecated. Instead, use mapreduce.job.maps
14/09/16 05:27:31 INFO Configuration.deprecation: mapred.output.key.class is deprecated. Instead, use mapreduce.job.output.key.class
14/09/16 05:27:31 INFO Configuration.deprecation: mapred.mapoutput.key.class is deprecated. Instead, use mapreduce.map.output.key.class
14/09/16 05:27:31 INFO Configuration.deprecation: mapred.working.dir is deprecated. Instead, use mapreduce.job.working.dir
14/09/16 05:27:34 INFO mapreduce.JobSubmitter: Submitting tokens for job: job_1410171456875_0012
14/09/16 05:27:34 INFO impl.YarnClientImpl: Submitted application application_1410171456875_0012 to ResourceManager at master/10.0.0.4:8032
14/09/16 05:27:35 INFO mapreduce.Job: The url to track the job: http://master:8088/proxy/application_1410171456875_0012/
14/09/16 05:27:35 INFO mapreduce.Job: Running job: job_1410171456875_0012
14/09/16 05:27:51 INFO mapreduce.Job: Job job_1410171456875_0012 running in uber mode : false
14/09/16 05:27:51 INFO mapreduce.Job: map 0% reduce 0%
14/09/16 05:28:11 INFO mapreduce.Job: Task Id : attempt_1410171456875_0012_m_000001_0, Status : FAILED
Error: java.lang.RuntimeException: PipeMapRed.waitOutputThreads(): subprocess failed with code 2
at org.apache.hadoop.streaming.PipeMapRed.waitOutputThreads(PipeMapRed.java:320)
at org.apache.hadoop.streaming.PipeMapRed.mapRedFinished(PipeMapRed.java:533)
at org.apache.hadoop.streaming.PipeMapper.close(PipeMapper.java:130)
at org.apache.hadoop.mapred.MapRunner.run(MapRunner.java:61)
at org.apache.hadoop.streaming.PipeMapRunner.run(PipeMapRunner.java:34)
at org.apache.hadoop.mapred.MapTask.runOldMapper(MapTask.java:429)
at org.apache.hadoop.mapred.MapTask.run(MapTask.java:341)
at org.apache.hadoop.mapred.YarnChild$2.run(YarnChild.java:162)
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:1491)
at org.apache.hadoop.mapred.YarnChild.main(YarnChild.java:157)
안녕하세요. 답장을 보내 주셔서 감사합니다. 예, 잘못되었습니다. 방금 수정했습니다. 그리고 첫 번째 대답과는 별도로, 여러분은 -input/TEMP/files/*를 사용하여 내가 바라는 행동을 줄 것이라고 언급했습니다. 따라서이 경우 하나의 파일을 처리하는 각지도 작업에 대한 필자의 요구 사항을 충족시킵니다. 필자는 일부 기능 의존성 작업을 수행하고 있기 때문에 데이터가 혼합되어서는 안되기 때문에 믹싱 데이터 세트가 내 요구 사항에 완전히 영향을 미칩니다. –
예, 두 개의 다른 파일이 동일한 매퍼로 전송되지 않습니다. 그래도 궁금한데, 왜 중요합니까? 동일한 매퍼가 처리하더라도 입력 파일에서 각 파일을 독립적으로 처리 할 수 있습니다. – Nonnib
왜냐하면, 나는 그 데이터 세트 내에서 다른 것과 각각의 튜플을 비교할지도 함수에 내 알고리즘을 쓰려고하기 때문에, 다른 데이터 세트가 믹스되면 완전한 엉망이 될 것입니다. –