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文件即可知道谁是猪脚。

  如果想把输入输出设置到hdfs也容易,只要把WordSplit.java里的路径加个前缀hdfs://localhost:9000就完事了:

        String inputFile = "hdfs://localhost:9000/input/people.txt"; // 输入文件
        Path outDir = new Path("hdfs://localhost:9000/out"); // 输出目录
        Path tempDir = new Path("hdfs://localhost:9000/tmp" + System.currentTimeMillis()); // 临时目录

  当然你得先把小说传到hdfs上才能跑,可以在cmd里用hdfs命令,也可以直接在eclipse里操作,怎么弄看上面第4步。跑完再点Reflesh可以直接看结果文件。如果要重启hadoop,记得先把eclipse关了,在命令行里起了hadoop再打开eclipse接着玩。

转至:http://www.cnblogs.com/wuxun1997/p/6849878.html

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 这个问题中涉及了EclipseHadoop开发环境配置。要解决这个问题,需要按照一定的步骤配置EclipseHadoop的连接。具体可以参考官方文档或者各种教程。一般需要安装Eclipse插件或者Hadoop相关的工具包,然后在Eclipse配置Hadoop的一些参数和路径,最终可以实现在Eclipse中编写和调试Hadoop程序的功能。 ### 回答2: 在Eclipse配置Hadoop开发环境需要安装相关插件配置一些参数。以下是具体的步骤: 第一步:下载Eclipse插件 首先需要下载Eclipse插件,建议下载CDH5 Eclipse插件,因为该插件支持CDH 5.x云环境,CDH5是针对Hadoop的一个完整、开放的平台。下载完成插件后,将插件复制到Eclipse安装目录下的dropins文件夹中。 第二步:配置Hadoop运行环境 在Eclipse配置Hadoop开发环境需要配置Hadoop运行环境,可以通过以下步骤实现: 1.首先在Eclipse中新建一个Java项目,然后右键单击项目名称,选择“Build Path”>“Configure Build Path”。 2.在弹出的对话框中,选择“Libraries”标签页,并单击“Add Library”按钮。 3.在下一个对话框中,选择“User Library”,然后单击“Next”按钮。 4.在“User Libraries”的对话框中,单击“New”按钮,创建一个新的库,取名为“Hadoop”。 5.选择新建的“Hadoop”库,在右侧的“Add External JARs”中添加Hadoop所有的JAR文件。 6.单击“OK”按钮保存设置。 第三步:设置环境变量 将Hadoop的bin目录添加到系统的PATH环境变量中,这样可以在Eclipse中直接调用Hadoop命令。具体操作步骤如下: 1.在Windows系统中,右键单击“计算机”图标,选择“属性”,在打开的窗口中单击“高级系统设置”。 2.在弹出的对话框中,单击“环境变量”按钮。 3.在下面的对话框中,找到“系统变量”中的“PATH”变量,双击进行编辑。 4.在编辑窗口的末尾添加Hadoop的bin目录,例如:D:\hadoop-2.6.0\bin 5.单击“确认”保存设置。 第四步:创建Hadoop项目 在Eclipse中创建Hadoop项目需要先创建一个Java项目,然后将其转换成Hadoop项目,具体步骤如下: 1.在Eclipse中新建一个Java项目。 2.右键单击项目名称,选择“Configure”>“Convert to Hadoop Project”。 3.在弹出的对话框中,选择Hadoop版本,配置Hadoop相关参数,单击“Finish”创建项目。 至此,Eclipse配置Hadoop开发环境完成。可以在Eclipse中开发Hadoop应用程序并进行调试和测试。 ### 回答3: Hadoop是一个开源分布式计算框架,可以让我们方便地处理大规模数据。在使用Hadoop进行开发时,我们可以使用Eclipse配置开发环境,轻松地完成MapReduce程序的编写,运行和调试。 下面是在Eclipse配置Hadoop开发环境的步骤: 1. 下载并安装Eclipse:根据操作系统选择合适的版本进行下载并安装。 2. 下载并安装Hadoop:同Eclipse,选择适合的版本进行下载并安装。将Hadoop解压缩到合适的目录下,记住路径,后面会用到。 3. 在Eclipse中安装Hadoop插件:打开Eclipse,点击菜单栏的“Help”-“Eclipse Marketplace”搜索栏中输入“hadoop”,然后在结果中找到“Hadoop Eclipse Plugin”进行安装。 4. 配置Hadoop插件:在Eclipse中打开“Preference”对话框,选择“Hadoop”选项卡,配置Hadoop的路径和JDK的路径等信息,注意这里要配置Hadoop的路径,否则会出现无法找到Hadoop的情况。配置完成后点击“Apply”保存。 5. 新建Hadoop MapReduce项目:在Eclipse的Project Explorer中右键单击“New”-“Project”选择“MapReduce Project”,填写项目的基本信息后点击“Finish”开始创建项目。 6. 编写MapReduce程序:在新创建的项目中创建一个类,并实现MapReduce Job的两个方法,即“map”方法和“reduce”方法。 7. 运行和调试MapReduce程序:在Eclipse的菜单栏中选择“Run”-“Run Configurations”进行配置,设置好输入和输出路径,然后点击“Run”就可以运行程序。如果需要调试程序,可以在代码中设置断点,然后在Eclipse的菜单中选择“Debug”进行调试。 以上就是在Eclipse配置Hadoop开发环境的步骤,通过上面的操作,我们可以轻松地完成MapReduce程序的开发和调试,提高开发效率。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值