在eclipse上安装Hadoop插件

第一步

在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:\Hadoop\hadoop-2.6.5\bin\下替换原有的winutils.exe文件
在这里插入图片描述
(2)重启eclipse,配置hadoop installation directory。 如果安装插件成功,打开Window–>Preferences,你会发现Hadoop Map/Reduce选项,在这个选项里你需要配置Hadoop installation directory。配置完成后退出。
在这里插入图片描述
(3)配置Map/Reduce Locations。
在Window–>Show View中打开Map/Reduce Locations。
在这里插入图片描述
修改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。
在这里插入图片描述
在这里插入图片描述
(6)配置完后点击Finish退出。点击DFS Locations–>Hadoop如果能显示文件夹,说明配置正确,如果显示"拒绝连接",请检查你的配置或防火墙是否关闭。
在这里插入图片描述
注意:这时一定要关闭linux防火墙,如果不加的话会连接不上。
(7)上传模拟数据文件夹。
通过Hadoop的命令在HDFS上创建目录/hdfs,命令如下
[root@hdoop Desktop]# hdfs dfs –mkdir /hdfs
然后我们在eclipse上单击“DFS Locations”右键选择“reconnect”下,然后发现文件夹变成(4)了,如图所示。
在这里插入图片描述

eclipse连接虚拟机

(1)打开 Eclipse开发工具,单击File选择“New”→“Java project”,新建名称为“ Hadoop的Java项目,单击右键“ hadoop项目,选择“New”→“ Package”,如图所示。
在这里插入图片描述
(2)输入包名称“ com.hdfs”,单击“Finish”按钮,如图所示。
在这里插入图片描述
(3)新建java类,选中包名并单击右键,选择“New”→“ Class”,如图所示。
在这里插入图片描述
(4)在name项输入“HdfsTest " 类名称,单击" Finish”按钮完成,如图所示。
在这里插入图片描述
(5)在创建的项目目录下创建文件夹lib,通过选中文件夹“src”并点击右键,选择“New”→“SourceFolder”,在“Folder name”项输入lib,然后点击“finish”,如图所示。
在这里插入图片描述
(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”,等待执行结果,如图所示。
在这里插入图片描述
(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("文件不存在!!!");
				}
	}

}
  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值