在eclipse上安装Hadoop插件

广告位

第一步 在D盘下创建Hadoop目录,将Hadoop-2.6.5复制到Hadoop目录下。 (1)复制hado…

第一步

在D盘下创建Hadoop目录,将Hadoop-2.6.5复制到Hadoop目录下。
(1)复制hadoop-eclipse-plugin-2.5.2.jar 到 eclipse安装目录/plugins/ 下,把hadoop.dll放到c:/windows/system32下,把winutils.exe放到Hadoop的安装目录如D:Hadoophadoop-2.6.5bin下替换原有的winutils.exe文件
在eclipse上安装Hadoop插件
(2)重启eclipse,配置hadoop installation directory。 如果安装插件成功,打开Window–>Preferences,你会发现Hadoop Map/Reduce选项,在这个选项里你需要配置Hadoop installation directory。配置完成后退出。
在eclipse上安装Hadoop插件
(3)配置Map/Reduce Locations。
在Window–>Show View中打开Map/Reduce Locations。
在eclipse上安装Hadoop插件
修改yarn-site.xml(Linux下的)

<property> <name>yarn-resourcemanager.scheduler.address</name> <value>192.168.142.139:8030</value> </property> core-site.xml <property> <name>fs.defaultFS</name> <value>hdfs://hadoop:9000</value> </property> 

(5)如下图,点击右下角,在弹出的对话框中你需要配置Location name,如设置名称为Hadoop,还要配置Map/Reduce Master和DFS Master。这里面的Host、Port分别为你在yarn-site.xml、core-site.xml中配置的地址及端口,User name是虚拟机的名字,如hadoop。
在eclipse上安装Hadoop插件
在eclipse上安装Hadoop插件
(6)配置完后点击Finish退出。点击DFS Locations–>Hadoop如果能显示文件夹,说明配置正确,如果显示”拒绝连接”,请检查你的配置或防火墙是否关闭。
在eclipse上安装Hadoop插件
注意:这时一定要关闭linux防火墙,如果不加的话会连接不上。
(7)上传模拟数据文件夹。
通过Hadoop的命令在HDFS上创建目录/hdfs,命令如下
[root@hdoop Desktop]# hdfs dfs –mkdir /hdfs
然后我们在eclipse上单击“DFS Locations”右键选择“reconnect”下,然后发现文件夹变成(4)了,如图所示。
在eclipse上安装Hadoop插件

eclipse连接虚拟机

(1)打开 Eclipse开发工具,单击File选择“New”→“Java project”,新建名称为“ Hadoop的Java项目,单击右键“ hadoop项目,选择“New”→“ Package”,如图所示。
在eclipse上安装Hadoop插件
(2)输入包名称“ com.hdfs”,单击“Finish”按钮,如图所示。
在eclipse上安装Hadoop插件
(3)新建java类,选中包名并单击右键,选择“New”→“ Class”,如图所示。
在eclipse上安装Hadoop插件
(4)在name项输入“HdfsTest ” 类名称,单击” Finish”按钮完成,如图所示。
在eclipse上安装Hadoop插件
(5)在创建的项目目录下创建文件夹lib,通过选中文件夹“src”并点击右键,选择“New”→“SourceFolder”,在“Folder name”项输入lib,然后点击“finish”,如图所示。
在eclipse上安装Hadoop插件
(6)拷贝第五章实验资料下Hadoop jar文件夹下的所有 hadoop的 jar包到lib文件夹下
(7)选中lib下的所有jar包,单击右键,然后选择”Add to Build Path”,即可把所有jar包添加到path环境中。
(8)编写程序。

package com.hadoopdemo1;  import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.junit.Before; import org.junit.Test;  public class HdfsTest {  	// 获取HADOOP FileSystem对象 	private FileSystem fs = null;  	/* 	 * 初始化环境变量 	 */ 	@Before 	public void init() throws Exception { 		/* 		 * new URI(“hdfs://192.168.11.128:9000”) 连接HDFS new Configuration() 		 * 使用HADOOP默认配置 “root” 登录用户 		 */ 		fs = FileSystem.get( new URI("hdfs://192.168.142.139:9000"), new Configuration(), "root"); 	}  	/* 	 * 创建目录 	 */ 	@Test 	public void testMkdir() throws Exception { 		boolean flag = fs.mkdirs(new Path("/javaApi/")); 		System.out.println(flag ? "创建成功" : "创建失败"); 	} } 

(10)在项目栏目最右侧,选中要运行的方法“testMkdir”,单击右键,弹出菜单,选择“Run As Junit”→“Test”,等待执行结果,如图所示。
在eclipse上安装Hadoop插件
(11)显示运行结果,如图所示。

(11) 在浏览器上输入“192.168.142.139:50070”,查看是不是多了一个文件夹。
注意:要想执行上面的创建目录代码,必须关闭Linux的防火墙

读写文件

1.写文件

package com.hadoopdemo1;  import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.junit.Test;  public class HdfsWrite { 	// 获取HADOOP FileSystem对象 	private FileSystem fs = null;  	/** 	 * 写文件 	 *  	 * new URI("hdfs://192.168.142.139:9000") 连接HDFS new Configuration() 	 * 	 * 使用HADOOP默认配置 "root" 登录用户 FSDataOutputStream数据输出流 	 *  	 * */ 	@Test 	public void WriteFile() throws Exception { 		FileSystem hdfs = FileSystem.get( new URI("hdfs://192.168.142.139:9000"), new Configuration(), "root"); 		Path dfs = new Path("/hdfs/ss.txt"); 		FSDataOutputStream out = hdfs.create(dfs); 		out.writeUTF("cccc"); 	}  } 

2.读文件

package com.hadoopdemo1;  import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.junit.Test;  public class HdfsRead { 	// 获取HADOOP FileSystem对象 	private FileSystem fs = null;  	/** 	 * 读文件 	 * */ 	@Test 	public void ReadFile() throws Exception { 		Configuration conf = new Configuration(); 		FileSystem hdfs = FileSystem.get( new URI("hdfs://192.168.142.139:9000"), conf, "root"); 		Path dfs = new Path("/hdfs/ss.txt"); 		FSDataInputStream input = hdfs.open(dfs); 		System.out.print("myfile:" + input.readUTF()); 		input.close(); 	}  } 

创建文件

package com.hadoopdemo1;  import java.io.ByteArrayInputStream; import java.io.InputStream; import java.net.URI; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; import org.junit.Test;  public class HdfsCreateFile {  	// 获取HADOOP FileSystem对象 	private FileSystem fs = null;  	/** 	 * 创建文件 	 */ 	@Test 	public void CreateFile() throws Exception { 		Configuration conf = new Configuration(); 		FileSystem hdfs = FileSystem.get( new URI("hdfs://192.168.142.139:9000"), conf, "root"); 		Path dfs = new Path("/hdfs/new.txt"); 		FSDataOutputStream outputStream = hdfs.create(dfs); 		InputStream in = new ByteArrayInputStream("Hello!Hadoop HDFS".getBytes("UTF-8")); 		IOUtils.copyBytes(in, outputStream, 4096, true); 	}  } 

复制文件

1.本地文件复制到HDFS
如果要将文件从本地系统复制到HDFS中,可使用copyFromLocalFile()方法。
public void copyFromLocalFile(Path srcPath,Path dstPath)
此方法第一个参数要求必须是本地文件,第二个必须是HDFS文件。

public class CopyFromLocalFile {  	/* 	 * 复制本地文件到HDFS 	 */ 	@Test 	public void testCopyFromLocalFile() throws Exception { 		Configuration conf = new Configuration(); 		FileSystem hdfs = FileSystem.get( new URI("hdfs://192.168.142.139:9000"), conf, "root"); 		Path srcFile = new Path("D:\ebook_mysql.sql"); 		Path dstFile = new Path("/hdfs/ebook.txt"); 		hdfs.copyFromLocalFile(srcFile, dstFile);	 	}  } 

2.HDFS文件复制到本地
如果要将文件从HDFS复制到本地系统中,可使用copyToLocalFile()方法。

public void copyToLocalFile(Path dstPath, Path srcPath) public class CopyToLocalFile {  	/* 	 * 复制HDFS到本地文件 	 */ 	@Test 	public void testCopyFromLocalFile() throws Exception { 		Configuration conf = new Configuration(); 	FileSystem hdfs = FileSystem.get( new URI("hdfs://192.168.142.139:9000"), conf, "root"); 		Path dstFile = new Path("D:\ebook_mysql2.sql"); 		Path srcFile = new Path("/hdfs/ebook.txt"); 		hdfs.copyToLocalFile(srcFile, dstFile);	 	}  } 

5.3.8 删除文件
public boolean delete(Path f,boolean recursive);
参数2 recursive表示是否进行递归删除。如果f是一个文件或空目录,那么recursive的值就会被忽略。

public class HdfsDeleteFile {  	// 获取HADOOP FileSystem对象 	private FileSystem fs = null; 		/** 	 * 删除文件 	 */ 	@Test 	public void DeleteFile() throws Exception { 		Configuration conf = new Configuration(); 		FileSystem hdfs = FileSystem.get( new URI("hdfs://192.168.142.139:9000"), conf, "root"); 		Path dfs = new Path("/hdfs/new.txt"); 		hdfs.delete(dfs,true); 	}  } 

文件查询

FileStatus封装了文件的元数据,通过这个对象可以获得文件路径,文件大小等信息。

public class HdfsFileStatus { 	// 获取HADOOP FileSystem对象 	private FileSystem fs = null;  	/** 	 * 文件信息 	 * */ 	@Test 	public void ReadFile() throws Exception { 		Configuration conf = new Configuration(); 		FileSystem hdfs = FileSystem.get(new URI("hdfs://192.168.142.139:9000"), conf, "root"); 		Path dfs = new Path("/hdfs/ss.txt"); 		FileStatus stat = hdfs.getFileStatus(dfs); 		System.out.println("文件路径:"+stat.getPath()); 		System.out.println("文件大小:"+stat.getLen()); 		System.out.println("副本数量:"+stat.getReplication()); 		System.out.println("用户:"+stat.getOwner()); 		System.out.println("权限:"+stat.getPermission().toString()); 	}  } 

如果我们希望列出HDFS目录下的文件,可以使用listStatus()方法列出目录内容。

public class HdfsListFileStatus { 	// 获取HADOOP FileSystem对象 	private FileSystem fs = null;  	/** 	 * 列出文件信息 	 * */ 	@Test 	public void ReadFile() throws Exception { 	Configuration conf = new Configuration(); 		FileSystem hdfs = FileSystem.get( new URI("hdfs://192.168.142.139:9000"), conf, "root"); 		Path dfs = new Path("/hdfs"); 		FileStatus[] states = hdfs.listStatus(dfs); 		for(FileStatus stat:states){ 			System.out.println(stat.getPath()); 		} 	}  }	 

重命名文件

public class HdfsRenameFile {  	// 获取HADOOP FileSystem对象 	private FileSystem fs = null;  	/** 	 * 删除文件 	 */ 	@Test 	public void DeleteFile() throws Exception { 		Configuration conf = new Configuration(); 		FileSystem hdfs = FileSystem.get( new URI("hdfs://192.168.142.139:9000"), conf, "root"); 		Path src = new Path("/hdfs/ss.txt"); 		if(hdfs.exists(src)){ 			Path dst = new Path("/hdfs/new2.txt"); 			hdfs.rename(src, dst); 		} 		else{ 			System.out.println("文件不存在!!!"); 				} 	}  } 

陈晨数据工程师

关于作者: 陈晨数据工程师

为您推荐

广告位

发表评论