hadop 실천 (5) win 10 + eclipse + hadop 2.6.4 개발 환경
eclipse Kepler Service Release 1
win 10 에 vm workstation 을 설 치 했 고 그 위 에 centos 6.5 를 설 치 했 으 며 그 위 에 hadop 2.6.4 의 의사 분포 식 설 치 를 배치 했다.
목표
win 10 하의 eclipse 개발 환경 을 설정 하고 이 환경 에서 hadop 응용 을 개발 하여 의사 분포 식 hadop 환경 에서 테스트 할 수 있 습 니 다.
준비
1、eclipse ( Kepler Service Release 1)
2、 hadoop2.6.4
3. hadop. dll 과 winutils
4. wordcount 코드
5. wordcount 에 필요 한 통계 단어의 텍스트 원본
6. hadop for eclipse 플러그 인, 본인 이 사용 하 는 플러그 인 은? hadoop-eclipse-plugin-2.6.4.jar
3. 환경 구축 절차
1. hadop 2.6.4 압축 풀기 win 10 시스템 의 임의의 디 렉 터 리 아래 있 습 니 다.(eclipse 를 설정 하기 위해 실제 연결 할 때 Liux 가상 기기 의 의사 분포 식 hadop 을 연결 합 니 다)
2. win 10 의 환경 변 수 를 설정 하고 제어 판 - 시스템 - 고급 설정 - 환경 변 수 를 통 해 다음 과 같은 몇 가지 환경 변 수 를 설정 해 야 합 니 다. 이미 본인 의 기 계 를 예 로 들 면:
JAVA_HOME=C:\Program Files (x86)\Java\jre6\bin
HADOOP_HOME=E:\cwqwork\develop\hadoop-2.6.4
path 마지막 증가 E:\cwqwork\develop\hadoop-2.6.4\bin
3. 플러그 인 복사 eclipse 설치 디 렉 터 리 의 plugsin 디 렉 터 리
4 、 eclipse 시작, windows-》hadoop Map/Reduce
hadop installation directory 에 앞의 첫 번 째 압축 해제 디 렉 터 리 를 입력 하고 OK 를 누 르 십시오.
5. 화면 오른쪽 에 새로 나 온 맵 / Reduce 탭 에서 맨 왼쪽 Project Explorer 가 나타 납 니 다. DFS Locations。
화면 맨 오른쪽 아래 에 파란색 아기 코끼리 가 있 습 니 다. 클릭 후, 설정 hadoop location
6. 위 에 설정 하면 한 층 한 층 훑 어 볼 수 있 습 니 다. DFS Locations。 이것 은 Liux 아래 hadop 의 dfs 시스템 을 표시 합 니 다.
넷, 테스트 공정 코드
1. 새 프로젝트, other - map reduce procject 를 선택 하고 프로젝트 이름 을 입력 하 는 등 새로운 프로젝트 를 만 듭 니 다.
2 、 WordCount 클래스 만 들 기
코드 는 다음 과 같 습 니 다:
import java.io.IOException;
import java.util.StringTokenizer;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.Mapper;
import org.apache.hadoop.mapreduce.Reducer;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.util.GenericOptionsParser;
public class WordCount {
public static class TokenizerMapper
extends Mapper<Object, Text, Text, IntWritable>{
private final static IntWritable one = new IntWritable(1);
private Text word = new Text();
public void map(Object key, Text value, Context context
) throws IOException, InterruptedException {
StringTokenizer itr = new StringTokenizer(value.toString());
while (itr.hasMoreTokens()) {
word.set(itr.nextToken());
context.write(word, one);
}
}
}
public static class IntSumReducer
extends Reducer<Text,IntWritable,Text,IntWritable> {
private IntWritable result = new IntWritable();
public void reduce(Text key, Iterable<IntWritable> values,
Context context
) throws IOException, InterruptedException {
int sum = 0;
for (IntWritable val : values) {
sum += val.get();
}
result.set(sum);
context.write(key, result);
}
}
public static void main(String[] args) throws Exception {
Configuration conf = new Configuration();
//conf.set("mapred.job.tracker","192.168.136.155:9001" );
//conf.set("fs.default.name","192.168.136.155:9000" );
String[] otherArgs = new GenericOptionsParser(conf, args).getRemainingArgs();
if (otherArgs.length != 2) {
System.err.println("Usage: wordcount <in> <out>");
System.exit(2);
}
System.out.println ("Usage: wordcount <in> <out>" + otherArgs[0] +" "+ otherArgs[1] );
Job job = new Job(conf, "wordcount");
job.setJarByClass(WordCount.class);
job.setMapperClass(TokenizerMapper.class);
job.setCombinerClass(IntSumReducer.class);
job.setReducerClass(IntSumReducer.class);
job.setOutputKeyClass(Text.class);
job.setOutputValueClass(IntWritable.class);
FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
System.out.println ("add input path:" + otherArgs[0]);
System.out.println ("set output path:" + otherArgs[1]);
System.out.println ("begin wait job completion");
job.waitForCompletion(true);
}
}
생 성 이 완료 되면 Liux 가상 컴퓨터 에서 통계 가 필요 한 텍스트 를 가 져 옵 니 다.
Hello world Hello me!cwq solo
텍스트 2: Hello world Hello you! solo
linux 디 렉 터 리 / opt / hadop / input / ordcount 다음:
echo "Hello world Hello me! cwq solo" >test1.txt
echo " Hello world Hello you! solo" >test2.txt
hadoop fs -put /opt/hadoop/input/wordcount input
3. 완료 후 클래스 에서 오른쪽 버튼 - run configuration - 입력 매개 변수
hdfs://192.168.136.155:9000/user/hadoop/input/wordcount hdfs://192.168.136.155:9000/user/hadoop/output/wordcount
입력 후 실행 하지 마 십시오.
그리고 run on hadop 방식 으로 실 행 됩 니 다.
4. 정상 적 인 상황 에서 이상 을 보고 합 니 다.
Exception in thread "main" java.lang.NullPointerException
at java.lang.ProcessBuilder.start(ProcessBuilder.java:441)
at org.apache.hadoop.util.Shell.runCommand(Shell.java:445)
at org.apache.hadoop.util.Shell.run(Shell.java:418)
패 치 를 설치 하지 않 았 기 때문이다. 장차 hadop. dll 과 winutils 복사 win 10 위 hadop 디 렉 터 리 아래 bin 디 렉 터 리.
5. 다시 실행 합 니 다. 이상 이 없 지만 실행 이 끝 났 습 니 다. dfs 를 보면 output 결과 가 없고 console 에 출력 이상 이 없습니다.이곳 은 오랫동안 갈등 하고 있다.
해결 방법: src 디 렉 터 리 에 log. properties 파일 을 만들어 log4j 를 인쇄 할 수 있 도록 합 니 다.
log4j.rootLogger=debug,stdout,R
log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%5p - %m%n
log4j.appender.R=org.apache.log4j.RollingFileAppender
log4j.appender.R.File=mapreduce_test.log
log4j.appender.R.MaxFileSize=1MB
log4j.appender.R.MaxBackupIndex=1
log4j.appender.R.layout=org.apache.log4j.PatternLayout
log4j.appender.R.layout.ConversionPattern=%p %t %c - %m%
log4j.logger.com.codefutures=DEBUG
6. 다시 실행 하면 console 인쇄 에 error 가 있 습 니 다.
WARN - job_local194089354_0001 org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode="/user/hadoop/output":hadoop:supergroup:drwxr-xr-x at org.apache.hadoop.hdfs.server.namenode.FSPermissionChecker.checkFsPermission(FSPermissionChecker.java:271)
권한 문제 임 을 설명 합 니 다. eclipse 는 Administrator 로 시작 되 었 습 니 다. Liux 에 연 결 된 hadop 은 이 사용자 이기 때문에 권한 이 금지 되 어 있 습 니 다.
해결 방법:
1), 테스트 환경 이 라면 hadop hdfs 의 사용자 권한 검 사 를 취소 할 수 있 습 니 다.conf / hdfs - site. xml 을 열 고 dfs. permissions 속성 을 false (기본 값 true) 로 변경 합 니 다. OK.2) hadop location 인 자 를 수정 하고 advanced parameter 옵션 에서 hadop. job. ugi 항목 을 찾 아 hadop 을 시작 하 는 사용자 이름 으로 바 꾸 면 됩 니 다. 3) window 기기 의 사용자 이름 을 hadop 사용자 이름 으로 바 꾸 면 됩 니 다.
7. 실행, 이번 정확 한 실행 이 완료 되 었 습 니 다. console 은 오 류 를 보고 하지 않 습 니 다. dfs location 오른쪽 버튼 - reconnect - > 는 한 층 한 층 씩 열 리 고 마지막 으로 output 디 렉 터 리 에서 통계 단어 결 과 를 볼 수 있 습 니 다.
Hello 4 cwq 1 me! 1 solo 2 world 2 you! 1
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
m1 이클립스에 oracle cloud (오라클 클라우드)연결하기m1에는 oracle이 설치되지 않는다.... 큰맘먹고 지른 m1인데 oracle이 설치되지 않는다니... 하지만 이뻐서 용서가 된다. 이거 때문에 웹 개발 국비수업을 듣는 도중에 몇번 좌절하고 스트레스를 크게 받았...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.