eclipse配置hadoop2.7.2开发环境

  先安装并启动hadoop,怎么弄见上文http://www.cnblogs.com/wuxun1997/p/6847950.html。这里说下怎么设置IDE来开发hadoop代码。首先要确保你本地装了eclipse,再下个eclipse的hadoop插件就完事了。下面细说一下:

  1、到http://download.csdn.net/detail/wuxun1997/9841487下载eclipse插件并丢到eclipse的pulgin目录下,重启eclipse,Project Explorer出现DFS Locations;

  2、点击Window->点Preferences->点Hadoop Map/Reduce->填D:\hadoop-2.7.2并OK;

  3、点击Window->点Show View->点MapReduce Tools下的Map/Reduce Locations->点右边角一个带+号的小象图标"New hadoop location"->eclipse已填好默认参数,但以下几个参数需要修改以下,参见上文中的两个配置文件core-site.xml和hdfs-site.xml:

  General->Map/Reduce(V2) Master->Port改为9001

  General->DSF Master->Port改为9000

  Advanced paramters->dfs.datanode.data.dir改为ffile:/hadoop/data/dfs/datanode

  Advanced paramters->dfs.namenode.name.dir改为file:/hadoop/data/dfs/namenode

  4、点击Finish后在DFS Locations右键点击左边三角图标,出现hdsf文件夹,可以直接在这里操作hdsf,右键点击文件图标选"Create new Dictionery"即可新增,再次右键点击文件夹图标选Reflesh出现新增的结果;此时在localhost:50070->Utilities->Browse the file system也可以看到新增的结果;

  5、新建hadoop项目:File->New->Project->Map/Reduce Project->next->输入自己取的项目名如hadoop再点Finish

  6、这里的代码演示最常见的分词例子,统计的是中文小说里的人名并降序排列。为了分词需要导入一个jar,在这里下载http://download.csdn.net/detail/wuxun1997/9841659。项目结构如下:

hadoop

|--src

|--com.wulinfeng.hadoop.wordsplit

|--WordSplit.java

|--IKAnalyzer.cfg.xml

|--myext.dic

|--mystopword.dic

WordSplit.java

package com.wulinfeng.hadoop.wordsplit;

import java.io.IOException;
import java.io.StringReader;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IntWritable;
import org.apache.hadoop.io.Text;
import org.apache.hadoop.io.WritableComparable;
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.input.SequenceFileInputFormat;
import org.apache.hadoop.mapreduce.lib.map.InverseMapper;
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;
import org.apache.hadoop.mapreduce.lib.output.SequenceFileOutputFormat;
import org.wltea.analyzer.core.IKSegmenter;
import org.wltea.analyzer.core.Lexeme;

public class WordSplit {

    /**
     * map实现分词
     * @author Administrator
     *
     */
    public static class TokenizerMapper extends Mapper<Object, Text, Text, IntWritable> {
        private static final IntWritable one = new IntWritable(1);
        private Text word = new Text();

        public void map(Object key, Text value, Mapper<Object, Text, Text, IntWritable>.Context context)
                throws IOException, InterruptedException {
            StringReader input = new StringReader(value.toString());
            IKSegmenter ikSeg = new IKSegmenter(input, true); // 智能分词
            for (Lexeme lexeme = ikSeg.next(); lexeme != null; lexeme = ikSeg.next()) {
                this.word.set(lexeme.getLexemeText());
                context.write(this.word, one);
            }
        }
    }

    /**
     * reduce实现分词累计
     * @author Administrator
     *
     */
    public static class IntSumReducer extends Reducer<Text, IntWritable, Text, IntWritable> {
        private IntWritable result = new IntWritable();

        public void reduce(Text key, Iterable<IntWritable> values,
                Reducer<Text, IntWritable, Text, IntWritable>.Context context)
                throws IOException, InterruptedException {
            int sum = 0;
            for (IntWritable val : values) {
                sum += val.get();
            }
            this.result.set(sum);
            context.write(key, this.result);
        }
    }

    public static void main(String[] args) throws Exception {
        Configuration conf = new Configuration();
        String inputFile = "/input/people.txt"; // 输入文件
        Path outDir = new Path("/out"); // 输出目录
        Path tempDir = new Path("/tmp" + System.currentTimeMillis()); // 临时目录

        // 第一个任务:分词
        System.out.println("start task...");
        Job job = Job.getInstance(conf, "word split");
        job.setJarByClass(WordSplit.class);
        job.setMapperClass(TokenizerMapper.class);
        job.setCombinerClass(IntSumReducer.class);
        job.setReducerClass(IntSumReducer.class);
        job.setOutputKeyClass(Text.class);
        job.setOutputValueClass(IntWritable.class);
        FileInputFormat.addInputPath(job, new Path(inputFile));
        FileOutputFormat.setOutputPath(job, tempDir);

        // 第一个任务结束,输出作为第二个任务的输入,开始排序任务
        job.setOutputFormatClass(SequenceFileOutputFormat.class);
        if (job.waitForCompletion(true)) {
            System.out.println("start sort...");
            Job sortJob = Job.getInstance(conf, "word sort");
            sortJob.setJarByClass(WordSplit.class);
            sortJob.setMapperClass(InverseMapper.class);
            sortJob.setInputFormatClass(SequenceFileInputFormat.class);

            // 反转map键值,计算词频并降序
            sortJob.setMapOutputKeyClass(IntWritable.class);
            sortJob.setMapOutputValueClass(Text.class);
            sortJob.setSortComparatorClass(IntWritableDecreasingComparator.class);
            sortJob.setNumReduceTasks(1);

            // 输出到out目录文件
            sortJob.setOutputKeyClass(IntWritable.class);
            sortJob.setOutputValueClass(Text.class);
            FileInputFormat.addInputPath(sortJob, tempDir);

            // 如果已经有out目录,先删再创建
            FileSystem fileSystem = outDir.getFileSystem(conf);
            if (fileSystem.exists(outDir)) {
                fileSystem.delete(outDir, true);
            }
            FileOutputFormat.setOutputPath(sortJob, outDir);

            if (sortJob.waitForCompletion(true)) {
                System.out.println("finish and quit....");
                // 删掉临时目录
                fileSystem = tempDir.getFileSystem(conf);
                if (fileSystem.exists(tempDir)) {
                    fileSystem.delete(tempDir, true);
                }
                System.exit(0);
            }
        }
    }

    /**
     * 实现降序
     *
     * @author Administrator
     *
     */
    private static class IntWritableDecreasingComparator extends IntWritable.Comparator {
        public int compare(WritableComparable a, WritableComparable b) {
            return -super.compare(a, b);
        }

        public int compare(byte[] b1, int s1, int l1, byte[] b2, int s2, int l2) {
            return -super.compare(b1, s1, l1, b2, s2, l2);
        }
    }
}

IKAnalyzer.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">
<properties>
    <comment>IK Analyzer 扩展配置</comment>
    <!--用户可以在这里配置自己的扩展字典 -->
    <entry key="ext_dict">myext.dic</entry>
    <!--用户可以在这里配置自己的扩展停止词字典 -->
    <entry key="ext_stopwords">mystopword.dic</entry>
</properties>

myext.dic

高育良
祁同伟
陈海
陈岩石
侯亮平
高小琴
沙瑞金
李达康
蔡成功

mystopword.dic

你
我
他
是
的
了
啊
说
也
和
在
就

  这里直接在eclipse跑WordSplit类,右键选择Run as -> Run on hadoop。因为在类里写死了输入文件,所以需要在D盘建一个input目录,里面放个文件名叫people.txt的小说,是网上荡下来的热剧《人民的名义》,为了分词的需要把people.txt去Notepad++里打开,点编码->以UTF-8以无BOM格式编码。在myext.dic里输入一些不想拆分的人名,在mystopword.dic输入想要过滤掉的一些谓词和助词,跑完去D:\out里看part-r-00000文件即可知道谁是猪脚。

时间: 2024-10-06 11:53:11

eclipse配置hadoop2.7.2开发环境的相关文章

spark-windows(含eclipse配置)下本地开发环境搭建

spark-windows(含eclipse配置)下本地开发环境搭建   >>>>>>注意:这里忽略JDK的安装,JDK要求是1.8及以上版本,请通过 java  –version查看. 一.spark命令行环境搭建 Step1:安装Spark 到官网http://spark.apache.org/downloads.html选择相应版本,下载安装包.我这里下的是2.1.3版本,后面安装的Hadoop版本需要跟Spark版本对应.下载后找个合适的文件夹解压即可.这里新建

(转)Eclipse下搭建Hadoop2.4.0开发环境

Eclipse下搭建Hadoop2.4.0开发环境 一.安装Eclipse 下载Eclipse,解压安装,例如安装到/usr/local,即/usr/local/eclipse 4.3.1版本下载地址:http://pan.baidu.com/s/1eQkpRgu 二.在eclipse上安装hadoop插件 1.下载hadoop插件 下载地址:http://pan.baidu.com/s/1mgiHFok 此zip文件包含了源码,我们使用使用编译好的jar即可,解压后,release文件夹中的h

配置Arcengine10.1+java开发环境(Eclipse)

以下开发环境配置是假定用户已经安装了Java开发的IDE(Eclipse) 软件准备 (一)ArcEngine 10.1 安装包            提取码:poa0 (二)ArcGIS License Manager          提取密码:a54e   软件安装 1.安装Licence Manager  按照安装指引一直下一步直到安装完成. 启动 Licence Server Administrator ,停止许可服务(如下图) 2.安装ArcEngine 一直点下一步直到完成 3.安

Eclipse C/C++和MinGW开发环境配置

逐渐感到Python的速度无法满足需求,所以开始重新学习C/C++.第一步当然就是IDE环境配置,一直觉得Eclipse不错,界面很舒服!但是配置IDE一身冷汗!不知道出了什么问题,感觉还是原来用的VC6.0无脑比较好!出了问题就得解决,各种百度(吐槽下,谷歌都不能用了!)无果,各种错误,一度怀疑自己怎么变得这么低能了.所幸一个下午的折腾,中间等待下载看了场电影,终于搞定!略羞涩 JDK安装与配置 首先还是下载: 下载对应版本!无脑安装! 环境变量配置: 计算机>>属性>>高级系统

ubuntu上用eclipse搭建java、python开发环境

上一篇文章讲到如何在windwos上用eclipse搭建java.python开发环境,这一讲将关注如何在ubuntu上实现搭建,本人使用虚拟机安装的ubuntu系统,系统版本为:14.04 lts 一.用eclipse + jdk搭建java开发环境 1.jdk官方下载地址:http://www.oracle.com/technetwork/java/javase/downloads/index-jsp-138363.html 本人下载的是:jdk-8u77-linux-x64.tar.gz

Eclipse 下搭建pyDev python开发环境及helloworld

一,安装基础环境 1,安装jdk7,并配置环境变量(pyDev要求jdk7及以上版本,否则安装好也不显示) 2,下载Eclipse并解压 3,安装python3.X 二,Eclipse下配置pyDev 1,安装插件:help -> Install new Software.. ->输入PyDev Update Site - http://pydev.org/updates 然后下一步.同意等等. 2,配置python编译器:Window -> perferences -> pyDe

【Python】Eclipse和pydev搭建Python开发环境

参考资料: http://www.dotnet120.com/page/10545/ 1.准备工作: 下载32位的JDK6 Java的开发包 下载32位的Eclipse 下载Python 2.x 2.安装JDK6 3.安装Eclipse和Python 4.给Eclipse安装PyDev插件 在Help菜单中,选择Install New Software···, 选择Add按钮,Name:PyDev(这个随便起),Location:http://pydev.org/updates(PyDev的更新

基于Eclipse的Go语言可视化开发环境

http://jingyan.baidu.com/article/d7130635032e2f13fdf475b8.html 基于Eclipse的Go语言可视化开发环境 | 浏览:2924 | 更新:2013-12-21 18:24 | 标签:eclipse 1 2 3 4 5 6 7 分步阅读 搭建与使用一个基于Eclipse的Go语言可视化开发环境. 注意: 在阅读此片经验前,先确保必要工具已经安装或打开 工具/原料 搭建好Go语言开发环境,详细步骤见经验: http://jingyan.b

在Fedora18上配置个人的Hadoop开发环境

在Fedora18上配置个人的Hadoop开发环境 1.    背景 文章中讲述了类似于"personalcondor"的一种"personal hadoop" 配置法.主要的目的是配置文件和日志文件有一个单一的源, 可以用软连接到开发生成的二进制库,这样就可以在所生成二进制库更新的时候维护其他的数据和配置项. 2.    用户案例 1.  比较不用改变现有系统中安装软件的情况下,在本地的沙盒环境中做测试 2.  单一源的配置文件盒日志文件 3.    参考 网页: