一、准备工作

 (1)Hadoop2.7.2 在linux部署完毕,成功启动dfs和yarn,通过jps查看,进程都存在

 (2)安装maven

二、最终效果

 在windows系统中,直接通过Run as Java Application运行wordcount,而不需要先打包成jar包,然后在linux终端运行

三,操作步骤

 1、启动dfs和yarn

  终端:${HADOOP_HOME}/sbin/start-dfs.sh

    ${HADOOP_HOME}/sbin/start-yarn.sh

  通过在namenode节点上jps查看显示:

  4852 NameNode
  5364 ResourceManager
  5141 SecondaryNameNode
  10335 Jps

  在datanode节点上使用jps查看显示:

  10369 Jps
  4852 NameNode
  5364 ResourceManager
  5141 SecondaryNameNode

 2、Eclipse基础配置

  (1)将hadoop-eclipse-plugin-2.7.2.jar插件下载,放在Eclipse的目录下的plugins目录下,启动Eclipse,然后点击查看Hadoop插件是否生效,点击windows——>preferences,如下图1

    win10+eclipse+hadoop2.7.2+maven+local模式直接通过Run as Java Application运行wordcount

  (2)将hadoop-2.7.2的解压包添加到2所示的目录,点击OK

 3、Eclipse创建maven工程

  (1)创建过程省略

  (2)添加dependency,POM.xml中的依赖项如下:

  hadoop-common

  hadoop-hdfs

  hadoop-mapreduce-client-core

      hadoop-mapreduce-client-common  

  <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-common -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-common</artifactId>
        <version>2.7.2</version>
    </dependency>
        <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-hdfs -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-hdfs</artifactId>
        <version>2.7.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-core -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-core</artifactId>
        <version>2.7.2</version>
    </dependency>
    <!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-mapreduce-client-common -->
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-mapreduce-client-common</artifactId>
        <version>2.7.2</version>
    </dependency>

   (3)此时可能会卡顿一段时间,Build workpath如果特别慢的话,请参考我前不久的一篇解决方法,等到maven中的依赖包下载install完毕即可

 4、编写mapreduce中的wordcount代码

  代码此处不在累述,,简单代码架构(红色框的那个包)和内容如下:

        win10+eclipse+hadoop2.7.2+maven+local模式直接通过Run as Java Application运行wordcount

  WCMapper类:  

package cn.edu.nupt.hadoop.mr.wordcount;

import java.io.IOException;

import org.apache.commons.lang.StringUtils;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

// 4个泛型中,前两个是指定的mapper输入数据的类型
//map 和 reduce 的数据输入输出是以key-value的形式封装的
//默认情况下,框架传递给我们的mapper的输入数据中,key是要处理的文本中一行的其实偏移量,这一行的内容作为value
// JDK 中long string等使用jdk自带的序列化机制,序列化之后会携带很多附加信息,造成网络传输冗余,
//        所以Hadoop自己封装了一些序列化机制
public class WCMapper extends Mapper<LongWritable, Text, Text, LongWritable>{
    
    // mapreduce框架每读一行就调用一次该方法
    @Override
    protected void map(LongWritable key, Text value,Context context)
            throws IOException, InterruptedException {
        //具体的业务写在这个方法中,而且我们业务要处理的数据已经被该框架传递进来
        // key是这一行的其实偏移量,value是文本内容
        String line = value.toString();
        
        String[] words = StringUtils.split(line, " ");
        
        for(String word : words){
            
            context.write(new Text(word), new LongWritable(1));      
        }      
    } 
}
View Code

相关文章:

  • 2021-12-26
  • 2022-01-27
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-07
  • 2021-12-10
猜你喜欢
  • 2022-12-23
  • 2021-10-26
  • 2021-08-04
  • 2021-11-23
  • 2021-12-06
  • 2021-07-10
  • 2021-05-22
相关资源
相似解决方案