eclipse通过maven进行打包并且对hdfs上的文件进行wordcount

在eclipse中配置自己的maven仓库

1.安装maven(用于管理仓库,jar包的管理)

-1.解压maven安装包

-2.把maven添加到环境变量/etc/profile

-3.添加maven目录下的conf/setting.xml文件到~/.m2文件夹下

2.安装eclipse

-1.解压eclipse安装文件

-2.执行eclipse.inst文件

-3.按步骤操作

3.在eclipse中配置自己的maven仓库

1.window>>perfoemence>>maven>>installations(添加使用的maven目录,步骤1.1)

add>>选择1.1中的路径

2.window>>perfoemence>>maven>>User settings(选择本地仓库的配置文件,步骤1.3)

Uesr Settings>>选择1.3中的文件

4.新建maven的项目

-new>>maven project>>创建一个简单的项目>>next>>next>>Group Id:域名倒置>>Artfact Id:项目名>>finish

-修改pom.xml文件

编写一个小程序进行Test

在src/main/java下新建hadoop_test类

package hadoop_test;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.conf.Configured;

import org.apache.hadoop.util.Tool;

import org.apache.hadoop.util.ToolRunner;

public class ConfTest extends Configured implements Tool{

public int run(String[] arg0) throws Exception {
    // TODO Auto-generated method stub
    Configuration conf =getConf();
    return 0;
}

public static void main(String[] args) throws Exception {
    System.out.println("hello world!!!");
    int status = ToolRunner.run(new ConfTest(), args);
    System.exit(status);
}

}

打包,在终端进入该Java Project的pom.xml所在文件夹,执行mvn install clean,在target文件夹中可以找到一个jar包(hadoop_test-0.0.1-SNAPSHOT.jar),若是jarhadoop jar hadoop_test-0.0.1-SNAPSHOT.jar hadoop_test/ConfTest 指令执行输出hello world则该基本上成功了。同时也可测试下系统自带的wordcount类,具体方法是$ ./bin/$ hadoop jar $HADOOP_PREFIX/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount input output

最后写程序读取hdfs上的文件进行mapreduce并将结果传回hdfs

类:package hadoop_test;

import java.io.IOException;

import java.util.StringTokenizer;

import org.apache.hadoop.conf.Configuration;

import org.apache.hadoop.conf.Configured;

import org.apache.hadoop.fs.Path;

import org.apache.hadoop.io.IntWritable;

import org.apache.hadoop.io.LongWritable;

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.TextInputFormat;

import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;

import org.apache.hadoop.util.Tool;

import org.apache.hadoop.util.ToolRunner;

public class WordCount extends Configured implements Tool{

static class WordCountMapper

extends Mapper

    /**
     * key:当前读取行的偏移量
     * value:当前读取的行
     * context:map方法执行时上下文
     */
    @Override
    protected void map(LongWritable key, Text value, Context context)
            throws IOException, InterruptedException {
        // TODO Auto-generated method stub
        StringTokenizer words=
                new StringTokenizer(value.toString(), " ");

        while(words.hasMoreTokens()){
            word.set(words.nextToken());
            context.write(word, one);
        }
    }
}

static class WordCountReducer extends Reducer<Text, IntWritable, Text, IntWritable>{
    private IntWritable counter = new IntWritable();
    /**
     * key:待统计的word
     * values:待统计word的所有统计标识
     * context:reduce方法执行时的上下文
     */
    @Override
    protected void reduce(Text key,
            Iterable<IntWritable> values,
            Reducer<Text, IntWritable, Text, IntWritable>.Context context) throws IOException, InterruptedException {
        // TODO Auto-generated method stub
        int count=0;
        for(IntWritable one:values){
            count+=one.get();
        }
        counter.set(count);
        context.write(key, counter);
    }
}

// @Override

public int run(String[] args) throws Exception {

//获得程序运行时的配置信息

Configuration conf=getConf();

String inputPath=conf.get("input");

String outputPath=conf.get("output");

    //构建新的作业
    Job job = Job.getInstance(conf, "Word Frequence Count");
    job.setJarByClass(WordCount.class);

    //给job设置mapper类及map方法输出的键值类型
    job.setMapperClass(WordCountMapper.class);
    job.setMapOutputKeyClass(Text.class);
    job.setMapOutputValueClass(IntWritable.class);

    //给job设置reducer类及reduce方法输出的键值类型
    job.setReducerClass(WordCountReducer.class);
    job.setOutputKeyClass(Text.class);
    job.setOutputValueClass(IntWritable.class);

    //设置数据的读取方式(文本文件)及结果的输出方式(文本文件)
    job.setInputFormatClass(TextInputFormat.class);
    job.setOutputFormatClass(TextOutputFormat.class);

    //设置输入和输出目录
    TextInputFormat.addInputPath(job, new Path(inputPath));
    TextOutputFormat.setOutputPath(job, new Path(outputPath));

    //将作业提交集群执行
    return job.waitForCompletion(true)?0:1;
}

public static void main(String[] args) throws Exception{
    int status = ToolRunner.run(new WordCount(), args);
    System.exit(status);
}

}

执行hadoop jar hadoop_test-0.0.1-SNAPSHOT.jar hadoop_test/WordCount -Dinput=hdfs:/usr/hadoop/maven* -Doutput=hdfs:/usr/hadoop/maven1指令(注意此时的文件路径和/usr/local区分开)

好了,到这里基本上我们的环境就搭建成功了,还有些细节的这几天会慢慢补充的。

参考地址:maven配置部分:https://www.cnblogs.com/cenzhongman/p/7093672.html 侵删

时间: 2024-08-05 09:04:44

eclipse通过maven进行打包并且对hdfs上的文件进行wordcount的相关文章

Eclipse 上传 删除 下载 分析 hdfs 上的文件

本篇讲解如何通过Eclipse 编写代码去操作分析hdfs 上的文件. 1.在eclipse 下新建Map/Reduce Project项目.如图:  项目建好后,会默认加载一系列相应的jar包. 下面还有很多包. 2.我们新建Java 类就可以了.代码如下: package org.hadoop.examples; import java.io.BufferedInputStream; import java.io.FileInputStream; import java.io.IOExcep

hadoop的API对HDFS上的文件访问

这篇文章主要介绍了使用hadoop的API对HDFS上的文件访问,其中包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,需要的朋友可以参考下hdfs文件操作操作示例,包括上传文件到HDFS上.从HDFS上下载文件和删除HDFS上的文件,大家参考使用吧 复制代码 代码如下:import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.*; import java.io.File;import ja

【转载】HDFS 上传文件不均衡和Balancer太慢的问题

向HDFS上传文件,如果是从某个datanode开始上传文件,会导致上传的数据优先写满当前datanode的磁盘,这对于运行分布式程序是非常不利的. 解决的办法: 1.从其他非datanode节点上传 可以将hadoop的安装目录复制一份到一个不在集群中的节点(直接从非datanode的namenode上传也可以,但是这样不太好,会增加namenode的负担,并且时间长了会让namenode上放了各种乱七八糟的文件),在这个节点上不启动任何hadoop进程,但是可以当作客户端使用.上传文件到集群

[Spark][Python]对HDFS 上的文件,采用绝对路径,来读取获得 RDD

对HDFS 上的文件,采用绝对路径,来读取获得 RDD: In [102]: mydata=sc.textFile("file:/home/training/test.txt")17/09/24 06:31:04 INFO storage.MemoryStore: Block broadcast_30 stored as values in memory (estimated size 230.5 KB, free 2.4 MB)17/09/24 06:31:04 INFO stora

HDFS 上传文件不均衡和Balancer太慢的问题

向HDFS上传文件,如果是从某个datanode开始上传文件,会导致上传的数据优先写满当前datanode的磁盘,这对于运行分布式程序是非常不利的. 解决的办法: 1.从其他非datanode节点上传 可以将hadoop的安装目录复制一份到一个不在集群中的节点(直接从非datanode的namenode上传也可以,但是这样不太好,会增加namenode的负担,并且时间长了会让namenode上放了各种乱七八糟的文件),在这个节点上不启动任何hadoop进程,但是可以当作客户端使用.上传文件到集群

eclipse工具maven项目打包文件不是最新修改的

1.问题描述:maven项目,完成一些功能开发后,在进行打包更新服务器系统时,本地eclipse工具对文件打成jar包操作,更新到服务器上没有修改的效果,包括打包整个工程为一个war包,也是有同样问题,不是最新的文件: 2.问题排查解决: (1).多次打包发现还是没有效果,打包方式没有问题,排查发现,打包到服务器上的相关代码文件的最新日期显示还是本次改动之前的原先的日期,说明没有打包到本地开发环境中最新的代码文件,百度一圈没有讲这个的,多次打包无果, 如我本地这个代码文件提交svn之后,日期变为

maven 项目打包时无法解析读取properties文件

在做项目时遇见一个问题,无法解析properties文件的 内容 异常为 Could not resolve placeholder ......... 在此之前均有做相关的 配置 但是从未出现过如上异常,困惑了很久,最后把 war包提取出来得知   properties文件未被加载进项目中,因此无法识别. 但这的原因是为什么呢   ,原来此项目采用的是maven配置,但是maven在打包时将丢失properties文件,原因maven执行compile是只会扫描*.class文件. 那么这种请

maven项目打包的时候,*Mapper.xml 文件会打不不进去解决办法

打包的时候,不同版本的 Eclipse 还有IDEA 会有打包打不进去Mapper.xml 文件,这个时候要加如下代码, 在<build> 标签内加入即可 <resources> <resource> <directory>src/main/java</directory> <includes> <include>**/*.properties</include> <include>**/*.xml

解决Eclipse建立Maven项目后无src/main/java资源文件夹的办法

建立好一个Maven项目后,如果Java Resources资源文件下没有src/main/java文件夹,并且在手动创建这个文件时提示"已存在文件".这说明,在这个项目配置中已经有了src/main/java这个文件夹. 解决方法: 在项目上右键选择properties,然后点击java build path,在Librarys下,编辑JRE system Library,配置JDK路径.