클러스터 모드에서 실행되는 맵리 듀스 프로그램, 단어 통계 사례

클러스터 모드에서 실행되는 맵리 듀스 프로그램, 단어 통계 사례

로컬 모드 작업 : https://blog.csdn.net/weixin_43614067/article/details/108386389
실행할 클러스터에 대한 로컬 제출 : https://blog.csdn.net/weixin_43614067/article/details/108401227
맵, 축소 및 local 모드는 동일하게 실행됩니다.

Yarn 고 가용성 클러스터 환경 구축
1. hadoop-2.6.5 / etc / hadoop / mapred-site.xml 구성

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
 </configuration>

2. 배치 hadoop-2.6.5 / etc / hadoop / yarn-site.xml

<configuration>

    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>

    <!--启用resourcemanager ha-->
    <property>
        <name>yarn.resourcemanager.ha.enabled</name>
        <value>true</value>
    </property>
 
    <!--声明两台resourcemanager的地址-->
    <property>
        <name>yarn.resourcemanager.cluster-id</name>
        <value>cluster-yarn1</value>
    </property>

    <property>
        <name>yarn.resourcemanager.ha.rm-ids</name>
        <value>rm1,rm2</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm1</name>
        <value>node001</value>
    </property>

    <property>
        <name>yarn.resourcemanager.hostname.rm2</name>
        <value>node002</value>
    </property>
 
    <!--指定zookeeper集群的地址--> 
    <property>
        <name>yarn.resourcemanager.zk-address</name>
        <value>node002:2181,node003:2181,node004:2181</value>
    </property>

    <!--启用自动恢复--> 
    <property>
        <name>yarn.resourcemanager.recovery.enabled</name>
        <value>true</value>
    </property>
 
    <!--指定resourcemanager的状态信息存储在zookeeper集群--> 
    <property>
        <name>yarn.resourcemanager.store.class</name>            
        <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
    </property>
</configuration>

3. 다른 클러스터 시스템에서 구성을 동기화합니다
. 4. yarn을 시작하고 나머지는 다른 시스템에서 수동으로 시작해야합니다.

sbin/start-yarn.sh

5. 시작 성공 여부 확인
(1) 방문 : node001 : 8088, 자동으로 node002 : 8088로 전환됩니다.
(2) Command view

 bin/yarn rmadmin -getServiceState rm1
 active
 bin/yarn rmadmin -getServiceState rm2
 standby

러너 수정

package com.bjsxt.wc;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hbase.client.Put;
import org.apache.hadoop.hbase.mapreduce.TableMapReduceUtil;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.NullWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Job;
import org.apache.hadoop.mapreduce.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
public class WCRunner {
    
    
    public static void main(String[] args) throws Exception {
    
    
        //创建配置对象
        Configuration conf = new Configuration();
        //创建Job对象
        Job job = Job.getInstance(conf, "wordCount");
        //设置mapper类
        job.setMapperClass(WCMapper.class);
        //设置 Reduce类
        job.setReducerClass(WCReducer.class);
        //设置运行job类
        job.setJarByClass(WCRunner.class);
        //设置map输出的key,value类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        //设置reduce输出的key,value类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);

        //设置输入路径金额输出路径
        FileInputFormat.setInputPaths(job, new Path(args[0]));
        FileOutputFormat.setOutputPath(job, new Path(args[1]));
        long startTime = System.currentTimeMillis();
        try {
    
    
       		//提交job
            boolean b = job.waitForCompletion(true);
            if (b) {
    
    
                System.out.println("单词统计完成!");
            }
        } finally {
    
    
            // 结束的毫秒数
            long endTime = System.currentTimeMillis();
            System.out.println("Job<" + job.getJobName() + ">是否执行成功:" + job.isSuccessful() + "; 开始时间:" + startTime + "; 结束时间:" + endTime + "; 用时:" + (endTime - startTime) + "ms");
        }
    }
}

컴파일하고, 포장 서버에 임의의 디렉토리에 업로드 한 후
, 예를 들어, /root/project/wordcount.jar HDFS 디렉토리를 만들고, 단어의 텍스트를 넣어하는 등 word.txt 같이 입력 디렉토리에 계산하기

hdfs dfs -mkdir -p /wordcount/input
hdfs dfs -put test.txt /wordcount/input

참고 : 출력 디렉토리는 생성 할 필요가 없습니다.

wordcount jar 실행

hadoop jar /root/project/wordcount.jar com/bjsxt/wc/WCRunner /wordcount/input /wordcount/output

wordcount.jar : 프로젝트가 컴파일되고 패키징 된 후의 jar
com / bjsxt / wc / WCRunner : Runner 클래스의 전체 경로
/ wordcount / input : hdfs의 데이터 입력 경로
/ wordcount / output : 데이터 hdfs의 출력 경로

실행 후 확인

hdfs dfs -cat /wordcount/output/*

로컬 모드 작업 : https://blog.csdn.net/weixin_43614067/article/details/108386389 작업
을 위해 클러스터에 로컬 제출 : https://blog.csdn.net/weixin_43614067/article/details/108401227

추천

출처blog.csdn.net/weixin_43614067/article/details/108400938