您当前的位置: 首页 >  服务器

宝哥大数据

暂无认证

  • 0浏览

    0关注

    1029博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

服务器模式之在本地提交

宝哥大数据 发布时间:2017-01-21 23:15:10 ,浏览量:0

服务器模式之在本地提交 首先需要在src下放置服务器上的hadoop配置文件


1、在本地直接调用,执行过程在服务器上(调试)

a、把MR程序打包(jar),直接放到本地
b、修改hadoop的源码 ,注意:确保项目的lib需要真实安装的jdk的lib
c、增加一个属性: 
config.set(“mapred.jar”, “C:\Users\Administrator\Desktop\wc.jar”);
d、本地执行main方法,servlet调用MR。

配置Eclipse本地hadoop服务器模式出现的问题: 参考:

  • Windows下使用Hadoop2.6.0-eclipse-plugin插件
  • apache hadoop 2.4.0 64bit 在windows8.1下直接安装指南(无需虚拟机和cygwin)
1、出现了Exception in thread “main” java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z

:   一直按照网上的缺少hadoop.dll,没有配置好JAVA_HOME, PATH, CLASSPATH, winutils.exe, 一直没有弄好 解决: 将hadoop的配置文件中的主机名改为ip 发现没有该报错了,但是没有弄清楚原因

2、ExitCodeException exitCode=1: /bin/bash: 第 0 行:fg: 无任务控制

解决方法: 在Eclipse中配置hadoop的mapred-site.xml,添加下面的配置

  
        mapred.remote.os
        Linux
        Remote MapReduce framework's OS, can be either Linux or Windows 
    
    
        mapreduce.app-submission.cross-platform
        true
    
3、historyserver没有启动
cd  {HADOOP_HOME}
./sbin/mr-jobhistory-daemon.sh start historyserver
4、No job jar file set. User classes may not be found. See Job or Job#setJar(String)

将原来的有conf来加载jar

conf.set("mapred.jar", "C:\\Users\\Administrator\\Desktop\\wc.jar");

改为由Job加载Jar

job.setJar("C:\\Users\\Administrator\\Desktop\\wc.jar");

结果成功了!

这里写图片描述

至此windows调试hadoop服务器模式已经成功!!!

接下来谈谈服务器模式

服务器环境:前期要求 首先需要在src下放置服务器上的hadoop配置文件 注意:hadoop的配置文件防src下, 本人尝试在src下创建一个conf的文件夹放置配置文件, 总是出问题。无奈之下,只能老实的放在src下 1、在本地直接调用,执行过程在服务器上(真正企业运行环境)

  • a、把MR程序打包(jar),直接放到本地
  • b、修改hadoop的源码 ,注意:确保项目的lib需要真实安装的jdk的lib
  • c、增加一个属性: config.set(“mapred.jar”, “C:\Users\Administrator\Desktop\wc.jar”);
  • ctmp 设置Jar, job.setJar(String);上面按照步骤c, 增加一个属性可能没有作用, 使用job.setJar(String);本人就是出现这种情况, 一致报没有找到mapper和reducer的类 job.setJar("C:\\Users\\Administrator\\Desktop\\wc.jar");

  • d、本地执行main方法,servlet调用MR。

package com.chb;

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;

public class WC {
    public static void main(String[] args) {
        //设置hadoop用户,我们可能不是使用root用户,要在此处添加
        System.setProperty("HADOOP_USER_NAME", "chb");
        //加载配置
        Configuration conf = new Configuration();
        //使用config.set(jar), 总是报错, 用job.setJar(String), 加载放在本地的程序导出的jar包
        //conf.set("mapred.jar", "C:\\Users\\Administrator\\Desktop\\wc.jar");
        try {
            FileSystem fs = FileSystem.get(conf);
            //创建任务
            Job job =Job.getInstance();
            job.setJarByClass(com.chb.WC.class);
            job.setJar("C:\\Users\\Administrator\\Desktop\\wc.jar");
            job.setJobName("WC");
            //Mapper和Reducer类
            job.setMapperClass(com.chb.WCMapper.class);
            job.setReducerClass(com.chb.WCReducer.class);
            //Mapper的输出类型
            job.setMapOutputKeyClass(Text.class);
            job.setMapOutputValueClass(IntWritable.class);
            //输入输出路径
            FileInputFormat.addInputPath(job, new Path("/user/chb/input/"));
            Path out = new Path("/user/chb/output/wc");
            if(fs.exists(out)) {
                fs.delete(out, true);
            }
            FileOutputFormat.setOutputPath(job, out);
            boolean f = job.waitForCompletion(true);
            if(f){
                System.out.println("任务已经完成了");
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}
关注
打赏
1587549273
查看更多评论
立即登录/注册

微信扫码登录

0.0567s