HDFS之WordCount

1.pom.xml

<?xml version="1.0" encoding="UTF-8"?>

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>

  <groupId>org.example</groupId>
  <artifactId>ls</artifactId>
  <version>1.0-SNAPSHOT</version>

  <name>ls</name>
  <!-- FIXME change it to the project's website -->
  <url>http://www.example.com</url>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
  </properties>
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>4.11</version>
    </dependency>
	<dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-common</artifactId>
      <version>2.6.0</version>
    </dependency>
	<dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-hdfs</artifactId>
      <version>2.6.0</version>
    </dependency>
	<dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-client</artifactId>
      <version>2.6.0</version>
    </dependency>
	<dependency>
      <groupId>org.apache.hadoop</groupId>
      <artifactId>hadoop-mapreduce-client-core</artifactId>
      <version>2.6.0</version>
    </dependency>
	  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.3.2</version>
        <configuration>
          <source>1.8</source>
          <target>1.8</target>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-assembly-plugin</artifactId>
        <configuration>
          <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
          </descriptorRefs>
          <archive>
            <manifest>
              <!--<mainClass>com.aaa.App</mainClass>-->
            </manifest>
          </archive>
        </configuration>
        <executions>
          <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
              <goal>single</goal>
            </goals>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
</project>

2.WCMapper

package org.example.mr.wc;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.LongWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Mapper;

import java.io.IOException;

/**
 * KEYIN:输入的key类型
 * VALUEIN:输入的value类型
 * KEYOUT:输出的key类型
 * VALUEOUT:输出的value类型
 *
 */

public class WCMapper extends Mapper<LongWritable, Text,Text, IntWritable> {
    Text k = new Text();
    IntWritable v = new IntWritable(1);
    @Override
    protected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {
        //1、将文本转化成string
        String line = value.toString();
        //2、将字符串切割
        //  \\s+是空格
        String[] words = line.split("\\s+");
        //3、将每一个单词写出去
        for (String word : words){
            k.set(word);
            context.write(k,v);
        }
    }
}

3.WCReducer

package org.example.mr.wc;

import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.mapreduce.Reducer;

import java.io.IOException;


/**
 * KEYIN:reduce端输入的key类型,即map端输出的key类型
 * VALUEIN:reduce端输入的value类型,即map端输出的value类型
 * KEYOUT:reduce端输出的key类型
 * VALUEOUT:reduce端输出的value类型
 */

public class WCReducer extends Reducer<Text, IntWritable, Text,IntWritable> {
    int sum;
    IntWritable v = new IntWritable();
    @Override
    protected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {
        //reduce接收到的类型大概是这样的  (wish,(1,1,1,1,1,1,1))

        sum=0;
        //遍历迭代器
        for (IntWritable count : values) {
            //对迭代器进行累加求和
            sum+=count.get();
        }
        //将key和value进行写出
        v.set(sum);
        context.write(key,v);
    }
}

4.WCDriver

package org.example.mr.wc;

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


import java.io.IOException;

public class WCDriver {
    public static void main(String[] args) throws IOException, ClassNotFoundException, InterruptedException {
        //1、创建配置文件,创建Job
        Configuration conf = new Configuration();
        Job job = Job.getInstance(conf, "wordcount");
        //2、设置jar的位置
        job.setJarByClass(WCDriver.class);
        //3、设置Map和Reduce的位置
        job.setMapperClass(WCMapper.class);
        job.setReducerClass(WCReducer.class);
        //4、设置Map输出的key,value类型
        job.setMapOutputKeyClass(Text.class);
        job.setMapOutputValueClass(IntWritable.class);
        //5、设置Reduce输出的key,value类型
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        //6、设置输入输出路径
        FileInputFormat.setInputPaths(job,new Path(args[0]));
        FileOutputFormat.setOutputPath(job,new Path(args[1]));

        //7、提交程序运行
        boolean result = job.waitForCompletion(true);
        System.exit(result?0:1);
    }
}

5.写完之后,clean 然后 package

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

6.将胖包直接通过xftp放入虚拟机中

在这里插入图片描述

7.start-all.sh启动hadoop各节点并通过jps确认是否启动成功

在这里插入图片描述

8.hdfs dfs -mkdir /input

在hdfs上创建文件夹input

9.hdfs dfs -put /opt/1.txt /input/1.txt

将文件放入hdfs上的input文件夹下

10.[root@tmh opt]# hadoop jar ls-1.0-SNAPSHOT-jar-with-dependencies.jar org.example.mr.wc.WCDriver /input /output

在这里插入图片描述

11.hdfs dfs -cat /input/1.txt查看原文件内容

在这里插入图片描述

12.hdfs dfs -cat /output/1.txt查看wordcount后的文件内容是否符合

在这里插入图片描述

成功:D

热门文章

暂无图片
编程学习 ·

连续子数组的最大和

一、问题描述 给定一个数组, 找出数组的一个连续子数组, 这个子数组的和最大; 遍历数组,将数组的值加入到sum中, 如果sum大于0, 继续遍历下一个数据, 如果sum小于等于0,说明前面的子数组是无用的,丢弃前面的数组,从下一个数组开始继续遍历; 二、连续子数组的最大和代…
暂无图片
编程学习 ·

Guns V4.0中的代码生成的使用

Guns V4.0的生成代码功能1.创建需要用的表,并在数据库中生成2.点击Guns中的代码生成3.运行生成的sql4.权限配置5.End 1.创建需要用的表,并在数据库中生成 创建自己的表 DROP TABLE IF EXISTS `book`; CREATE TABLE `book` (`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 主键…
暂无图片
编程学习 ·

安卓扫描车牌识别的功能SDK

安卓扫描车牌识别的功能SDK 为了缓解停车压力,在不影响道路使用的情况下,很多地方都在道路上划出一部分停车位,来供车主使用,此之为占道停车。目前国内路边占道停车主要是使用咪表、地磁、手持终端及人工的方式进行管理和收费。对于占道停车管理来说,在手机端集成一个优秀…
暂无图片
编程学习 ·

利用OpenJ9大幅度降低JAVA内存占用

OpenJ9 介绍OpenJ9是一种高性能,可扩展的Java™虚拟机(VM)实现,完全符合Java虚拟机规范。在运行时,VM解释由Java编译器编译的Java字节码。VM充当语言与底层操作系统和硬件之间的翻译器。Java程序需要特定的VM才能在特定的平台(例如Linux,z /OS或Windows™)上运行。Open…
暂无图片
编程学习 ·

Android中给Layout添加点击事件

@Android中给Layout添加点击事件 步骤一:在layout控件中设置clickable和focuseable和id <LinearLayout android:id="@+id/to_anchor_dialog" android:onClick=“onClick” android:clickable=“true” android:layout_width=“match_parent” android:layout_hei…
暂无图片
编程学习 ·

“百度大脑EasyDL经典版”拍了拍你,真实的产业应用get了吗?

在现有业务或方案的基础上,企业如何通过引入AI能力真正做到在降低成本的同时提升效率?质检流水线中,检测人员注意力与体力不支导致的低效、价格高昂的智能检测设备、千变万化的瑕疵形态都迫使企业投入更多成本;电网户外巡检中,越来越密集的电网分布、安全指标提升带来的巡…
暂无图片
编程学习 ·

Linux上远程命令

远程Linux: ssh -l root 192.168.0.1 -l 用户 远程成功了在输密码 远程Windows: rdesktop - u tedu -p tedu 192.168.0.10:3389 -u 用户 -p 密码
暂无图片
编程学习 ·

旋翼机自主着陆-主要技术难点

搜索阶段: 远距离: ​ 目标为几个像素,并且淹没在环境里 ​ 完全没有任何目标或目标偶尔出现,如何进行导航 中远距离 ​ 目标部分容易被遮挡,如何进行目标检测 ​ 在光线条件较差的环境下,目标检测出现误判和无法工作的情况 近距离 ​ 目标在视场中占据较大部分,飞机…
暂无图片
编程学习 ·

redis 缓存击穿,穿透,雪崩及解决方案

一、前言在我们日常的开发中,无不都是使用数据库来进行数据的存储,由于一般的系统任务中通常不会存在高并发的情况,所以这样看起来并没有什么问题,可是一旦涉及大数据量的需求,比如一些商品抢购的情景,或者是主页访问量瞬间较大的时候,单一使用数据库来保存数据的系统会…
暂无图片
编程学习 ·

Android客户端调起地图定位不准,导航路线出现偏差,目的地坐标偏离

前言 APP调起地图导航出现偏差 是什么问题造成的呢 一:可能是模糊定位造成的 二:也有可能 改变了经纬度的数据 解决思路如下 先了解一下调起高德APP的各个参数是什么 百度地图 参数如下:参数名称 描述 是否必选 格式(示例)origin 起点名称或经纬度,或者可同时提供名称和经纬…
暂无图片
编程学习 ·

面试常问的22个Linux命令

1.查找文件find / -name filename.txt根据名称查找/目录下的filename.txt文件。2.查看一个程序是否运行ps –ef|grep tomcat查看所有有关tomcat的进程3.终止线程kill -9 19979终止线程号位19979的线程4.查看文件,包含隐藏文件ls -al5.当前工作目录pwd6.复制文件包括其子文件到…
暂无图片
编程学习 ·

python3 yield关键字简单使用

python3 yield关键字yield简单介绍如何改变文本的样式简单实例为什么需要生成器?实例优势 yield简单介绍 yield <==> 生成器 包含yield语句的函数是一个生成器 生成器每次产生一个值(yield语句),函数被冻结,被唤醒后再产生一个值 生成器是一个不断产生值的函数 如何…
暂无图片
编程学习 ·

Chen08

[Calendar] 实例化Calendar Calendar c = Calendar.getInstance(); 月份是从0开始计数的(0-11) c.set();//日历设置到某一天 c.get();//日历翻到的那一天BigInteger 表示整数、 BigDecimal表示浮点数 对于输出浮点数保留几位小数的问题,可以使用DecimalFormat类, DecimalForm…
暂无图片
编程学习 ·

LeetCode——remove n-th node from end of list

题目描述: 给定一个链表,删除链表的倒数第n个节点并返回链表的头指针 例如, 给出的链表为:1->2->3->4->5, n= 2.↵↵ 删除了链表的倒数第n个节点之后,链表变为1->2->3->5. 备注: 题目保证n一定是合法的 请尝试只用一步操作完成该功能 解题思路: 删除…
暂无图片
编程学习 ·

数据结构的基本概念和常用术语

下面是对android数据结构的基本概念和常用术语的一些理解,大家可以了解学习一下。我收集了一些学习用的资料,其中包含了很多学习,面试,中高进阶fluuter资料,还有很多视频详解,如果有同学想进一步了解,详情请看文末。数据是信息的载体,是描述客观事物属性的数、字符以及…
暂无图片
编程学习 ·

Java数据结构--循环链表

一、简介 1.1 概念对于单链表而言,最后一个结点的地址为空,如果表示最后一个结点的指针域指向头结点,整个链表形成一个环,就构成了单循环链表。 与单链表相比,只是将原来判断指针是否为空变为判断是否是头指针,没有其他的变化。 访问单循环链表某一结点,可以从任何一个结…