widows下配置MyEclipse连接hadoop开发环境

本文档详细介绍了如何在Windows 8.1系统中,使用MyEclipse 10配置Hadoop 2.6开发环境。首先,需要将hadoop-eclipse-plugin-2.6.0.jar插件放入MyEclipse的dropins目录,然后在MyEclipse的偏好设置中确认插件安装成功。接着,创建Map/Reduce位置,并新建MapReduce工程,编写相关代码。在开发过程中可能会遇到安全模式问题,解决办法是引入Hadoop bin目录的必要jar包。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

需求:安装好hadoop之后,为了方便开发mapreduce程序,需要在windows环境中配置MyEclipse环境


一、搭建环境
  • 本地操作系统:windows 8.1
  • 远程服务器os:centos 6.5
  • 本地开发软件:MyEclipse 10
  • 远程的服务器上已经配好hadoop2.6(详见我的上一篇博客hadoop的配置点击打开链接
  • 插件:hadoop-eclipse-plugin-2.6.0.jar(下载地址点击打开链接

二、配置

1、把下载好的插件放到MyEclipse安装目录下的 dropins目录中

2、打开MyEclipse,选择windows——>preferences,若插件放置成功,会如下图所示:(存在 Hadoop Map/Reduce 选项)



然后选择你在本地解压的hadoop目录(当然如果本地没有hadoop,可以随便写一个目录,但是为了方便查看hadoop的一些方法我们还是解压在本地的好),点击OK

3、创建map/reduce locations

选择 windows———>show view——> other——》map/reduce locations 进入如下页面:
      
点击如上图所示的箭头指示的小象,进入如下界面:

这里要注意一下几点:
(1)、Location name:根据需要随便填,这里填写Hadoop
(2)、MapReduce Master       Host:填写core-site.xml中的配置信息中的IP地址或主机名(填写主机名必须在本地的hosts文件中加IP地址映射)
port:同样根据配置信息
我的core-site.xml配置如下:
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
(3)、DFS Master     Host和Port是hdfs对应的IP和端口号(没有配置端口默认是9001)
(4)、user name:是服务器上你的用户名

三、创建工程、编写程序

1、new一个 mapreduce工程,增加包和类,加入如下代码:

package com.smile;

import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;

public class Test {
	public static final String PATH = "hdfs://master:9000";
	static final String DIR = "/d3";
	static final String FILE = "/d1/hello";

	/**
	 * @param args
	 */

	public static void main(String[] args) throws Exception {
		FileSystem fileSystem = getFileSystem();
		// 创建文件夹 hadoop fs -mkdir /f1
		mkdir(fileSystem);
		// 上传文件 -put src des
		// putData(fileSystem);
		// 下载文件 hadoop fs -get src des
		// getData(fileSystem);
		// 浏览文件夹
		list(fileSystem);
		// 删除文件夹
		// remove(fileSystem);
	}

	private static void list(FileSystem fileSystem) throws IOException {
		final FileStatus[] listStatus = fileSystem.listStatus(new Path("/"));
		for (FileStatus fileStatus : listStatus) {
			String isDir = fileStatus.isDir() ? "文件夹" : "文件";
			final String permission = fileStatus.getPermission().toString();
			final short replication = fileStatus.getReplication();
			final long len = fileStatus.getLen();
			final String path = fileStatus.getPath().toString();
			System.out.println(isDir + "\t" + permission + "\t" + replication
					+ "\t" + len + "\t" + path);
		}
	}

	private static void getData(FileSystem fileSystem) throws IOException {
		final FSDataInputStream in = fileSystem.open(new Path(FILE));
		IOUtils.copyBytes(in, System.out, 1024, true);
	}

	private static void putData(FileSystem fileSystem) throws IOException,
			FileNotFoundException {
		final FSDataOutputStream out = fileSystem.create(new Path(FILE));
		final FileInputStream in = new FileInputStream(
				"H:/kuaipan/hadoop/classes/yy131009/day2/readme.txt");
		IOUtils.copyBytes(in, out, 1024, true);
	}

	private static void remove(FileSystem fileSystem) throws IOException {
		fileSystem.delete(new Path(DIR), true);
	}

	private static void mkdir(FileSystem fileSystem) throws IOException {
		fileSystem.mkdirs(new Path(DIR));
	}

	private static FileSystem getFileSystem() throws IOException,
			URISyntaxException {
		return FileSystem.get(new URI(PATH), new Configuration());
	}

}
此代码的功能是在hdfs系统中创建一个 d3的目录,单击右键run as ------>java application ,运行效果如下图所示:



说明在hdfs中创建 /d3目录成功的同时,也验证了本地的MyEclipse能够和远程的Hadoop成功连接,那么现在可以开发你的APP了!
也可以通过 在server中通过命令查询创建的目录:
hadoop fs -ls /
如下所示:
[paul@master ~]$ hadoop fs -ls /
Found 3 items
drwxr-xr-x   - paul supergroup          0 2015-08-24 10:59 /d1
drwxr-xr-x   - paul supergroup          0 2015-08-24 11:04 /d2
drwxr-xr-x   - paul supergroup          0 2015-08-24 11:56 /d3


四、可能遇到的问题:

1、安全模式:

hadoop刚启动时会进入安全模式(safemode),进入安全模式的原因是为了检查datanode检查其中的数据块,namenode会根据这个检查信息对数据进行备份或删除等一系列的操作(总之我们知道一开始会进入safemode就好)。进入safemode就只允许读操作,这会导致不能进行增删改操作。解决这一问题也很简单,首先我们检查一下hadoop是否进入了安全模式,命令如下:
hdfs dfsadmin -safemode get
若出现Safe mode is ON 说明系统已经是安全模式,只需强制退出即可,命令如下:
hdfs dfsadmin -safemode leave
重新输入:
hdfs dfsadmin -safemode get
会发现Safe mode is OFF
重新运行程序即可。

2、上述程序要想正常运行必须引入jar包,只需把 hadoop/bin 相应的jar引入即可。

3、Exception in thread "main" java.lang.UnsatisfiedLinkError:org.apache.hadoop.io.nativeio.NativeIO$Windows.access0(Ljava/lang/String;I)Z
解决方案:
这个问题困扰了我很久,网上找的原因主要是本地没有hadoop.dll这个文件,从网上下了一个放到本地windows中的system32目录下还是会报错!后来搜了一个人的帖子,我加了如下代码:
try {
  System.load("D:/software/hadoop-2.6.0/bin/hadoop.dll");
   } catch (UnsatisfiedLinkError e) {
     System.err.println("Native code library failed to load.\n" + e);
     System.exit(1);
   }
结果出现:Can't load IA 32-bit .dll on a AMD 64-bit platform
这才让我恍然大悟,原来我下的hadoop.dll是hadoop2.2版本的,可能是32位的原因,和本地的64位环境不匹配,重新找资源,替换原来的hadoop.dll 成功!
hadoop.dll文件的连接地址 点击打开链接























评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值