Hadoop:统计文本中单词熟练MapReduce程序

  这是搭建hadoop环境后的第一个MapReduce程序;

  基于python的脚本;

  1 map.py文件,把文本的内容划分成单词:

#!/bin/pythonimport sys

for line in sys.stdin:    data_list = line.strip().split()    for i in range(0, len(data_list)):        print data_list[i]        

  

  2 reduce文件,把统计单词出现的次数;

#!/bin/python
import sys
word_dict = {}
for line in sys.stdin:
    v = line.strip()
    if word_dict.has_key(v):
        word_dict[v] += 1
    else:
        word_dict[v] = 1

for key in word_dict:
    print key + "\t" + str(word_dict[key])
        

  3 调用脚本:指定输出目录OUTPUT;

  调用支持多语言的streaming的编程环境,参数-input是输入的log文件,为了用mapreduce模式统计这个文件每个单词出现的次数;-output是输出路径;-mapper是mapper编译 此处是python语言;-reducer是reduce编译语法;-file是mapper文件路径和reduce文件路径;-numReduceTaskers 是使用的子tasker数目,这里是3,代表分成了3了tasker分布式的处理计数任务;

#!/bin/bash

OUTPUT=/home/apm3/outdir
hadoop fs -rmr $OUTPUT
hadoop jar /usr/local/hadoop/share/hadoop/tools/lib/hadoop-streaming-2.7.2.jar -input /opt/mapr/logs/warden.log -output $OUTPUT -mapper "python map.py" -reducer "python reduce.py" -file map.py -file reduce.py -numReduceTasks 3
 

  bash -x start.sh 会在输出路径中生成三个输出文件,及三分ReduceTasks 输出的结果;(MapReduce 模式主要做了shuffle和sort任务,shuffle是按照hashkey分配单词到子tasker中,而sort是排序的功能。)

  代码下载: https://github.com/rongyux/Hadoop_WordCount

时间: 2024-10-13 23:25:54

Hadoop:统计文本中单词熟练MapReduce程序的相关文章

采用二叉搜索树来统计文本中单词出现的频率

把几个主要的函数组合起来即可: 1.从文本读取单个单词(去掉空格,特殊符号等) 2.用读出来的单词去更新搜索二叉树的节点(涉及二叉树的构建问题,递归) 3.中序遍历,来递归打印二叉树的每个节点 代码: #include <stdio.h> #include <stdlib.h> #include <string.h> #include <ctype.h> #define MAXWORD 1000 //单词出现频率的统计哦 struct tnode { cha

shell统计文本中单词的出现次数

Ubuntu14.04 给定一个文本,统计其中单词出现的次数 # solution 1 grep与awk配合使用,写成一个sh脚本 fre.sh sh fre.sh wordfretest.txt #! /bin/bash# solution 1 if [ $# -eq 0 ] then echo "Usage:$0 args error" exit 0 fi if [ $# -ge 2 ] then echo "analyse the first file $1"

【ThinkingInC++】4、统计txt文本中单词的个数

其中要使用的txt文本! header defines classes for file IO, including ifstream, whose constructor takes a file name an argument. The expression f >> word extracts the next non-whitespace token from the file and returns the stream. When a stream appears in a bo

简单的方法来统计文件中单词和各种标点符号个数

此小程序使用最基本的方法来统计文本中英文单词的个数,想法也比较简单: (1)从文本中文本读取内容,使用BufferedReader类每次读取一行并添加到StringBuffer类型变量中, 最后StringBuffer类型变量即为文本的内容,如StringBuffer sb: (2)把sb的内容全部转化成小写字母(或大写字母): (3)统计文件中各种标点符号个数: (4)把所有标点符号统一替换成一种标点符号,如替换成逗号 (5)替换后的文本使用字符串的分割函数来获取返回的字符串数组的长度,此长度

Win7下Eclipse中运行远程MapReduce程序

1.hadoop插件的参数配置 2.运行时的参数 3.运行结果 Win7下Eclipse中运行远程MapReduce程序,布布扣,bubuko.com

java统计文本中某个字符串出现的次数

原文: java统计文本中某个字符串出现的次数 源代码下载地址:http://www.zuidaima.com/share/1550463297014784.htm 统计文本中某个字符串出现的次数或字符串中指定元素出现的次数 文件样本: 程序查找的上此文件带"a"的字符在多少次 结果: package com.zuidaima.util.string; import java.io.*; /** * @author www.zuidaima.com **/ public class C

Window7中Eclipse运行MapReduce程序报错的问题

按照文档:http://www.micmiu.com/bigdata/hadoop/hadoop2x-eclipse-mapreduce-demo/安装配置好Eclipse后,运行WordCount程序报错: log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.MutableMetricsFactory). log4j:WARN Please initialize the log4j

如何使用linux命令统计文本中某个单词的出现频率

使用这个命令查出文本中的单词出现频率按照由高到底排序 cat words.txt |tr -cs "[a-z][A-Z]" "[\012*]"|tr A-Z a-z|sort|uniq -c|sort -k1nr -k2|head -10 但是有时我们想查找出某一个单词的出现频率这时我们可以使用如下几个命令 文件名称:file  查找单词名称:word 操作命令: (1)more file | grep -o word | wc -l (2)cat file | g

Hadoop日记Day16---命令行运行MapReduce程序

一.代码编写 1.1 单词统计 回顾我们以前单词统计的例子,如代码1.1所示. 1 package counter; 2 3 import java.net.URI; 4 5 import org.apache.hadoop.conf.Configuration; 6 import org.apache.hadoop.fs.FileSystem; 7 import org.apache.hadoop.fs.Path; 8 import org.apache.hadoop.io.LongWrita