在eclipse中配置mapreduce开发环境
(1)将hadoop-eclipse-plugin-2.6.4.jar复制到eclipse安装目录的plugins目录下(如果不成功复制到dropins中),之后启动eclipse 。此时从eclipse界面的左侧“Project Explorer”视图中,下面发现“DFS Locations”,说明Eclipse已经识别刚才放入的Hadoop Eclipse插件了。并且在“Window”菜单下的“Preference”,,里面会多出“Hadoop Map/Reduce”选项
(2)选择“Window”菜单下的“Preference”,然后弹出一个窗体,在窗体的左侧,有一列选项,里面会多出“Hadoop Map/Reduce”选项,点击此选项,选择Hadoop的安装目录(如D:\HadoopWorkPlat\hadoop-2.6.4),之后确定。
(3)切换到“Map/Reduce”界面模式。选择“Window”菜单下选择“Open Perspective”,弹出一个窗体,从中选择“Map/Reduce”选项即可进行切换。
(4)建立与Hadoop集群的连接。在Eclipse软件下面的“Map/Reduce Locations”区域单击右键,弹出一个选项,选择“New Hadoop Location”,然后弹出一个窗体。填写下列内容:
Location Name:可以任意取名(比如hadoop),用于标识一个“Map/Reduce Location” 。
Map/Reduce Master Host:master(Master.Hadoop的IP地址)Port:8020 (此端口是在core-site.xml中配置的fs.defaultFS的值)。
DFS Master:Use M/R Master host:前面的勾上。(因为我们的NameNode和JobTracker都在一个机器上。) Port:8020 。
User name:zhang(默认为Win系统管理员名字,因为我们之前改了所以这里就变成了zhang。这里不需要修改)。注意,这里面的Host、Port分别为你在mapred-site.xml、core-site.xml中配置的地址及端口。
接着点击“Advanced parameters”从中找见“hadoop.tmp.dir”,修改成为我们Hadoop集群中设置的地址(这个参数在“core-site.xml”进行了配置 此地方可以配置/usr/local/hadoop-2.6.4/tmp)。
点击“finish”之后,会发现Eclipse软件下面的“Map/Reduce Locations”出现一个条目,就是我们刚才建立的“Map/Reduce Location”。
(5)查看HDFS文件系统,并尝试建立文件夹和上传文件。点击Eclipse软件左侧的“DFS Locations”下面的“Win7ToHadoop”,就会展示出HDFS上的文件结构。在文件结构的相应位置单击右键,通过选择弹出菜单可执行新建目录、对HDFS上载和下载文件等操作。
到此为止,我们的Hadoop Eclipse开发环境已经配置完毕。
(6)创建一个mapreduce项目
创建一个类 。注意代码中的IP地址为主机的IP地址
package helloWorldMapReduce;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.junit.Test;
public class TestDemo {
/**
* 通过api连接并下载
* @throws IOException
* @throws URISyntaxException
*/
@Test
public void connect_get() throws IOException, URISyntaxException {
//--获取 环境变量对象
Configuration conf = new Configuration();
//--可以通过此对象来设定环境,通过代码设定的优先级要高于配置文件的
//优先级 代码设定的是局部变量
conf.set("dfs.repliaction", "1");
//连接HDFS文件系统,此ip地址是master服务器的IP地址,根据你自己的地址修改
FileSystem system =FileSystem.get(new URI("hdfs://10.211.55.6:8020"), conf);
//--获取指定文件的输入流,HDFs中必须有/park02/4.txt文件
InputStream in =system.open(new Path("/park02/4.txt"));
//--获取本地文件输出流,下载到项目的根目录中,刷新下项目就出来了。
OutputStream out =new FileOutputStream(new File("data.txt"));
//--通过hadoop提供的工具类,完成数据传输
IOUtils.copyBytes(in, out, conf);
}
@Test
public void put() throws IOException, URISyntaxException {
//--获取 环境变量对象
Configuration conf = new Configuration();
//--可以通过此对象来设定环境,通过代码设定的优先级要高于配置文件的
//优先级 代码设定的是局部变量
conf.set("dfs.repliaction", "1");
//连接HDFS文件系统
FileSystem system =FileSystem.get(new URI("hdfs://10.211.55.6:8020"), conf);
//获取hdfs文件的输出流
OutputStream out =system.create(new Path("/park03/1.txt"));
//--获取本地文件袋额输入流
InputStream in =new FileInputStream(new File("data.txt"));
IOUtils.copyBytes(in, out, conf);
}
//@Test
public void other() throws IOException, URISyntaxException {
//--获取 环境变量对象
Configuration conf = new Configuration();
//--可以通过此对象来设定环境,通过代码设定的优先级要高于配置文件的
//优先级 代码设定的是局部变量
conf.set("dfs.repliaction", "1");
//连接HDFS文件系统
FileSystem system =FileSystem.get(new URI("hdfs://10.211.55.6:8020"), conf);
//--删除指定目录或者文件 ,true 是递归删除
// system.delete(new Path("/park02"), true);
system.rename(new Path("/park04"), new Path("/park05"));
}
@Test
public void getBlockLocation() throws IOException, URISyntaxException {
//--获取 环境变量对象
Configuration conf = new Configuration();
//--可以通过此对象来设定环境,通过代码设定的优先级要高于配置文件的
//优先级 代码设定的是局部变量
conf.set("dfs.repliaction", "1");
//连接HDFS文件系统
FileSystem system =FileSystem.get(new URI("hdfs://10.211.55.6:8020"), conf);
//查看块的位置方法
//第一个参数文件路径 第二个参数start控制的是查看块的起始位置
//第三个参数length:块的终止位置
BlockLocation[] blks = system.getFileBlockLocations(new Path("/park05/NOTICE.txt"), 0, 0);
for (BlockLocation blk : blks) {
System.out.println(blk);
}
}
}