Hadoop 환경 구축 테스트 및 MapReduce 인스턴스 구현

목차

작업 1 개

2 프로세스

2.1 일반적으로 사용되는 Hadoop 명령에 익숙 함

2.2 Hadoop 환경 구축

1. SSH 로그인 권한 설정

2. Java 환경 설치

3. Hadoop 설치

4. 의사 분산 설치 구성

2.3 Wordcount 예

2.4 Wordcount 프로그램을 프로그래밍하고 구현하기위한 Eclipse 환경 설정

1. 이클립스 설치

2. Hadoop-Eclipse-Plugin 구성

3. Eclipse의 HDFS에서 파일 조작

4. Eclipse에서 MapReduce 프로젝트 만들기

5. Eclipse를 통해 MapReduce 실행

2.5 Hadoop 기반 데이터 중복 제거 구현

1. 설명 예

2. 디자인 아이디어

3. 프로그램 코드의 일부

4. 실험 결과

3 요약


작업 1 개

  • 일반적으로 사용되는 Hadoop 명령에 익숙 함
  • Wordcount 인스턴스 실행
  • Eclipse 프로그래밍 환경 구축
  • Wordcount 프로그램 프로그래밍

2 프로세스

2.1 일반적으로 사용되는 Hadoop 명령에 익숙 함

1. 셸 명령 작업 사용

Hadoop은 많은 셸 명령을 지원하며, 그중 fs는 HDFS에서 가장 일반적으로 사용되는 명령입니다. fs를 사용하면 HDFS 파일 시스템의 디렉터리 구조를보고, 데이터를 업로드 및 다운로드하고, 파일을 만드는 등의 작업을 수행 할 수 있습니다.

노트

셸 명령 모드에는 세 가지 차이점이 있습니다.

(1) 하둡 fs

(2) 하둡 dfs

(3) hdfs dfs

Hadoop fs는 로컬 파일 시스템 및 HDFS 파일 시스템과 같은 다른 파일 시스템에 적합합니다.

Hadoop dfs는 HDFS 파일 시스템에만 적용 할 수 있습니다.

hdfs dfs는 hadoop dfs와 동일한 기능을 가지며 HDFS 파일 시스템에만 적용 할 수 있습니다.

터미널에 다음 명령을 입력하여 총 fs에서 지원하는 명령을 확인할 수 있습니다.

./bin/hadoop fs

2. 도움말 명령 사용 방법 보기

 

3. HDFS 웹 인터페이스 관리 사용

2.2 Hadoop 환경 구축

1. SSH 로그인 권한 설정

(1) Ubuntu는 기본적으로 SSH 클라이언트를 설치했으며 이제 SSH 서버를 설치하십시오.

(2) 성공적인 설치 후

(3) 로그인

(4) 성공적인 로그인

2. Java 환경 설치

(1) JDK1.7.0 다운로드

 

(2) 성공적인 다운로드

(3) 환경 변수 구성

(4) .bashrc 파일을 저장하고 vim 편집기를 종료하고 .bashrc 파일의 구성이 즉시 적용되도록 명령합니다.

(5) 설치 성공 여부 확인

3. Hadoop 설치

(1) 컴퓨터에 공유 폴더를 만들고 여기에 hadoop을 다운로드 한 다음 압축을 풉니 다.

(2) 파일 이름을 hadoop으로 변경

(3) 파일 권한 수정

(4) 버전 정보 확인

4. 의사 분산 설치 구성

(1) core-site.xml 구성 파일 수정

(2) 구성 파일 hdfs-site.xml 수정

(3) 파일 시스템 초기화

(4) 초기화 과정에서 환경 변수 설정 문제가 발생하여 수정을 위해 hadoop-env.sh 파일을 엽니 다.

(5) 수정 후 다시 초기화

(6) 성공적인 초기화

2.3 Wordcount 예

1. 네임 노드 포맷

2. 형식이 성공적입니다.

3. 프로세스 시작

4. 프로세스보기

5. 파일을 로컬로 hadoop / input (직접 생성) 폴더에 업로드하고 hdfs 파일 시스템의 입력 폴더에 업로드합니다.

6. 파일이 성공적으로 업로드되었는지 확인

7. wordcount 인스턴스 실행

8. 맵리 듀스 진행 상황보기

9. 실행 결과보기

10. 실행 결과를 로컬 파일 시스템으로 다시 가져옵니다.

11. 프로세스 종료

2.4 Wordcount 프로그램을 프로그래밍하고 구현하기위한 Eclipse 환경 설정

1. 이클립스 설치

(1) 이클립스 다운로드

(2) 바로 가기 설치 및 생성

(3) Hadoop-Eclipse-Plugin 다운로드 및 설치, 공유 폴더에 다운로드 및 압축 해제

2. Hadoop-Eclipse-Plugin 구성

(1) 이클립스 시작

(2) Hadoop-Eclipse-Plugin 플러그인 설치 효과

(3) 플러그인의 추가 구성

①Hadoop 설치 디렉토리 선택

② Map / Reduce 개발보기로 전환

③ 하둡 위치 설정

④ Hadoop 클러스터와 연결 설정

3. Eclipse의 HDFS에서 파일 조작

구성 후 왼쪽의 Project Explorer에서 MapReduce Location을 클릭하여 (확장하려면 삼각형을 클릭) HDFS에서 파일 목록을 직접 확인합니다 (아래 그림은 WordCount의 출력 결과와 같이 HDFS에 파일이 있어야 함). 콘텐츠를 보려면 두 번 클릭하고 오른쪽 클릭 번거로운 hdfs dfs -ls 명령을 통해 작업 할 필요없이 HDFS에서 파일을 업로드, 다운로드 및 삭제하려면 클릭하십시오.

다음 output / part-r-00000 파일은 출력 결과를 기록합니다.

4. Eclipse에서 MapReduce 프로젝트 만들기

(1) 프로젝트 생성

(2) MapReduce 프로젝트 생성

(3) 프로젝트 이름 입력

(4) 프로젝트 생성 완료

(5) 새로운 클래스

(6) 수업 정보 입력

(7) WordCount.java 파일 편집

5. Eclipse를 통해 MapReduce 실행

(1) 수정 된 구성 파일을 / usr / local / hadoop / etc / hadoop (예 : 의사 배포를 위해 core-site.xml 및 hdfs-site.xml이 필요함)에 복사하고 log4j.properties를 WordCount 프로젝트에 복사합니다. Src 폴더

(2) Wordcount 실행 결과와 쉘 명령 결과 비교

2.5 Hadoop 기반 데이터 중복 제거 구현

1. 설명 예

 "데이터 중복 제거"는 주로 데이터를 의미있게 필터링하기 위해 병렬화 아이디어를 마스터하고 사용하기위한 것입니다. 대규모 데이터 세트의 데이터 유형 수 계산, 웹 사이트 로그에서 방문 위치 계산과 같이 복잡해 보이는 작업에는 데이터 중복 제거가 포함됩니다.

데이터 파일의 데이터를 중복 제거하십시오. 데이터 파일의 각 행은 데이터 조각입니다.

2. 디자인 아이디어

데이터 중복 제거의 궁극적 인 목표는 원본 데이터에 두 번 이상 표시되는 데이터가 출력 파일에 한 번만 표시되도록하는 것입니다. 우리는 당연히 같은 데이터의 모든 기록을 축소 기계에 넘기는 것을 생각합니다.이 데이터가 몇 번이나 나타나더라도 최종 결과에서 한 번만 출력합니다. 특히 reduce의 입력은 데이터를 키로 사용해야하며 값 목록에 대한 요구 사항이 없습니다. reduce가 <key, value-list>를 받으면 키를 출력 키에 직접 복사하고 값을 null 값으로 설정합니다.

MapReduce 프로세스에서 맵의 출력 <key, value>는 셔플 프로세스를 통해 <key, value-list>로 집계 된 다음 축소를 위해 넘겨집니다. 따라서 설계 한 축소 입력으로부터지도의 출력 키가 데이터 여야하고 그 값은 임의적임을 추론 할 수있다. 역 공제를 계속하면 맵 출력 데이터의 핵심은 데이터이고,이 예에서는 각 데이터가 입력 파일의 내용을 나타내는 라인이므로 맵 단계에서 완료해야 할 작업은 Hadoop 기본 작업 입력 방법을 사용한 후 값을로 설정하는 것입니다. 직접 키 및 출력 (출력의 값은 임의적 임). 맵의 결과는 셔플 프로세스 후 감소하도록 전달됩니다. 감소 단계는 각 키에 얼마나 많은 값이 있는지 상관하지 않습니다. 입력 키를 출력 키에 직접 복사하여 출력합니다 (출력 값은 비어 있음으로 설정 됨).

3. 프로그램 코드의 일부

public class WordCountDatededuplication {
 
    //map将输入中的value复制到输出数据的key上,并直接输出
    public static class Map extends Mapper<Object,Text,Text,Text>{
        private static Text line=new Text();//每行数据
       
        //实现map函数
        public void map(Object key,Text value,Context context)
                throws IOException,InterruptedException{
            line=value;
            context.write(line, new Text(""));
        }
    }
   
    //reduce将输入中的key复制到输出数据的key上,并直接输出
    public static class Reduce extends Reducer<Text,Text,Text,Text>{
        //实现reduce函数
        public void reduce(Text key,Iterable<Text> values,Context context)
                throws IOException,InterruptedException{
            context.write(key, new Text(""));
        }
    }
   
    public static void main(String[] args) throws Exception{
        Configuration conf = new Configuration();
        //这句话很关键
        conf.set("mapred.job.tracker", "192.168.1.2:9001");
       
        String[] ioArgs=new String[]{"dedup_in","dedup_out"};
     String[] otherArgs = new GenericOptionsParser(conf, ioArgs).getRemainingArgs();
     if (otherArgs.length != 2) {
     System.err.println("Usage: Data Deduplication <in> <out>");
     System.exit(2);
     }
     
     Job job = new Job(conf, "Data Deduplication");
     job.setJarByClass(Dedup.class);
     
     //设置Map、Combine和Reduce处理类
     job.setMapperClass(Map.class);
     job.setCombinerClass(Reduce.class);
     job.setReducerClass(Reduce.class);
     
     //设置输出类型
     job.setOutputKeyClass(Text.class);
     job.setOutputValueClass(Text.class);
     
     //设置输入和输出目录
     FileInputFormat.addInputPath(job, new Path(otherArgs[0]));
     FileOutputFormat.setOutputPath(job, new Path(otherArgs[1]));
     System.exit(job.waitForCompletion(true) ? 0 : 1);
     }
}

4. 실험 결과

(1) 테스트 데이터 준비

inputdatadeduplication 폴더를 만들고이 폴더 아래에 data1.txt 및 data2.txt 파일 두 개를 만듭니다.

data1.txt 파일 :

data2.txt 파일 :

(2) 달리기 결과보기

3 요약

우선, eclipse를 시작하려면 관리자 권한이 필요하므로이 프로그램을 실행할 때 "액세스 할 수 없음"오류를 피할 수 있습니다.

MapReduce 인스턴스 구현의 가장 큰 어려움은 코드 작성입니다.

의사 분산 형 Hadoop 구축 프로세스를 마스터하고 실습 기술을 연습하기위한 몇 가지 Linux 지침에 익숙해지기를 바랍니다.

 

추천

출처blog.csdn.net/qq_36556893/article/details/109261209