06 yarn是什么

7629 ワード

yarnクラスタには2つのロールがあります.
メインノード:ResourceManager 1台
スレーブノード:Node Manager N台
 
ResourceManagerは一般的に専用のマシンにインストールされています
Node ManagerはHDFSのdata nodeと重なるはずです
 
プロファイルの変更:
 
yarn-site.xml

yarn.resourcemanager.hostname
hdp-04



yarn.nodemanager.aux-services
mapreduce_shuffle

各マシンにコピーします
 
次にhdp-04でhadoopのslavesファイルを修正しnodemanagerを起動するマシンに入れます
そしてhdp-04をすべてのマシンへの無密登録構成にします
スクリプトでyarnクラスタを起動できます.
sbin/start-yarn.sh
停止:
sbin/stop-yarn.sh
 
起動が完了すると、windowsでresourcemanagerのwebポートにブラウザでアクセスできます.
http://hdp-04:8088
resource manangerがすべてのnode managerノードを認識しているかどうかを確認します
 
package cn.oracle.core;

import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
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.lib.input.FileInputFormat;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;

/**
 *     mapreduce job      
 *   :
 *   1、    job           
 *   2、 yarn    , mapreduce       、  
 * @author ThinkPad
 *
 */
public class JobSubmitter {
    
    public static void main(String[] args) throws Exception {
        
        //       JVM    ,   job       HDFS     
        System.setProperty("HADOOP_USER_NAME", "root");
        
        
        Configuration conf = new Configuration();
        // 1、  job             
        conf.set("fs.defaultFS", "hdfs://hdp-01:9000");
        // 2、  job       
        conf.set("mapreduce.framework.name", "yarn");
        conf.set("yarn.resourcemanager.hostname", "hdp-04");
// 3、 windows job , conf.set("mapreduce.app-submission.cross-platform","true"); Job job = Job.getInstance(conf); // 1、 :jar job.setJar("d:/wc.jar"); // 2、 : job Mapper 、Reducer job.setMapperClass(WordcountMapper.class); job.setReducerClass(WordcountReducer.class); // 3、 : job Mapper 、Reducer key、value job.setMapOutputKeyClass(Text.class); job.setMapOutputValueClass(IntWritable.class); job.setOutputKeyClass(Text.class); job.setOutputValueClass(IntWritable.class); Path output = new Path("/wordcount/output"); FileSystem fs = FileSystem.get(new URI("hdfs://hdp-01:9000"),conf,"root"); if(fs.exists(output)){ fs.delete(output, true); } // 4、 : job 、 FileInputFormat.setInputPaths(job, new Path("/wordcount/input")); FileOutputFormat.setOutputPath(job, output); //// 5、 : reduce task job.setNumReduceTasks(2); // 6、 job yarn boolean res = job.waitForCompletion(true); System.exit(res?0:-1); } }

 
まず、mapreduceプログラムのjobをyarnにコミットするクライアントクラス(テンプレートコード)を開発します.
l mapreduceプログラムの実行時に必要な情報(mapper、reducer、map、reduceで出力されるkvタイプ、jarパッケージが存在するパス、reduce taskの数、出力データを入力するパスなど)を説明します.
lプロジェクト全体のjarパッケージとともにyarnに情報を渡す
次に、プロジェクト全体(yarnクライアントクラス+mapreduceすべてのjarとカスタムクラス)をjarパッケージにします.
そしてjarパケットをhadoopクラスタのいずれかのマシンに転送する
最後に、jarパッケージの(YARNクライアントクラス)を実行します.
 
 
[root@hdp-04 ~]# hadoop jar wc.jar cn.oracle.hadoop.mr.wc.JobSubmitter