大数据第三天————IDEA下自定义 HDFS API基本操作(封装hdfs基本操作)

最近研究了一波HDFS基本操作,如果java代码写的话,会非常麻烦,所以我封装了一下一些主要的HDFS操作。而且正常使用命令行操作,是看不到成功与否,所以在封装类里面增加了结果打印情况,发现查看hadoop的基本操作。同时还增加了批量操作的封装。

目录

1.封装函数的接口

 2.封装函数的实现

3.实例应用

4.运行截图

1.封装函数的接口

import java.io.IOException;
import java.net.URISyntaxException;

/**
 * Title:    IHDFS
 * Description:    hdfs操作接口
 *
 * @author dtt
 * @data 2018-09-05 16:46
 **/

public interface IHDFS {
//    显示文件
    void cat(String folder) throws IOException, URISyntaxException;
//    删除文件
    void rm(String folder) throws IOException, URISyntaxException;
//    删除多个文件
    void rms(String[] folders) throws IOException, URISyntaxException;
//    下载文件
    void get(String remote,  String local) throws IllegalArgumentException, IOException, URISyntaxException;
//    下载多个文件
    void gets(String[] remotes,  String[] locals) throws IllegalArgumentException, IOException, URISyntaxException;
//    上传文件
    void put(String local, String remote) throws IOException, URISyntaxException;
//    上传多个文件
    void puts(String[] locals, String[] remotes) throws IOException, URISyntaxException;
//    递归列出所有目录
    void lsr(String folder) throws IOException, URISyntaxException;
//    列出所有目录
    void ls(String folder) throws IOException, URISyntaxException;
//    删除目录
    void rmr(String folder) throws IOException, URISyntaxException;
//    删除多个目录
    void rmrs(String[] folder) throws IOException, URISyntaxException;
//    创建目录
    void mkdir(String folder) throws IOException, URISyntaxException;
//    创建多个目录
    void mkdirs(String[] folders) throws IOException, URISyntaxException;
//    重命名文件
    void rename(String old, String now) throws IOException, URISyntaxException;

//    待更新...
}

 2.封装函数的实现

package cn.tedu.utils;

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

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


/**
 * Title:    HDFS
 * Description:    工具分装
 *
 * @author dtt
 * @data 2018-09-05 15:38
 **/

public class HDFS implements IHDFS{
    private String url;
    private Configuration conf;
    private FileSystem fs
<think>好的,用户现在问的是如何在IntelliJ IDEA中连接HDFS。我需要先回顾之前的对话历史,用户之前询问过Hadoop学生信息管理系统的数据分析代码,我给出了从数据准备到MapReduce和Hive的步骤。现在用户的问题更偏向于开发环境配置,可能是在实际开发中遇到了如何将IDEAHDFS连接的问题。 首先,用户可能正在使用IntelliJ IDEA进行Hadoop相关的开发,需要直接访问HDFS上的文件。这可能涉及到编写或调试MapReduce作业,或者需要直接在IDE中操作HDFS。用户可能是开发者,对Hadoop有一定了解,但可能不太清楚如何在IDEA中配置和连接HDFS。 接下来,我需要考虑连接HDFS的几种方式。常见的有使用Hadoop的Java API,或者第三方库比如Hadoop HDFS Client。另外,用户可能还需要了解配置的核心参数,比如fs.defaultFS,以及权限问题,比如是否关闭HDFS的权限检查,或者配置用户身份。 另外,用户可能在使用过程中遇到常见问题,比如连接超时、权限拒绝、依赖冲突等,需要给出解决方法。需要详细说明每一步的操作,比如如何添加Maven依赖,如何编写代码示例,以及配置文件的设置。 可能还需要提醒用户注意Hadoop和Java版本的兼容性,因为不同版本的Hadoop可能有不同的依赖需求。此外,用户可能需要测试连接是否成功,比如通过简单的文件操作来验证。 最后,要确保回答结构清晰,分步骤讲解,便于用户跟随操作。同时,提供优化建议和注意事项,帮助用户避免常见陷阱,比如权限配置、依赖管理和网络设置。</think>在IntelliJ IDEA中连接HDFS主要涉及Java API编程实现,以下是具体操作步骤和关键代码示例: --- ### 一、环境准备 1. **Maven依赖配置** (pom.xml) ```xml <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>3.3.4</version> <!-- 需与集群版本一致 --> </dependency> ``` 2. **Hadoop配置文件 - 将集群的`core-site.xml`和`hdfs-site.xml`复制到项目的`resources`目录 - 关键配置项: ```xml <!-- core-site.xml --> <property> <name>fs.defaultFS</name> <value>hdfs://namenode:9000</value> <!-- 替换实际地址 --> </property> ``` --- ### 二、基础连接方式 #### 方法1:通过FileSystem API ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; public class HDFSConnector { public static void main(String[] args) throws Exception { Configuration conf = new Configuration(); // 加载配置文件(自动读取resources目录下的xml) FileSystem fs = FileSystem.get(conf); // 测试连接 boolean isConnected = fs.exists(new Path("/")); System.out.println("HDFS连接状态: " + (isConnected ? "成功" : "失败")); fs.close(); } } ``` #### 方法2:指定用户身份连接 ```java FileSystem fs = FileSystem.get( new URI("hdfs://namenode:9000"), conf, "hadoopuser" // 具有HDFS操作权限的用户 ); ``` --- ### 三、常用操作示例 #### 1. 文件列表查看 ```java RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true); while (files.hasNext()) { LocatedFileStatus file = files.next(); System.out.println("文件路径: " + file.getPath()); } ``` #### 2. 文件上传/下载 ```java // 上传本地文件到HDFS fs.copyFromLocalFile( new Path("localfile.txt"), new Path("/hdfs/path/") ); // 下载HDFS文件到本地 fs.copyToLocalFile( new Path("/hdfs/file.txt"), new Path("local_copy.txt") ); ``` #### 3. 创建目录 ```java if (!fs.exists(new Path("/new_folder"))) { fs.mkdirs(new Path("/new_folder")); } ``` --- ### 四、连接优化配置 1. **参数调优** (hdfs-site.xml) ```xml <property> <name>dfs.client.use.datanode.hostname</name> <value>true</value> <!-- 解决内网域名解析问题 --> </property> ``` 2. **Kerberos认证配置** (安全集群) ```java conf.set("hadoop.security.authentication", "kerberos"); UserGroupInformation.setConfiguration(conf); UserGroupInformation.loginUserFromKeytab( "user@REALM", "/path/to/keytab/file.keytab" ); ``` --- ### 五、常见问题解决 | 问题现象 | 解决方案 | |---------------------------|--------------------------------------------------------------------------| | Connection refused | 1. 检查HDFS服务状态<br>2. 确认防火墙开放50070/9000端口 | | Permission denied | 1. 添加用户身份参数<br>2. 执行`hdfs dfs -chmod 777 /path` 修改权限 | | No FileSystem for scheme | 检查`core-site.xml`中fs.defaultFS的协议头(hdfs://)是否正确 | | ClassNotFoundException | 确保hadoop-client依赖版本与集群一致 | --- ### 六、调试建议 1. 在IDEA的`VM options`中添加: ``` -Dorg.slf4j.simpleLogger.defaultLogLevel=debug -Djava.library.path=/path/to/hadoop/native/libs ``` 2. 使用HDFS CLI验证基础连接: ```bash hdfs dfs -ls hdfs://namenode:9000/ ``` --- **注意事项:** 1. Windows开发需配置`hadoop.dll`和`winutils.exe` 2. 保持Hadoop客户端与服务器版本一致 3. 网络策略需允许IDE机器访问Hadoop集群端口 实际开发中建议封装HDFS工具类,集成以下功能: - 自动重连机制 - 连接池管理 - 异常统一处理 - 进度监控回调
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值