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

作者:帅气陈吃苹果

一、环境准备

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后,在左侧栏可以看到此视图:

[图片上传失败...(image-e97b85-1513346897411)]

打开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 //将Linux本地文件系统的文件上传到HDFS上
hdfs dfs -put input.txt /user/root/input/

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刷新后,可以看到输出目录和输出文件,如下:

[图片上传失败...(image-40998c-1513346897411)]

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

最后,欢迎指正。喜欢的话,点个赞呗,请你吃苹果。

Eclipse连接Hadoop集群及WordCount实践的更多相关文章

  1. eclipse 连接 hadoop集群

    1 网上找插件 或者 自己编译 放到eclipse plugin里面 2 重启eclipse 配置MapReduceLocation 通吃端口为9001 9000 看你自己的配置 3 新建mapRed ...

  2. eclipse链接Hadoop集群时报错Error:Call From xxx/xxx.xxx.xxx.xxx to hostname1:9000 failed on connection exception

    今天用eclipse连接Hadoop集群的时候突然给我报了这样一个错误:Error:Call From xxx/xxx.xxx.xxx.xxx to hostname1:9000 failed on ...

  3. windows下eclipse远程连接hadoop集群开发mapreduce

    转载请注明出处,谢谢 2017-10-22 17:14:09  之前都是用python开发maprduce程序的,今天试了在windows下通过eclipse java开发,在开发前先搭建开发环境.在 ...

  4. MapReduce编程入门实例之WordCount:分别在Eclipse和Hadoop集群上运行

    上一篇博文如何在Eclipse下搭建Hadoop开发环境,今天给大家介绍一下如何分别分别在Eclipse和Hadoop集群上运行我们的MapReduce程序! 1. 在Eclipse环境下运行MapR ...

  5. myeclipse连接hadoop集群编程及问题解决

    原以为搭建一个本地编程测试hadoop程序的环境很简单,没想到还是做得焦头烂额,在此分享步骤和遇到的问题,希望大家顺利. 一.要实现连接hadoop集群并能够编码的目的需要做如下准备: 1.远程had ...

  6. windows下在eclipse上远程连接hadoop集群调试mapreduce错误记录

    第一次跑mapreduce,记录遇到的几个问题,hadoop集群是CDH版本的,但我windows本地的jar包是直接用hadoop2.6.0的版本,并没有特意找CDH版本的 1.Exception ...

  7. 【hadoop】——window下elicpse连接hadoop集群基础超详细版

    1.Hadoop开发环境简介 1.1 Hadoop集群简介 Java版本:jdk-6u31-linux-i586.bin Linux系统:CentOS6.0 Hadoop版本:hadoop-1.0.0 ...

  8. hadoop 集群调优实践总结

    调优概述# 几乎在很多场景,MapRdeuce或者说分布式架构,都会在IO受限,硬盘或者网络读取数据遇到瓶颈.处理数据瓶颈CPU受限.大量的硬盘读写数据是海量数据分析常见情况. IO受限例子: 索引 ...

  9. Hadoop集群测试wordcount程序

    一.集群环境搭好了,我们来测试一下吧 1.在java下创建一个wordcount文件夹:mkdir wordcount 2.在此文件夹下创建两个文件,比如file1.txt和file2.txt 在fi ...

随机推荐

  1. Django入门五之admin管理

    1. 准备工作 #settings.py #urls.py 2. 创建管理员账号 进入CMD 3. 运行服务器 登录后,发现没有数据的 4. 创建数据 在website/blog/ 新建一个admin ...

  2. TensorFlow-谷歌深度学习库 命令行参数

    程序的入口: tf.app.run tf.app.run( main=None, argv=None ) 运行程序,可以提供'main'函数以及函数参数列表.处理flag解析然后执行main函数. 什 ...

  3. MongoDB学习--安装与管理

    一.简介 MongoDB是一种强大.灵活,且易于扩展的通用型数据库.他能扩展出非常多的功能.如二级索引(secondary index).范围查询(range query).排序.聚合(aggrega ...

  4. python+selenium实现登录账户

    selenium 是一套完整的web应用程序测试系统,包含了测试的录制(selenium IDE),编写及运行(Selenium Remote Control)和测试的并行处理(Selenium Gr ...

  5. Tiny4412模式跳转

    ARM体系的CPU有以下7种工作模式: 1.用户模式(Usr):用于正常执行程序: 2.快速中断模式(FIQ):用于高速数据传输: 3.外部中断模式(IRQ):用于通常的中断处理: 4.管理模式(sv ...

  6. 获取GRIDVIEW中的TemplateField显示的文本值

    GRIDVIEW中数据源绑定后的属性绑定我一般采取2种办法 一个是BoundField,只要设置DataField的对应属性名即可: 如: <asp:BoundField HeaderText ...

  7. JavaScript-//FOR/IN循环。当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处。

    <script> //FOR/IN循环.当使用for/in循环遍历关联数组时,就可以清晰地体会到for/in的强大之处. function getvalue(portfolio){ var ...

  8. js算法初窥03(简单搜索及去重算法)

    前面我们了解了一些常用的排序算法,那么这篇文章我们来看看搜索算法的一些简单实现,我们先来介绍一个我们在实际工作中一定用到过的搜索算法--顺序搜索. 1.顺序搜索 其实顺序搜索十分简单,我们还是以第一篇 ...

  9. 在 Docker 容器中运行应用程序

    案例说明 运行 3 个容器,实现对网站的监控. 三个容器的说明: 容器 web: 创建自 nginx 映像,使用 80 端口,运行于后台,实现 web 服务. 容器 mailer: 该容器中运行一个 ...

  10. 说一说js中__proto__和prototype以及原型继承的那些事

    在面试中遇到过,问js如何实现继承,其实最好的方式就是构造函数+原型,今天在讨论中,发现自己以前理解上的一些误区,特地写出来,最近都比较忙,等手上的项目做完,可以来做个总结. 先说我以前没有认识到位的 ...