八、Intellij IDEA远程向hadoop集群提交mapreduce作业

其实对比单机版,差别不是很大。

用阿里云的时候别忘了把所有端口都打开。。因为有些代码还是在windows运行,而有些端口貌似是不固定的,应该可以配置成固定的,但我偷懒了,就让hadoop自己随机吧。。我把linux端口全打开。

(1)job代码:


        //hdfs操作文件系统的用户名,避免在windows下使用默认用户名对hdfs没有修改权限
        System.setProperty("HADOOP_USER_NAME", "root");
        Configuration conf = new Configuration();
        
        //namenode返回远程datanode主机的主机名,而不使用内网ip,
        //并且需要配置当前代码运行到的所有主机的hosts文件,  
        //把namenode返回的主机名与对应主机ip的映射写好。。有钱的话可以用域名
        conf.set("dfs.client.use.datanode.hostname", "true");

        //********比单机版的多了下面这一行**********
        //用于配置将要被runJar进程上传的jar包存放地址。。
        //因为是在本地启动runjar进程,所以下面这jar包路径设置是给runjar的,使得runjar能从本地获取到jar包文件,然后上传到rm指定的hdfs的目录下
        conf.set("mapreduce.job.jar","C:\\Users\\周利东\\.m2\\repository\\com\\example\\hadoop\\0.0.1-SNAPSHOT\\hadoop-0.0.1-SNAPSHOT.jar");

        Job job = Job.getInstance(conf);

        //下面这样作用是指定job要使用的jar包,该jar包是WCRunner类所属项目的
        job.setJarByClass(WCRunner.class);

        //指定当前作业执行的Mapper与Reducer
        job.setMapperClass(WCMapper.class);
        job.setReducerClass(WCReduce.class);

        //指定Mapper与Reducer输出的key-value类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(LongWritable.class);

        //执行Mapper输出的key-value类型
        //可以覆盖上面的,这样的话就相当于上面两行是指定Reducer的输出kv类型
        //而下面两行是指定Mapper的输出kv类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(LongWritable.class);

        //指定输入数据存放在hdfs的目录,只要指定目录就行,到时候会读取整个目录下的所有文件
        FileInputFormat.setInputPaths(job, new Path("/wc/srcData"));

        Path path = new Path("/wc/output");
        FileSystem fileSystem = FileSystem.get(conf);
        if (fileSystem.exists(path)){
            fileSystem.delete(path,true );
        }

        //指定处理结果输出数据存放在hdfs的目录
        FileOutputFormat.setOutputPath(job,path );

        boolean b = job.waitForCompletion(true);
        System.out.println(b);

 

(2)配置文件

core-site.xml:(与单机版一样)


    
        fs.defaultFS
        hdfs://hadoopTest:9000
    
    
        hadoop.tmp.dir
        /root/hadoop/tmp
    

mapred-site.xml:


    
        mapreduce.framework.name
        yarn
        
    
    
    
        mapreduce.app-submission.cross-platform
        true
    

yarn-site.xml:


    
        
        
        yarn.resourcemanager.hostname
        hadoopTest
    

    
    
        yarn.nodemanager.aux-services
        mapreduce_shuffle
    

 

你可能感兴趣的