• 博由
  • 环境
  • WordCount操作步骤
    • 搭建本地Hadoop环境

      • 配置core-sitexml
      • 配置hdfs-sitexml
      • 配置mapred-sitexml
      • 启动本地环境
    • 搭建ideamaven环境
      • 配置pomxml
    • 具体代码实现
    • 运行
      • 输入文件 wordtxt
      • 输出文件output
  • 参考

博由

    上一篇简单介绍了通过Docker简单搭建Hadoop集群环境,终于可以简单试试开发环境的操作,因此先感受一下Hadoop的开发。通过简单的单词统计来展示,还未正式学习Hadoop代码库,先直观感受一下。

环境

    [1] 系统:Mac Osx [2] hadoop环境:本地单机环境 version:2.7.1[3] 语言: java[4] 开发工具:idea + maven

WordCount操作步骤

搭建本地Hadoop环境

配置core-site.xml

<configuration><property><name>fs.default.name</name><value>hdfs://localhost:9000</value></property><property><name>hadoop.tmp.dir</name><value>file:/Users/wangzhiping/hadoop-2.7.1/tmp</value></property></configuration>

配置hdfs-site.xml

<configuration><!-- 这里配置1就行,因为只是单机环境 --><property><name>dfs.replication</name><value>1</value></property><property><name>dfs.namenode.name.dir</name><value>file:/Users/wangzhiping/hadoop-2.7.1/namenodedir</value></property><property><name>dfs.datanode.name.dir</name><value>file:/Users/wangzhiping/hadoop-2.7.1/datanodedir</value></property>
</configuration>

配置mapred-site.xml

<configuration><property><name>mapred.job.tracker</name><value>localhost:9001</value></property>
</configuration>

启动本地环境

运行:start-all.sh 通过jps命令查看运行情况是否启动成功
% jps                                                                                                                                                                                                                                                                                                                !10061
96434 Launcher
95812 NameNode
96004 SecondaryNameNode
96551 Jps
96118 ResourceManager
95898 DataNode
93917 RemoteMavenServer
96206 NodeManager
这样就标识已经成功启动本地环境。

搭建idea+maven环境

    使用idea创建maven项目即可,命名为: hadoop-hello(按照新建的步骤来进行即可)

配置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>hadoop-learn</groupId><artifactId>hello</artifactId><version>1.0-SNAPSHOT</version><dependencies><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-mapreduce-client-common</artifactId><version>2.7.1</version></dependency><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-common</artifactId><version>2.7.1</version></dependency><!-- https://mvnrepository.com/artifact/org.apache.hadoop/hadoop-core --><dependency><groupId>org.apache.hadoop</groupId><artifactId>hadoop-core</artifactId><version>1.2.1</version></dependency></dependencies>
</project>

在这个过程中,遇到一个小插曲,见:

Exception in thread "main" java.io.IOException: Cannot initialize Cluster. Please check your configuration for mapreduce.framework.name and the correspond server addresses.  at org.apache.hadoop.mapreduce.Cluster.initialize(Cluster.java:120)  at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:82)  at org.apache.hadoop.mapreduce.Cluster.<init>(Cluster.java:75)  at org.apache.hadoop.mapreduce.Job$9.run(Job.java:1238)  at org.apache.hadoop.mapreduce.Job$9.run(Job.java:1234)
解决方式是:hadoop-mapreduce-client-common 这个包没有导入导致,只需要导入包即可(在maven添加下载完成即可)

具体代码实现

package com.hadoop.hello.wordcount;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.mapred.MapReduceBase;
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;
import org.apache.tools.ant.filters.TokenFilter;import java.io.IOException;
import java.util.StringTokenizer;/*** 思路:* 第一步:将每一行的文本进行分词,并且形成(word, 1)的元素形式; Mapper过程* 第二步:combineKey 将相同的word做聚合操作,value相加即可;  Reducer过程* Created by wangzhiping on 17/1/5.*//*** 分词Mapper* 读取每一行的数据 输入 Text, Text 输出 Text IntWritable (单词,次数)的形式*/
class WordTokenizerMapper extends Mapper<Object, Text, Text, IntWritable>{// notice: Mapper的四个参数,前两个是输入参数(key,value),后两个参数是输出(key,value)// 在这个例子中,第一参数是每行的字符位置索引,value是每一行文本@Overrideprotected void map(Object key, Text value, Context context) throws IOException, InterruptedException {System.out.println("key: " + key + ",value: " + value);// 逗号分词StringTokenizer st = new StringTokenizer(value.toString(), " ");// 循环取词while(st.hasMoreTokens()){// 设置每个单词(word, 1)的形式context.write(new Text(st.nextToken()), new IntWritable(1));}}
}/*** reduce分词结果* 输入:List(<Text, IntWritable>)* 输出:Set(<Text, IntWritable>)*/
class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable> {/*** 计算单词个数* @param key mapper过程中的输出key* @param values combine相同key的value* @param context * @throws IOException* @throws InterruptedException*/@Overrideprotected void reduce(Text key, Iterable<IntWritable> values, Context context) throws IOException, InterruptedException {int count = 0;for (IntWritable value : values){count += value.get();}context.write(key, new IntWritable(count));}
}public class WordCount {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(WordTokenizerMapper.class);job.setReducerClass(WordCountReducer.class);job.setCombinerClass(WordCountReducer.class);job.setOutputKeyClass(Text.class);job.setOutputValueClass(IntWritable.class);// 设置输入文件地址FileInputFormat.addInputPath(job, new Path("/Users/wangzhiping/workspace/hadoop-hello/src/main/resources/word.txt"));// 设置输出文件地址FileOutputFormat.setOutputPath(job, new Path("/Users/wangzhiping/workspace/hadoop-hello/src/main/resources/output"));System.exit(job.waitForCompletion(true) ? 0 : 1);}}

运行

输入文件 word.txt

hello world hello world hello world
hello world hello world
hello world
hello world hello world hello world hello world

输出文件output

输出结果:part-r-00000 文件内容
hello   10
world   10

参考

[1] http://blog.csdn.net/panguoyuan/article/details/38727273

小试牛刀 - WordCount相关推荐

  1. 2021年大数据Spark(三十六):SparkStreaming实战案例一 WordCount

    目录 SparkStreaming实战案例一 WordCount 需求 准备工作 代码实现 第一种方式:构建SparkConf对象 第二种方式:构建SparkContext对象 完整代码如下所示: 应 ...

  2. 2021年大数据Spark(二十七):SparkSQL案例一花式查询和案例二WordCount

    目录 案例一:花式查询 案例二:WordCount 基于DSL编程 基于SQL编程 具体演示代码如下: 案例一:花式查询 package cn.itcast.sqlimport org.apache. ...

  3. Spark-Spark setMaster WordCount Demo

    Spark setMaster源码 /*** The master URL to connect to, such as "local" to run locally with o ...

  4. Ubantu下hadoop运行第一个例子wordcount过程

    Ubantu12.04下hadoop-1.2.1运行第一个例子wordcount过程,分享一下 将WordCount.java文件放在Hadoop安装目录下,并在安装目录下创建输入目录input,目录 ...

  5. Node.js开发WEB项目后端接口API,基于mysql5.7数据库(小试牛刀)

    项目结构 main.js(入口文件,开启9999端口监听,实现RESTful风格接口访问) const express = require("express"); const ap ...

  6. WordCount扩展与优化

    合作者:201631062327,201631062128 码云地址:https://gitee.com/LIUJIA6/WordCount3 一:项目说明 本次项目是在上次作业WorldCount的 ...

  7. 初学Hadoop之图解MapReduce与WordCount示例分析

    Hadoop的框架最核心的设计就是:HDFS和MapReduce.HDFS为海量的数据提供了存储,MapReduce则为海量的数据提供了计算. HDFS是Google File System(GFS) ...

  8. java8 wordcount_Spark2.x与Java8下WordCount示例

    spark深度学习指南+进阶实战2册 123.9元 包邮 (需用券) 去购买 > 不用 lambda 的基础版 import org.apache.spark.api.java.JavaPair ...

  9. 006 Spark中的wordcount以及TopK的程序编写

    1.启动 启动HDFS 启动spark的local模式./spark-shell 2.知识点 textFile: def textFile( path: String, minPartitions: ...

最新文章

  1. 日订单50万级分布式事务
  2. 美国国家科学院发布:材料有哪些研究前沿?
  3. OOP三大特性之多态
  4. Oracle 数据库查看具有sysdba系统权限用户,设置、重置sys用户密码
  5. linux-centos下源代码安装subversion (svn)
  6. 2批量批量查询数据插入数据_你还在利用复制批量插入数据吗?一个oracle命令助你批量插入数据...
  7. android 引入 .so,android studio引入so库方法(示例代码)
  8. Linux中查看负载
  9. Tachyon更名为 Alluxio,并发布1.0版本
  10. 美军开发远程人脸识别系统,实现1公里内目标识别
  11. OpenCV中图像轮廓检测
  12. java matcher方法_Java正则表达式入坑指南:正则表达式使用的类有哪些吗?
  13. 个人业务网站php源码,最新个人发卡网源码,PHP运营级个人自动发卡平台完整源码...
  14. 【内网学习笔记】14、发现主机缺失补丁
  15. Tableau豆瓣电影数据项目实战练习1
  16. 微信屏蔽抖音?扎克伯格登报发表道歉信
  17. “机器学习实战“刻意练习2/8周
  18. 配置接口IP地址并通过静态路由、默认路由配置实现全网互通!
  19. 30岁之前一定要知道的7个金融概念-千氪
  20. 解决警告:Unable to preventDefault inside passive event listener due to target being treated as passive.

热门文章

  1. Error:Module ‘javase‘ production: java.lang.ClassCastException:
  2. 关键字驱动和数据驱动
  3. 什么是过拟合(overfitting)
  4. scanf()函数详解
  5. 技术与市场脱钩?90%的程序员都错了!
  6. Apache Tez
  7. Self-Supervised Deep Blind Video Super-Resolution
  8. springCloud之Netflix完整学习
  9. python局域网通信_python如何实现网络通信
  10. android的IBINDER机制