Hadoop MapReduce入门实验:WordCount

news2024/11/24 6:32:27

环境:ubuntu 18.04, Hadoop 3.3.5
参考资料:Hadoop官网:MapReduce Tutorial

前置工作

运行Hadoop。
参考:单节点模式,集群模式

单节点模式(for first-time users)

在YARN上以pseudo-distributed模式运行MapReduce任务。

  1. 格式化文件系统
  $ bin/hdfs namenode -format
  1. 启动NameNode守护进程和DataNode守护进程
  $ sbin/start-dfs.sh

在这里插入图片描述

  1. 浏览NameNode的web界面。默认情况下,该地址为http://localhost:9870/
    在这里插入图片描述

  2. 创建执行MapReduce任务所需的HDFS目录:

  $ bin/hdfs dfs -mkdir /user
  $ bin/hdfs dfs -mkdir /user/<username>
  #这里的username我用的是root,具体需要看前面的配置。
  1. 为mapreduce的xml文件新建配置。(如已添加可忽略)
<!-- 
etc/hadoop/mapred-site.xml
-->
<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
        <name>mapreduce.application.classpath</name>
        <value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
    </property>
</configuration>

<!-- 
etc/hadoop/yarn-site.xml
-->
<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>

在这里插入图片描述
在这里插入图片描述

  1. 启动ResourceManager守护进程和NodeManager守护进程:
  $ sbin/start-yarn.sh

在这里插入图片描述

  1. 浏览ResourceManager的web界面。默认情况下,该地址为http://localhost:8088/
    在这里插入图片描述如果这一步没有打开,可能是前面的某个进程没有成功启动,用jps检查一下。下面是正常启动的所有进程。如DataNode有缺失,可以参考我的这篇blog解决。
    在这里插入图片描述
  2. 准备工作就绪,congrats!接下来我们进入正题。

WordCount v1.0

源代码(出自hadoop官网):

import java.io.IOException;
import java.util.StringTokenizer;

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

public class WordCount {

  public static class TokenizerMapper
       extends Mapper<Object, Text, Text, IntWritable>{

    private final static IntWritable one = new IntWritable(1);
    private Text word = new Text();

    public void map(Object key, Text value, Context context
                    ) throws IOException, InterruptedException {
      StringTokenizer itr = new StringTokenizer(value.toString());
      while (itr.hasMoreTokens()) {
        word.set(itr.nextToken());
        context.write(word, one);
      }
    }
  }

  public static class IntSumReducer
       extends Reducer<Text,IntWritable,Text,IntWritable> {
    private IntWritable result = new IntWritable();

    public void reduce(Text key, Iterable<IntWritable> values,
                       Context context
                       ) throws IOException, InterruptedException {
      int sum = 0;
      for (IntWritable val : values) {
        sum += val.get();
      }
      result.set(sum);
      context.write(key, result);
    }
  }

  public static void main(String[] args) throws Exception {
    Configuration conf = new Configuration();
    Job job = Job.getInstance(conf, "word count");
    job.setJarByClass(WordCount.class);
    job.setMapperClass(TokenizerMapper.class);
    job.setCombinerClass(IntSumReducer.class);
    job.setReducerClass(IntSumReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);
    FileInputFormat.addInputPath(job, new Path(args[0]));
    FileOutputFormat.setOutputPath(job, new Path(args[1]));
    System.exit(job.waitForCompletion(true) ? 0 : 1);
  }
}
  1. 设定环境变量JAVA_HOME(之前应该已经设置了),HADOOP_CLASSPATH,路径如下:
# 在~/.bashrc追加以下环境变量,JAVA_HOME根据实际情况设置
export JAVA_HOME=/usr/java/default
export PATH=${JAVA_HOME}/bin:${PATH}
export HADOOP_CLASSPATH=${JAVA_HOME}/lib/tools.jar
  1. 编译WordCount.java文件,生成jar
  $ bin/hadoop com.sun.tools.javac.Main WordCount.java

运行出错:
在这里插入图片描述
上网搜了一通,最后突然醒悟,修改配置文件之后,忘记source ~/.bashrc了。配置生效后,可以成功编译!
在这里插入图片描述
接着执行:

$ jar cf wc.jar WordCount*.class

路径下的文件如下所示。
在这里插入图片描述

  1. 设定两个HDFS的输入输出路径,分别是:/user/root/wordcount/input/user/root/wordcount/output
    在这里插入图片描述
  2. 在代码目录下创建2个文件,分别是file01file02,里面的内容是:
    在这里插入图片描述
  3. 上传这两个文件到HDFS的input目录下。
  $ hdfs dfs -put file01 file02 wordcount/input
  
  $ hadoop fs -cat /user/joe/wordcount/input/file01
  Hello World Bye World

  $ hadoop fs -cat /user/joe/wordcount/input/file02
  Hello Hadoop Goodbye Hadoop
  1. 运行。
  $ hadoop jar wc.jar WordCount /user/root/wordcount/input /user/root/wordcount/output

报错。
在这里插入图片描述
尝试将output目录删掉:hdfs dfs -rm -r /user/root/wordcount/output
在这里插入图片描述
重新执行。成功运行。
在这里插入图片描述

  1. 查看输出结果。
  $ hadoop fs -cat /user/root/wordcount/output/part-r-00000

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/596855.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Istio 实现 ext-authz 外部扩展鉴权以及对接基于 k8s 的微服务

Istio 实现 ext-authz 外部扩展鉴权以及对接基于 k8s 的微服务 可以实现基于 redis 的 token 鉴权以及实现 rbac 鉴权。 转载请注明来源&#xff1a;https://janrs.com/vrsr Istio 的外部鉴权本质是基于 Envoy 实现的&#xff0c;直接看 Envoy 的代码&#xff0c;链接地址&…

Opencv 2

这里写目录标题 图像阈值平滑处理形态学 腐蚀操作膨胀操作开运算和闭运算梯度运算礼帽和黑帽图像梯度 sobel算子scharr算子canny边缘检测图像金字塔图像轮廓绘制轮廓轮廓特征轮廓近似边界矩形 模板匹配 图像阈值 平滑处理 均值滤波 blur cv2.blur(img,(3,3)) 相当于平均卷积…

基于Wi-Fi指纹匹配的室内定位方法(附代码)

引言 室内定位技术已广泛应用于商场导航、智能家居、人员搜救等领域&#xff0c;具有不可估量的商业价值和非常广阔的应用前景。全球导航卫星系统&#xff08;GNSS&#xff09;可以为室外定位提供良好的定位精度&#xff0c;然而在室内环境下卫星信号的衰减使得室内的位置信息…

day43|动态规划6-完全背包及其应用-零钱兑换II-组合总和IV

完全背包 前情提要&#xff1a; 0-1背包指的是给定背包重量&#xff0c;将物品放入背包中&#xff0c;使得背包中的物品达到最大的价值。&#xff08;每个物品只能往其中放一次&#xff09; 在0-1背包问题中&#xff0c;第二层for循环需要是倒序遍历才可以保证每个物品只使用一…

Pandas使用技巧

Pandas 是一个强大的数据分析 Python 库&#xff0c;提供了一系列用于数据清洗、转换、分析和可视化的 API。在使用 Pandas 进行数据处理时&#xff0c;常见的指令包括&#xff1a; 数据读取和解析 read_csv()&#xff1a;用于读取 CSV、Excel等格式的数据文件&#xff0c;并将…

大数据:HDFS存储原理,fsck命令查看文件副本状态,namenode元数据,edits流水账,fsimage合并,hdfs读取数据

大数据&#xff1a;HDFS存储原理&#xff0c;fsck命令查看文件副本状态&#xff0c;namenode元数据&#xff0c;edits流水账&#xff0c;fsimage合并&#xff0c;hdfs读取数据 2022找工作是学历、能力和运气的超强结合体&#xff0c;遇到寒冬&#xff0c;大厂不招人&#xff0…

django业务流程配置

前言&#xff1a;相信看到这篇文章的小伙伴都或多或少有一些编程基础&#xff0c;懂得一些linux的基本命令了吧&#xff0c;本篇文章将带领大家服务器如何部署一个使用django框架开发的一个网站进行云服务器端的部署。 文章使用到的的工具 Python&#xff1a;一种编程语言&…

【MySQL】如何速通MySQL(2)

&#x1f4cc;前言&#xff1a;本篇博客介绍如何速通MySQL的第二篇&#xff0c;主要介绍Mysql中主要的基础的入门&#xff0c;学习MySQL之前要先安装好MySQL&#xff0c;如果还没有安装的小伙伴可以看看博主前面的博客&#xff0c;里面有详细的安装教程。或者看一下下面这个链接…

结构方程模型(SEM)以及用R语言实现

目录 结构方程模型概述 结构方程模型匹配 1.协方差SEM 2.分段SEM 在R语言中实现sem进行结构方程建模和路径图可视化 – 拓端tecdat 结构方程模型是一个线性模型框架&#xff0c;它对潜变量同时进行回归方程建模。 ​​​​​​​在R语言中实现SEM进行结构方程建模和路径图…

VPP 编译记录

目录 虚拟机安装 VPP编译 下载一些工具 下载vpp源码 编译 首次构建 非首次直接编译 虚拟机安装 由于使用的统信系统作为宿主机器&#xff0c;在上面貌似只有VM virtualBox软件&#xff0c;先在应用商店安装此应用。 下载ubuntu 64位镜像 一开始没注意下载了32位的系统…

基于springboot_vue的学生在线选课java教学质量评价系统

对教师教学质量进行客观公正的评价,是一项十分严肃和重要的工作。是引导教师进行教学方法改进&#xff0c;提高教学质量的重要手段。它以教师的教学活动为主要评价对象&#xff0c;通过教学评价,发现存在的问题,了解学生的实际学习状况&#xff0c;明确教学改进的努力方向。但是…

【算法系列之二叉树II】leetcode112. 路径总和

257. 二叉树的所有路径 力扣题目链接 给你一个二叉树的根节点 root &#xff0c;按 任意顺序 &#xff0c;返回所有从根节点到叶子节点的路径。 叶子节点 是指没有子节点的节点。 输入&#xff1a;root [1,2,3,null,5] 输出&#xff1a;["1->2->5","…

解决spark程序 Permission denied: user=<username>, access=WRITE...等常见hive权限报错

Permission Denied Permission Denied: 这是最常见的错误消息之一&#xff0c;表示当前用户没有足够的权限执行写入操作。报错信息可能类似于&#xff1a; org.apache.hadoop.security.AccessControlException: Permission denied: user<username>, accessWRITE, inode&…

Linux教程——操作系统是什么,操作系统概述

Linux 也是众多操作系统之一&#xff0c;要想知道 Linux 是什么&#xff0c;首先得说一说什么是操作系统。 计算机是一台机器&#xff0c;它按照用户的要求接收信息、存储数据、处理数据&#xff0c;然后再将处理结果输出&#xff08;文字、图片、音频、视频等&#xff09;。计…

Linux高级---k8s安全认证

文章目录 一、访问控制概述1、客户端2、认证、授权与准入控制 二、认证管理1、认证方式2、HTTPS认证大体分为3个过程 三、授权管理1、授权策略2、RBAC3、Role、ClusterRole4、RoleBinding、ClusterRoleBinding5、RoleBinding引用ClusterRole进行授权6、实战&#xff1a;创建一个…

Java线程池总结

背景 Java线程池的写法和参数是面试中出现频率很高的基础题。越是基础的东西&#xff0c;特别是对高阶职位的面试者&#xff0c;需要回答的符合自己面试的职位等级。 这里也不能说是一个多么好的答案&#xff0c;只是说如果是我&#xff0c;我怎么回答&#xff0c;仅供参考。…

Java --- springboot3依赖管理和自动配置机制

目录 一、依赖管理机制 二、自动配置机制 一、依赖管理机制 &#x1f695;、为什么导入starter-web所有相关依赖都导入进来&#xff1f; ①、开发什么场景&#xff0c;导入什么场景启动器。 ②、maven依赖传递原则。A-B-C&#xff1a; A就拥有B和C ③、导入 场景启动器。 场…

JavaScript 发展的前世今生

专栏介绍 本专栏主要用作于开放性知识点分享学习&#xff0c;其主要知识点范围是 以围绕 原生 JavaScript 语法 从基础知识到高阶语法阶段的学习分享。 导语&#xff1a; 既然博主&#xff0c;计划将此专栏打造为 JavaScript 的知识点学习分享集结地。所以&#xff0c;本章节就…

奥威BI,适合中国电商的大数据分析平台

电商数据分析做得好不好&#xff0c;除了分析思维这类主要因素外&#xff0c;大数据分析平台的选择也尤为重要。从电商数据分析实际体验来看&#xff0c;电商行业需要大数据分析平台需满足海量数据秒分析、数据直观易懂、操作简单易上手这三大基础要求&#xff0c;如能提供系统…

Tomcat下载安装以及配置

目录 tomcat的下载安装 修改控制台乱码 idea配置tomcat tomcat的下载安装 到tomcat的官网https://tomcat.apache.org/下载所需版本&#xff0c;我们下载的tomcat必须要和我们的jdk相匹配否则会导致tomcat运行和部署的时候出错&#xff0c;挑选tomcat的版本的时候参考下图 …