关闭

[置顶] Eclipse连接Hadoop集群及WordCount实践

标签: hadoophadoop集群分布式系统eclipse
1105人阅读 评论(0) 收藏 举报
分类:

声明:作者原创,转载注明出处。

作者:帅气陈吃苹果

一、环境准备

1、JDK安装与配置

2、Eclipse下载

下载解压即可,下载地址:https://pan.baidu.com/s/1i51UsVN

3、Hadoop下载与配置

下载解压即可,下载地址:https://pan.baidu.com/s/1i57ZXqt
配置环境变量:
在系统变量中新建变量:HADOOP_HOME,值:E:\Hadoop\hadoop-2.6.5
在Path系统变量中添加Hadoop的/bin路径,值:E:\Hadoop\hadoop-2.6.5\bin

4、正常的集群状态

确保集群处于启动状态,并且windows本地机器与集群中的master可以互相ping通,并且可以进行SSH连接;
在 C:\Windows\System32\drivers\etc\hosts文件中,追加Hadoop集群master节点的IP地址和主机名映射,如下:

192.168.29.188 vnet

5、Eclipse-Hadoop插件下载

下载地址:https://pan.baidu.com/s/1o7791VG

下载后将插件放在Eclipse安装目录的plugins目录下,重启Eclipse即可。

6、Eclipse的Map/Reduce视图设置

1)重启Eclipse后,在左侧栏可以看到此视图:

打开Window—>Perspective—>Open Perspective—>Other…,选择Map/Reduce。若没有看到此选项,在确保插件放入plugins目录后已经重启的情况下,猜测可能是Eclipse或插件的版本问题导致,需重新下载相匹配的版本。

2)打开Window—>Preferences—>Hadoop Map/Reduce,配置Hadoop的安装目录。

二、WordCount项目实战

1、Hadoop Location的创建与配置

在Eclipse底部栏中选择Map/Reduce Locations视图,右键选择New Hadoop Locations,如下图:

具体配置如下:

点击finish,若没有报错,则表示连接成功,在Eclipse左侧的DFS Locations中可以看到HDFS文件系统的目录结构和文件内容;

若遇到 An internal error occurred during: "Map/Reduce location status updater". java.lang.NullPointerExcept的问题,则表示当前HDFS文件系统为空,只需在HDFS文件系统上创建文件,刷新DFS Locations后即可看到文件系统内容;

2、创建输入文件及目录

在master节点上创建输入文件,并上传到HDFS对应的输入目录中,如下:

vi input.txt                                                  //然后输入单词计数的文件内容,保存

hdfs dfs -put input.txt /user/root/input/            //将Linux本地文件系统的文件上传到HDFS上

input.txt

hello world 

hello hadoop

bye

bye hadoop

3、创建Map/Reduce项目

File—>New—>Project—>Map/Reduce Project,填入项目名称,还需要选择Hadoop Library的路径,这里选择“Use default Hadoop”即可,就是我们之前在Eclipse中配置的Hadoop。

WordCount.java代码:

package com.wecon.sqchen;

import java.io.IOException;  
import java.util.StringTokenizer;  

import org.apache.hadoop.conf.Configuration;  
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.FileInputFormat;  
import org.apache.hadoop.mapreduce.lib.input.TextInputFormat;  
import org.apache.hadoop.mapreduce.lib.output.FileOutputFormat;  
import org.apache.hadoop.mapreduce.lib.output.TextOutputFormat;  

public class WordCount {  

    public static class WordCountMap extends  
            Mapper<LongWritable, Text, Text, IntWritable> {  

        private final IntWritable one = new IntWritable(1);  
        private Text word = new Text();  

        public void map(LongWritable key, Text value, Context context)  
                throws IOException, InterruptedException {  
            String line = value.toString();  
            StringTokenizer token = new StringTokenizer(line);  
            while (token.hasMoreTokens()) {  
                word.set(token.nextToken());  
                context.write(word, one);  
            }  
        }  
    }  

    public static class WordCountReduce extends  
            Reducer<Text, IntWritable, Text, IntWritable> {  

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

    public static void main(String[] args) throws Exception {
        System.setProperty("hadoop.home.dir","E:/Hadoop/hadoop-2.6.5" );
        Configuration conf = new Configuration();  
        Job job = new Job(conf);  
        job.setJarByClass(WordCount.class);  
        job.setJobName("wordcount");  

        job.setOutputKeyClass(Text.class);  
        job.setOutputValueClass(IntWritable.class);  

        job.setMapperClass(WordCountMap.class);  
        job.setReducerClass(WordCountReduce.class);  

        job.setInputFormatClass(TextInputFormat.class);  
        job.setOutputFormatClass(TextOutputFormat.class);  

        FileInputFormat.addInputPath(job, new Path(args[0]));  
        FileOutputFormat.setOutputPath(job, new Path(args[1]));  

        job.waitForCompletion(true);  
    }  
}  

右键打开Run AS —> Run Configurations,配置Arguments,即程序中指定的文件输入目录和输出目录,如下:

配置好后,Run AS—> Java Application,若无报错,则表示程序执行成功,在Eclipse左侧的
DFS Locations刷新后,可以看到输出目录和输出文件,如下:

4、解决遇到的问题

1)java.io.IOException: Could not locate executable null\bin\winutils.exe in the Hadoop binaries.

解决方式:

在main方法中、job提交之前,指定本地Hadoop的安装路径,即添加下列代码:
System.setProperty("hadoop.home.dir","E:/Hadoop/hadoop-2.6.5" );

2)(null) entry in command string: null chmod 0700 E:\tmp\hadoop-Administrator\mapred\staging
\Administr

解决方式:

参考链接:https://ask.hellobi.com/blog/jack/5063
链接中所需文件下载地址:https://pan.baidu.com/s/1i4Z4aVV

3)org.apache.hadoop.security.AccessControlException: Permission denied: user=Administrator, access=WRITE, inode="/user/root":root:supergroup:drwxr-xr-x

解决方式:

这是本地用户执行Application时,HDFS上的用户权限问题;
参考链接:http://blog.csdn.net/Camu7s/article/details/50231625
采用第三种方法,在master节点机器上执行下列命令:

adduser Administrator

groupadd supergroup

usermod -a -G supergroup Administrator

4)org.apache.hadoop.mapred.FileAlreadyExistsException: Output directory hdfs://vnet:9000/user/root/output already exists

解决方式:

这是因为该项目的输出目录在HDFS中已经存在,而输出目录是在程序运行过程中创建的,不允许提前存在,所以只需删除HDFS上的对应output目录即可。

5)

log4j:WARN No appenders could be found for logger (org.apache.hadoop.metrics2.lib.
MutableMetricsFactory).

log4j:WARN Please initialize the log4j system properly.

log4j:WARN See http://logging.apache.org/log4j/1.2/faq.html#noconfig for more info.

解决方式:

在项目的src目录下,New—>Other—>General—>File,创建文件“log4j.properties”,文件内容如下:

log4j.rootLogger=WARN, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender

log4j.appender.stdout.layout=org.apache.log4j.PatternLayout

log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

5、参考链接:

http://blog.csdn.net/bd_ai_iot/article/details/78287379

http://blog.csdn.net/songchunhong/article/details/47046701

http://blog.chinaunix.net/uid-20577907-id-3613584.html

http://blog.csdn.net/jediael_lu/article/details/38705371

0
1
查看评论

Eclipse连接远程Hadoop集群&运行WordCount例程

hadoop开发主要分为两种,第一种是脱离集群开发;第二种是连接远程Hadoop集群,将我们开发的API提交hadoop执行; http://www.aboutyun.com/thread-6950-1-1.html https://my.oschina.net/OutOfMemory/blog...
  • nyyjs
  • nyyjs
  • 2017-06-20 16:13
  • 538

eclipse远程连接hadoop集群配置(windows及linux下)

1. 首先把hadoop-eclipse-plugin-1.0.4.jar(具体版本视你的hadoop版本而定)放到eclipse安装目录的plugins文件夹中,如果重新打开eclipse后看到有如下视图,则说明你的hadoop插件已经安装成功了:
  • maihilton
  • maihilton
  • 2014-10-28 15:46
  • 1027

Java之美[从菜鸟到高手演变]之eclipse连接hadoop集群

作者:二青个人站点:zhangerqing.cn    邮箱:xtfggef@gmail.com    微博:http://weibo.com/xtfggef准备工具:Ubuntu 14.10 desktop 64 biteclipse 4.3 kepler ...
  • zhangerqing
  • zhangerqing
  • 2015-01-18 09:40
  • 11527

Windowns上的eclipse连接虚拟机上的hadoop集群设置

(我的hadoop版本是hadoop-0.20.2) (1)win+R,输入cmd,ping虚拟机的ip,查看是否能够ping通 (2)关闭虚拟机中的防火墙: a) service iptables stop 立即生效 b) chkconfig iptables off 重启后生...
  • u013214586
  • u013214586
  • 2016-10-14 13:14
  • 1291

hadoop 集群运行WordCount示例程序

在博客中http://blog.csdn.net/stormragewang/article/details/41148917写到运行wordcount程序 [hadoop@Yarn-Master ~]$ hadoop/2.6.1/bin/hadoop jar hadoop/2.6.1/share...
  • StormrageWang
  • StormrageWang
  • 2015-12-19 17:02
  • 2618

在Windows下的Eclipse中如何将WordCount程序提交到集群运行

如何将Windows下在Eclipse开发的Hadoop程序直接提交到远程的Hadoop集群运行呢?
  • Deng2012web
  • Deng2012web
  • 2016-07-17 12:18
  • 1192

Eclipse连接Hadoop2.7.3集群配置及测试

Eclipse连接Hadoop
  • ll0514
  • ll0514
  • 2016-10-29 23:42
  • 3294

Hadoop实践(四)---Hadoop集群运维

Hadoop集群简单运维指南
  • Wee_Mita
  • Wee_Mita
  • 2016-09-12 21:23
  • 475

Hadoop小兵笔记【三】利用Eclipse将wordcount打包成可以运行在hadoop上的jar包

hadoop版本为hadoop1.2.1 eclipse版本为eclipse-standard-kepler-SR2-win32-x86_64 WordCount.java为hadoop-1.2.1\src\examples\org\apache\hadoop\examples\Word...
  • cafuc46wingw
  • cafuc46wingw
  • 2015-05-04 16:14
  • 1604

hadoop开发:eclipse运行wordcount实例

首先是hadoop平台的搭建。。。。(既然都要用eclipse运行wordcount实例了,肯定要搭建hadoop平台,或已经搭建好了平台)该实例是在伪分布式上进行的。 搭建好伪分布式后,安装好eclipse,在用eclipse运行第一个wordcount实例之前先要给eclipse安装hadoop...
  • SONGCHUNHONG
  • SONGCHUNHONG
  • 2015-07-24 21:29
  • 3552