六、hadoop mapreduce在windows本地运行调试

22 篇文章 0 订阅
15 篇文章 0 订阅

首先,在windows下安装hadoop,设置环境变量,还要加一个dll。

资源在这:https://download.csdn.net/download/qq_34955771/10163981

资源下载完按一下步骤配置,

1:将文件解压到hadoop的bin目录下

2:将hadoop.dll复制到C:\Window\System32下

3:添加环境变量HADOOP_HOME,指向hadoop目录

4:将%HADOOP_HOME%\bin加入到path里面

5、重启ide(因为windows环境变量是在应用启动时才获取,所以需要重启才能获取到新修改的)

这个方法适合开发时调试使用,方便我们在编译器上打断点什么的。正式集群中运行时,我们还是打成jar包,用hadoop jar命令提交job更好。

在mapred-site.xml文件中配置参数:

    <property>
        <name>mapreduce.framework.name</name>
        <value>local</value>
    </property>

如果value的值是yarn,那么不论在linux下还是在windows下都会使用yarn集群,至于yarn集群在哪?那就看yarn-site.xml里面配置的yarn集群地址了(而且还需要修改一点代码里的东西,看另一篇文章:https://mp.csdn.net/postedit/91358435

 

windows本地运行mapreduce代码,我们写代码一般是在windows下写,所以本地运行代码自然是更好测试的。

(1)要在windows下运行hadoop,要比运行在linux下多配置一些额外的东西。

具体请看我这篇文章https://blog.csdn.net/qq_36951116/article/details/90348181

(2)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");

        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);

(3)配置文件:

core-site.xml:

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoopTest:9000</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/root/hadoop/tmp</value>
    </property>
</configuration>

mapred-site.xml:

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>local</value>
    </property>
    <!--跨平台提交代码,也就是在windows下读取环境变量使用%var%,在linux下读取环境变量使用$var,以及其他windows和linux的差别,
    省的去修改YARNRunner.java源码-->
    <property>
        <name>mapreduce.app-submission.cross-platform</name>
        <value>true</value>
    </property>
</configuration>

当mapreduce.framework.name的值为local时(默认就是local),hadoop就不会使用yarn集群,而是单机运行。。

只有单机运行时,才能方便的用断点调试mapper和reducer代码。

而不使用yarn,所以yarn-site.xml中的配置就失效了。

 

通过上面的配置,在idea中直接可以跑起来,并且打断点什么的

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值