hadoop文本词频排序实验报告Word文档格式.docx

上传人:b****1 文档编号:3683047 上传时间:2023-05-02 格式:DOCX 页数:29 大小:383.53KB
下载 相关 举报
hadoop文本词频排序实验报告Word文档格式.docx_第1页
第1页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第2页
第2页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第3页
第3页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第4页
第4页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第5页
第5页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第6页
第6页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第7页
第7页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第8页
第8页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第9页
第9页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第10页
第10页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第11页
第11页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第12页
第12页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第13页
第13页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第14页
第14页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第15页
第15页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第16页
第16页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第17页
第17页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第18页
第18页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第19页
第19页 / 共29页
hadoop文本词频排序实验报告Word文档格式.docx_第20页
第20页 / 共29页
亲,该文档总共29页,到这儿已超出免费预览范围,如果喜欢就下载吧!
下载资源
资源描述

hadoop文本词频排序实验报告Word文档格式.docx

《hadoop文本词频排序实验报告Word文档格式.docx》由会员分享,可在线阅读,更多相关《hadoop文本词频排序实验报告Word文档格式.docx(29页珍藏版)》请在冰点文库上搜索。

hadoop文本词频排序实验报告Word文档格式.docx

操作系统类型:

32位

Java版本:

1.7.0_85

Eclipse版本:

3.8

Hadoop插件:

hadoop-eclipse-plugin-2.6.0.jar

Hadoop:

2.6.1

2.3安装及配置

1.Hadoop配置

1)core-site.xml

<

configuration>

<

property>

name>

hadoop.tmp.dir<

/name>

value>

/value>

description>

Abaseforothertemporarydirectories.<

/description>

/property>

fs.defaultFS<

hdfs:

//inspiron:

9000<

/configuration>

2)hdfs-site.xml

dfs.replication<

1<

dfs.namenode.name.dir<

dfs.datanode.data.dir<

dfs.namenode.secondary.http-address<

127.0.0.1:

50090<

Thesecondarynamenodehttpserveraddressandport.

dfs.webhdfs.enabled<

true<

EnableWebHDFS(RESTAPI)inNamenodesandDatanodes.

3)maprd-site.xml

mapreduce.framework.name<

yarn<

mapreduce.jobhistory.address<

10020<

MapReduceJobHistoryServerIPChost:

port<

mapreduce.jobhistory.webapp.address<

19888<

MapReduceJobHistoryServerWebUIhost:

mapreduce.jobtracker.http.address<

50030<

Thejobtrackerhttpserveraddressandporttheserverwilllistenon.

Iftheportis0thentheserverwillstartonafreeport.

4)yarn-site.xml

ThehostnameoftheRM.<

yarn.resourcemanager.hostname<

inspiron<

yarn.nodemanager.aux-services<

mapreduce_shuffle<

yarn.nodemanager.aux-services.mapreduce_shuffle.class<

org.apache.hadoop.mapred.ShuffleHandler<

TheaddressoftheapplicationsmanagerinterfaceintheRM.<

yarn.resourcemanager.address<

inspiron:

8032<

Theaddressoftheschedulerinterface.<

yarn.resourcemanager.scheduler.address<

8030<

yarn.resourcemanager.resource-tracker.address<

8031<

Theclasstouseastheresourcescheduler.<

yarn.resourcemanager.scheduler.class<

org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler<

5)slaves

inspiron

2.eclipse配置

1)安装hadoop开发插件。

由于本次实验所使用的hadoop版本较新,编译过程中出现问题太多,所以直接使用了官方发布的2.6.0版本的插件,经过测试可以正常使用。

将插件复制至eclipse安装目录下的plugins目录下。

2)进入eclipse->

window->

preferences配置hadoop安装路径

3.新建HadoopLocation

4.配置完成后在ProjectExplore及Map/ReduceLocation窗口可看到如下界面

3.实验设计

3.1设计思路

利用MapReduce框架设计,在Map过程将输入文本拆分成单个的单词,并对单词进行初步统计,将单词及词频组合作为Map过程输出的value值,将Map过程的Key值设为统一固定值。

在Reduce过程获取Map过程的输出,拆分value值,获取并汇总统计出所有单词的词频,根据设定值k对统计单词进行筛选,将词频高于设定值k的单词和词频以键值对的形式存入某个容器中,然后将容器的对象按照词频从高到低的顺序排序后以单词和词频键值对的形式输出。

如此设计,只需要一个MapReduce过程即可完成词频统计并筛选排序输出。

3.2算法设计

1.在Map过程中,重写map类,利用StringTokenizer类,将map方法中的value值中存储的文本,拆分成一个个的单词,将单词进行初步统计,统计得到的结果存入一个Map集合中。

遍历Map集合,将所得单词和词频组成一个字符串,作为Map过程输出的value值,并以<

key,word+split+count>

形式输出。

2.在Reduce过程中,重写setup方法,获取设定词频。

3.对Map过程输出的<

key,word+split+count>

形式的键值对,遍历values,拆分并统计出对应单词的词频,以键值对的形式装入一个Map集合中。

4.遍历存有单词和词频键值对的Map集合,将其中词频大于设定值k的单词和词频存入一个List集合中。

5.利用Collect.sort()重载方法对List集合进行按照词频由高到低顺序的排序。

6.遍历List集合,将经过排序的List集合中存储的单词和词频写入reduce方法的context变量,以单词和词频键值对的形式输出。

3.3程序和类的设计

1.定义TokenizerMapper类继承org.apache.hadoop.mapreduce包中Mapper类,并重写map方法。

然后利用StringTokenizer类,将map方法中的value值中存储的文本,拆分成一个个的单词,进行初步统计后放入Map集合中,遍历Map集合取出单词及对应词频,将单词和词频组合后,以<

的形式作为map方法的结果输出,其余的工作都交由MapReduce框架处理。

publicstaticclassTokenizerMapperextends

Mapper<

Object,Text,Text,Text>

{

privatefinalstaticTextmapValue=newText();

privateTextmapKey=newText("

key"

);

publicvoidmap(Objectkey,Textvalue,Contextcontext)

throwsIOException,InterruptedException{

StringTokenizeritr=newStringTokenizer(value.toString());

Map<

String,Integer>

word2count=newHashMap<

();

while(itr.hasMoreTokens()){

StringnextToken=removeNonLetters(itr.nextToken());

if(!

word2count.containsKey(nextToken))

word2count.put(nextToken,0);

word2count.put(nextToken,word2count.get(nextToken)+1);

}

for(Entry<

entry:

word2count.entrySet()){

mapValue.set(entry.getKey()+"

\001"

+entry.getValue());

context.write(mapKey,mapValue);

}

//去除拆分后字符串中所含非字母字符

publicstaticStringremoveNonLetters(Stringoriginal){

StringBufferaBuffer=newStringBuffer(original.length());

charaCharacter;

for(inti=0;

i<

original.length();

i++){

aCharacter=original.charAt(i);

if(Character.isLetter(aCharacter)){

aBuffer.append(aCharacter);

}

returnnewString(aBuffer);

}

2.定义IntSumReducer类继承org.apache.hadoop.mapreduce包中Reducer类,对Map过程中发送过来的键值对,拆分value值取出单词及对应词频,进行词频统计,筛选出词频高于设定值的单词,并按照词频从高到低的顺序排序后输出。

publicstaticclassIntSumReducerextends

Reducer<

Text,Text,Text,IntWritable>

privateIntWritableoutputValue=newIntWritable();

privateTextoutputKey=newText();

privateintk=0;

@Override

protectedvoidsetup(

Reducer<

.Contextcontext)

super.setup(context);

this.k=Integer.parseInt(context.getConfiguration().get("

k"

));

publicvoidreduce(Textkey,Iterable<

Text>

values,Contextcontext)

for(Textval:

values){

StringvalStr=val.toString();

String[]records=valStr.split("

Stringword=records[0];

intcnt=Integer.parseInt(records[1]);

word2count.containsKey(word))

word2count.put(word,0);

word2count.put(word,word2count.get(word)+cnt);

List<

Pair>

list=newArrayList<

for(Map.Entry<

if(entry.getValue()>

this.k){

Pairp=newPair(entry.getKey(),entry.getValue());

list.add(p);

Collections.sort(list,newComparator<

(){

@Override

publicintcompare(Pairo1,Pairo2){

returno2.getV().compareTo(o1.getV());

});

for(Pairp:

list){

outputKey.set(p.getK());

outputValue.set(p.getV());

context.write(outputKey,outputValue);

1)重写setup方法,获取设定词频,并将其值赋给已声明的变量k。

protectedvoidsetup(

Text,IntWritable,Text,IntWritable>

2)Map过程输出<

key,values>

中key为统一设定值,舍去不用,而values是[word+split+count]形式的集合,重写reduce方法,遍历values按照设定分隔符拆分后,汇总进行统计,得到某个单词的词频。

声明一个Map变量word2count,将统计得到的单词及其词频,以键值对的形式存入word2count中。

Map<

3)声明一个List集合变量list,遍历word2count,根据词频进行筛选,用词频大于k的单词和词频的值初始化新定义的类Pair的对象,然后将对象存入list中。

使用Collect.sort()重载方法对list进行排序。

List<

4)遍历list,将经过排序的集合中存储的单词和词频写入reduce方法的context变量

for(Pairp:

3.主方法main,定义Job对象负责管理和运行一个计算任务,并通过Job的一些方法对任务的参数进行相关的设置。

publicstaticvoidmain(String[]args)throwsException{

Configurationconf=newConfiguration();

Stringmaster="

127.0.0.1"

;

conf.set("

fs.defaultFS"

"

//127.0.0.1:

9000"

hadoop.job.user"

hadoop"

mapreduce.framework.name"

"

yarn"

yarn.resourcemanager.address"

master+"

:

8032"

yarn.resourcemanager.scheduler.address"

8030"

mapred.jar"

wordcount.jar"

String[]otherArgs=newGenericOptionsParser(conf,args)

.getRemainingArgs();

if(otherArgs.length<

3){

System.err.println("

Usage:

wordcount<

in>

[<

...]<

out>

"

System.exit

(2);

Jobjob=newJob(conf,"

wordcount"

job.setMapperClass(TokenizerMapper.class);

job.setReducerClass(IntSumReducer.class);

job.setOutputKeyClass(Text.class);

job.setOutputValueClass(Text.class);

//获取设定值K

for(inti=0;

i<

otherArgs.leng

展开阅读全文
相关资源
猜你喜欢
相关搜索
资源标签

当前位置:首页 > 初中教育 > 政史地

copyright@ 2008-2023 冰点文库 网站版权所有

经营许可证编号:鄂ICP备19020893号-2