Eclipse配置Hadoop开发环境+HDFS Java API测试

AI权益加码!Claude Code、Cursor等20+工具免费用! 购周边限时加赠Coding Plan Lite,畅享主流AI工具!学习进阶更高效! 阅读详情

1. 添加插件

下载在Windows Eclipse上需要的一些额外的文件:hadoop-eclipse-plugin-2.6.0.jar
在eclipse安装目录的dropins目录下新建plugin文件目录,把上面下载的jar包放入plugin文件夹下。
在这里插入图片描述

2. 在Windows上安装Hadoop2.6.0

(1)在本地安装Hadoop

注意本机安装的hadoop运行环境要和自己搭建的集群一致,如果不一致,则会出现异常,当然如果版本不一致,也可以覆盖原来下载解压的bin目录。
在这里插入图片描述

(2)配置Hadoop的环境变量

HADOOP_HOME=D:\hadoop\hadoop-common-2.2.0-bin-master
Path=D:\hadoop\hadoop-common-2.2.0-bin-master\bin

在这里插入图片描述

(3)重启Eclipse(File->Restart)

正常:点击如下田字格图标,出现“小象”Map/Reduce的图标:
在这里插入图片描述
异常:找不到“小象”Map/Reduce的图标,重复启动eclipse依然无效:

解决参考:
这种现象一般由于安装在eclipse\plugins下的插件没有导入的问题。解决方法:把eclipse\configuration\org.eclipse.update 删除掉。出现这种情况的原因是在你安装新的插件以前你启动过 eclipse ,在 org.eclipse.update 文件夹下记录了插件的历史更新情况,它只记忆了以前的插件更新情况,而你新安装的插件它并不记录。

根据上面的思路,我将\Eclipse\java-photon\eclipse\configuration\org.eclipse.update\下原先的文件platform.xml删掉,然后重启Eclipse(File->Restart),这次小象的图标就出现了,而且在Window–>Preferences下也出现了Hadoop Map/Reduce。

当然也有说法是eclipse版本问题,也可以重装eclipse,但是不建议使用(太麻烦)。

3. 创建连接(测试集群)

右击小象图标,添加连接,配置如图所示信息

如图可以配置成集群的主机名,也可以配置成集群的ip,但要注意自己的端口号(与配置文件一致)

若是配置成主机ip,要记得修改本机的host文件,做好主机名与ip的映射

在这里插入图片描述

4. API代码测试

1,导入集群hadoop安装目录的相关jar包

2,测试java代码

package com.hpe.wangpan.test;
import java.io.FileNotFoundException;
import java.io.IOException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
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.FileUtil;
import org.apache.hadoop.fs.HdfsBlockLocation;
import org.apache.hadoop.fs.Path;

import com.sun.xml.bind.v2.schemagen.xmlschema.List;

/**
 * 1、查看文件
 * 2、创建新文件夹
 * 3、上传文件
 * 4、下载文件
 * 5、删除文件
 * 6、内部移动
 * 7、内部复制
 * 8、重命名
 * 9、创建新的文件
 * 10、写文件
 * 11、读文件内容
 * @author eversec
 *
 */
public class AppTest {
	public static void main(String[] args) throws IOException {
		//操作HDFS之前得先创建配置对象
		Configuration conf = new Configuration(true);
		//创建操作HDFS的对象
		FileSystem fs = FileSystem.get(conf);
		
		//查看文件系统的内容
//		List list = listFileSystem(fs,"/");
		//创建文件夹
		//createDir(fs,"/test");
		
		//上传文件
//		uploadFileToHDFS(fs,"d:/wc","/test/abc/");
		
		//下载文件
//		downLoadFileFromHDFS(fs,"/test.txt","d:/");
		
		//删除.....
		
		//重命名
//		renameFile(fs,"/test/abc/wc","/test/abc/Angelababy");
		
		//内部移动 内部复制
//		innerCopyAndMoveFile(fs,conf,"/test/abc/Angelababy","/");
		
		//创建一个新文件
//		createNewFile(fs,"/test/abc/hanhong");
		
		//写文件
		writeToHDFSFile(fs,"/qq.txt","hello world");
		//追加写
//		appendToHDFSFile(fs,"/qq.txt","\nhello world");
		
		//读文件内容
		//readFromHDFSFile(fs,"/test.txt");
		
		//获取数据的位置
		//getFileLocation(fs,"/install.log");
	}

	private static void getFileLocation(FileSystem fs, String string) throws IOException {
		FileStatus fileStatus = fs.getFileStatus(new Path(string));
		long len = fileStatus.getLen();
		BlockLocation[] fileBlockLocations = fs.getFileBlockLocations(fileStatus, 0, len);
		String[] hosts = fileBlockLocations[0].getHosts();
		for (String string2 : hosts) {
			System.out.println(string2);
		}
		
		HdfsBlockLocation blockLocation = (HdfsBlockLocation)fileBlockLocations[0];
		long blockId = blockLocation.getLocatedBlock().getBlock().getBlockId();
		System.out.println(blockId);
	}

	private static void readFromHDFSFile(FileSystem fs, String string) throws IllegalArgumentException, IOException {
		FSDataInputStream inputStream = fs.open(new Path(string));
		
		FileStatus fileStatus = fs.getFileStatus(new Path(string));
		
		
		
		//long len = fileStatus.getLen();
		
		byte[] b = new byte[1024];
		int read = inputStream.read(b);
		while(inputStream.read(b) != -1){
			System.out.println(new String(b));
		}
		
		
	}

	private static void appendToHDFSFile(FileSystem fs, String filePath, String content) throws IllegalArgumentException, IOException {
		FSDataOutputStream append = fs.append(new Path(filePath));
		append.write(content.getBytes("UTF-8"));
		append.flush();
		append.close();
	}

	private static void writeToHDFSFile(FileSystem fs, String filePath, String content) throws IllegalArgumentException, IOException {
		 FSDataOutputStream outputStream = fs.create(new Path(filePath));
		 outputStream.write(content.getBytes("UTF-8"));
		 outputStream.flush();
		 outputStream.close();
	}

	private static void createNewFile(FileSystem fs, String string) throws IllegalArgumentException, IOException {
		fs.createNewFile(new Path(string));
	}

	private static void innerCopyAndMoveFile(FileSystem fs, Configuration conf,String src, String dest) throws IOException {
		Path srcPath = new Path(src);
		Path destPath = new Path(dest);
		
		//内部拷贝
//		FileUtil.copy(srcPath.getFileSystem(conf), srcPath, destPath.getFileSystem(conf), destPath,false, conf);
		//内部移动
		FileUtil.copy(srcPath.getFileSystem(conf), srcPath, destPath.getFileSystem(conf), destPath,true, conf);
	}

	private static void renameFile(FileSystem fs, String src, String dest) throws IOException {
		Path srcPath = new Path(src);
		Path destPath = new Path(dest);
		
		fs.rename(srcPath, destPath);
	
	}

	private static void downLoadFileFromHDFS(FileSystem fs, String src, String dest) throws IOException {
		Path srcPath = new Path(src);
		Path destPath = new Path(dest);
		//copyToLocal
//		fs.copyToLocalFile(srcPath, destPath);
		//moveToLocal
		fs.copyToLocalFile(false,srcPath, destPath,true);
	}

	private static void uploadFileToHDFS(FileSystem fs, String src, String dest) throws IOException {
		Path srcPath = new Path(src);
		Path destPath = new Path(dest);
		//copyFromLocal
		fs.copyFromLocalFile(srcPath, destPath);
		//moveFromLocal
		//fs.copyFromLocalFile(true,srcPath, destPath);
	}

	private static void createDir(FileSystem fs, String string) throws IllegalArgumentException, IOException {
		Path path = new Path(string);
		if(fs.exists(path)){
			fs.delete(path, true);
		}
		fs.mkdirs(path);
	}

	private static List listFileSystem(FileSystem fs, String path) throws FileNotFoundException, IOException {
		Path ppath = new Path(path);
		
		FileStatus[] listStatus = fs.listStatus(ppath);
		
		for (FileStatus fileStatus : listStatus) {
			System.out.println(fileStatus.getPath());
		}
		
		return null;
	}
}

5. 问题分析总结

1, 在Eclipse可以手动创建连接,但是不能上传,下载,重命名文件?
原因:1,没有配置本机host文件
           2,解决方案:修改本机的host文件(c:\windows\system32\drivers\etc),添加主机名和ip映射(和集群配置相同)。

2, 权限问题
原因:由于我们本机一般都是window系统,用户名一般都是Administrator,而我们hdfs创建的文件权限依赖于linux系统,一般是root权限,所以无法访问,报告权限错误。
解决方案: ①更改本机的用户名(小人模式,不建议使用)
                   ②更改HDFS根目录的权限(设置为777)
                      Hdfs dfs –chmod –R 777 /

3, 可以上传文件,但数据丢失,文件大小显示0,而且无法打开查看。
原因:①防火墙没有全部关闭
           ②所用的hadoop-common-2.2.0-bin-master版本与集群的hadoop版本不一致
           ③依旧是权限问题
4, 导入hadoop-eclipse-plugin-2.6.0.jar后,重启eclipse,一直出现异常,且关闭不了。
原因:项目中导入的api架包冲突
解决方案,导入精简版的jar包

大数据(四)---------在Eclipse上搭建Hadoop开发环境,HDFS---API简单实现 Eclipse环境搭建: 1.保证电脑上已经配置JDK 2.配置hadoop的环境变量,变量名:HADOOP_HOME,变量值:hadoop的路径 修改Path路径----->新增 %HADOOP_HOME%\bin 在系统变量中新建HADOOP_USER_NAME,值为root 3.配置eclipse环境 ①在eclipse启动之前,将hadoop-eclipse-... 阅读详情

相关推荐

EclipseJava操作HDFS的完整API开发指南

HDFSHadoop Distributed File System)是专为大数据处理而设计的分布式文件系统,具备高容错性、高吞吐量等特性。HDFS API 提供了丰富的 Java 接口,便于开发者构建基于 Hadoop 的数据存储与处理应用。HDFS API 的主要类位于包中,核心类包括:类名职责FileSystem抽象类,提供对文件系统的通用操作,如打开、创建、删除文件等。Path表示文件或目录的路径,支持 URI 格式和本地路径。

weixin_42515842的博客 862

Hadoop学习(2)Eclipse配置Hadoop开发环境+HDFS Java API测试+Bug解决记录

目录 参考: 1. 添加插件 2. 在Windows上安装Hadoop2.9.11)在本地安装Hadoop (2)配置Hadoop的环境变量 (3)修改hadoop-env.cmd文件中的JAVA_HOME (4)添加Windows支持文件(winutils.exe,hadoop.dll) (5)重启Eclipse(File->Restart) 3. Eclipse中的...

小白的专栏 5461

使用Eclipse搭建Hadoop编程环境

在前人的基础上,进行总结学习,发现bug,修改bug。系统平台:Ubuntu14.04TLS(64位)Hadoop环境:Hadoop2.7.1Eclipse插件:hadoop-eclipse-plugin-2.7.1.jar。

m0_67393157的博客 5258

(HDFS)搭建eclipse搭建hadoop开发平台以及hdfs api调用——大数据分析及其可视化4

在linux下成功的启动hadoop集群后回到windows下搭建eclipse开发平台 1.安装hadoop插件 右击图表选择属性 打开文件所在位置 进入plugins文件夹 将插件赋值到plugins文件夹 打开eclipse 先点击视图添加 再选择Map/reduc视图 将linux配置好的的hadoop文件发到windows下 在主节点下 选择hadoop文件直接拖到windows的盘符下 打开eclipse点击工具栏window-&...

weixin_53472653的博客 4004

初学(17)——Windows 环境下Eclipse开发Hadoop环境设置

Windows 环境下Eclipse开发Hadoop环境设置

Zero-to-Hero的博客 238

windows下,用eclipse连接虚拟机中的hadoop

1. 前言 1.1 目标 具体目标是: 在windows 上能够使用eclipse连接Centos系统上部署的hadoop进行开发与测试 1.2 软硬件要求 硬件要求: 三台普通PC。 当然使用虚拟机也可以,本环境搭建也是VMWare10虚拟机上进行的。 软件要求: 操作系统:Centos7.1Hadoop版本: ha

温润如风的博客 7024

hadoop配置eclipse开发环境

hadoop配置eclipse开发环境.前言 由于大三学习需要,而且网上的教程都有点模糊,导致我走了不少弯路,因此我写下这篇博客,本文仅供参考,如果有不足之处,还望指出。 二.安装eclipse 1.下载eclipse jee neon版 这里附上下载链接,当然你也可以前往官网自行下载: http://www.eclipse.org/downloads/download.php?file=/technology/epp/downloads/release/neon/1a/eclipse-jee-neo

weixin_45654619的博客 5113

HDFS API编程 (Eclipse Maven工程)

之前写过一篇HDFS API编程 (Windows eclipse Java工程),是用普通的java工程手动导入相关的jar包来完成的。这次博客改用Maven工程,通过Maven来管理相关的jar包,只需要添加相关依赖,便自动完成相关jar包的下载与导入。 前提条件: Linux下安装好Hadoop2.7.3 Windows下安装好Maven3.3.9 Windows系统下安装好e...

大头皮鞋的博客 7876

Hadoop技术(一)分布式文件系统HDFS

Hadoop介绍 HDFS理论 HDFS集群搭建 CLI使用 API使用 第一章 统一思维 单机大数据处理实现以及问题 问题引入 问题 1T 文件,有数字,按行存储 ,每行不是特别长 要求 找出存在的重复行(假设只有两行) 全排序 单词重复数 环境 只有一台计算机 ,要求在 128M,64M,256G的环境下都能够运行 注意 内存不能放下全量数据 ,最大xxMB !!! 我的思路: 比较法...

时间静止 5238

HDFS命令和 JAVA API安装实验报告

1 实验目的 1.理解HDFSHadoop体系结构中的角色; 2.熟练使用HDFS操作常用的shell命令; 3.熟悉HDFS操作常用的Java API. 2 实验平台 操作系统:Linux Hadoop版本:2.6.0或以上版本 JDK版本:1.6或以上版本 Java IDE:Eclipse 3.实验内容 Linux的shell命令 常用的linux的shell命令: cd /a...

weixin_44312173的博客 2509

Java API 操作 HDFS

使用Java API 操作HDFS 本文主要介绍如何使用Hadoop提供的HDFS Java API来操作HDFS分布式文件系统。主要让初学者学会使用eclipse来开发HDFS的一些步骤和简单的一些操作,比如创建目录,上传文件、下载文件等。目的是让初学者更好的理解分布式文件系统,掌握如何操作分布式文件系统HDFS的一些方法和技巧。 步骤如下: (1)创建Java工程,需要在工程中创建一个lib包...

聚焦大数据、AI、数据库三大核心领域,分享 Flink/Spark 实时计算、数仓架构设计、AI 模型落地、数据库性能调优的实战干货,附可直接运行的源码与方案。提供企业技术内训、项目咨询与定制化服务,助力开发者与企业高效搞定数智技术难题。 1175

Hadoop分布式文件系统HDFSJAVA-API实战

Hadoop分布式文件系统HDFS的实战 HDFS JAVA API 搭建Linux下Eclipse开发环境eclipse-jee-juno-SR2-linux-gtk-x86_64.tar.gz和hadoop-eclipse-plugin-2.7.1.jar上传/usr/local目录下解压 [root@hadoop0 local]# tar -xvf eclipse-jee-juno-SR2-linux-gtk-x86_64.tar.gz 为Eclipse安装Hadoop插件 图片15

weixin_44325370的博客 489

Hadoop 安装与 HDFS 基础实践

一、环境 (1)操作系统:Linux (Ubuntu 20.04) (2)Hadoop 版本:3.3.2 (3)JDK 版本:1.8 或者以上版本 (4)Java IDE:Eclipse 二、教程步骤 (1Hadoop 安装 该安装指南是在第一次实验的虚拟机中完成,所以例如安装 vim、更新 apt 或者换源等操作省去。若同学们创建新的虚拟机完成,则需要自行重新安装配置。 有同学在实验1中安...

一个怕卷de小孩纸的博客 3676

实验二、熟悉常用的HDFS操作(HDFS JavaAPI之读取/上传/删除文件)

一、实验目的 理解HDFSHadoop体系结构中的角色 熟练使用HDFS操作常用的shell命令 熟悉HDFS操作常用的Java API 二、实验平台 操作系统:CentOS 8 Hadoop版本:3.3.1 jdk版本:1.8 Java IDE:Eclipse 三、实验内容 1. 使用Hadoop命令操作分布式文件系统。 新建目录 在本地和hadoop中分别创建文件夹: 在本地创建目录: Hadoop创建目录: 上传文件至dfs 切换到本地input目录下,创建文件并添加数据:hel

Lilianach的博客 1万+

eclipse上面读写hdfs中的文件

准备工作: 1.在创建工程之前,我们需要将hadoop的所有jar准备好。解压之后如图所示。 2.里面jar包非常全面,我们将所有jar包复制出来。在搜索框中输入.jar搜索。然后将所有jar包拷贝出来。 3.除了我们创建工程的jar包之外,还有source包和test包。我们分别创建_source和_test 文件夹,将里面的source包和test包剪切出来。 拷贝完成! 注:- x...

韩韩的博客 2871

使用Java操作Hadoop API

Hadoop的环境一旦搭建完成,我们就可以进行Hadoop应用开发了,可以进行Hadoop开发的程序语言有多种选择,比如JAVA,python,ruby等等。这里我们选择JAVA语言进行开发(语言无所谓好坏,看你擅长什么喜欢什么了)。因为我选择了JAVA语言,也就选择了eclipse开发工具,这里我用的是eclipse-java-oxygen-R-win32-x86_64,当然,Hadoo

kestiny的专栏 2928

Hadoop连接HDFS进行API操作

1、概述 Hadoop提供了JavaAPI用于处理程序的开发及应用,搭建开发环境能够方便大型程序的开发与调试,完成的代码无需部署,通过eclipse就能执行并输出结果,代码直接从HDFS读取并输出数据。 2、所需文件 ...

dj_hanhan的博客 789

学习Hadoop(三)EclipseJava代码操作HDFS及初识MapReduce

一、Eclipse中准备开发环境。 准备:解压hadoophadoop-src.建立hadoop-lib目录放入所有jar包。bin下替换一下。还有hadoop.dll放入system32下。 这个放入eclipse下plugins下。 1配置环境变量:HADOOP_HOME,加到PATH中(与jdk类似,不再描诉),配置HADOOP_USER_ROOT(值为root) ...

赵俊杰 611

HDFS API编程 (Windows eclipse Java工程)

前提条件: Linux系统下安装好Hadoop2.7.3 Windows系统下安装好eclipse 步骤: 新建java工程 打开eclipse,新建一个普通java工程, File–>New–>Java Project 在Project name写入项目名称, 点击Finish 新建好项目,可以看到项目的目录结构如下: 为项

大头皮鞋的博客 8483
上一篇: 高可用完全分布式搭建
下一篇: MapReduce的原理及执行过程
huanMaLi
博客等级 码龄8年 25粉丝 24原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值