(五)IntelliJ IDEA操作HDFS
发布日期:2021-05-16 12:59:42 浏览次数:17 分类:精选文章

本文共 3389 字,大约阅读时间需要 11 分钟。

导入 HDFS jar 包

在 HDFS 开发过程中,若项目使用 Maven,应将相关 HDFS 依赖添加到项目的 pom 文件中,需与 Hadoop 版本匹配。首次下载可能较慢,请耐心等待。

Maven 项目依赖配置

在 pom.xml 添加以下依赖:

org.apache.hadoop
hadoop-common
2.6.5
org.apache.hadoop
hadoop-hdfs
2.6.5
org.apache.hadoop
hadoop-client
2.6.5

以上配置适用于 Maven 项目,需根据实际 Hadoop 版本调整。

非 Maven 项目环境配置

若不使用 Maven,需手动添加 HDFS 核心和相关客户端 jar 包,建议将以下路径加入类路径:

  • /usr/local/hadoop/share/hadoop/common/ 下的 hadoop-common-2.6.5.jarhadoop-nfs-2.6.5.jar
  • /usr/local/hadoop/share/hadoop/common/lib/ 下的所有 jar 包(包括依赖)
  • /usr/local/hadoop/share/hadoop/hdfs/ 下的 hadoop-hdfs-2.6.5.jarhadoop-hdfs-nfs-2.6.5.jar
  • /usr/local/hadoop/share/hadoop/hdfs/lib/ 下的所有 jar 包
  • 确保上述路径符合你的实际 Hadoop 安装目录,部署前需确认路径号误。


    编写 Java 程序

    以下是两组用于操作 HDFS 的 Java 代码示例。

    检查 HDFS 中文件是否存在

    package Hadoop.demo;import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.FileSystem;import org.apache.hadoop.fs.Path;public class HdfsTest {    public static void main(String[] args) {        try {            String fileName = "/text/test.txt";            Configuration conf = new Configuration();            conf.set("fs.defaultFS", "hdfs://master:9000");            conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");                        FileSystem fs = FileSystem.get(conf);            if (fs.exists(new Path(fileName))) {                System.out.println("文件存在");            } else {                System.out.println("文件不存在");            }        } catch (Exception e) {            e.printStackTrace();        }    }}

    读取 HDFS 文件内容

    package Hadoop.demo;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 java.io.BufferedReader;import java.io.InputStreamReader;public class HdfsRead {    public static void main(String[] args) {        try {            Configuration conf = new Configuration();            conf.set("fs.defaultFS", "hdfs://master:9000");            conf.set("fs.hdfs.impl", "org.apache.hadoop.hdfs.DistributedFileSystem");                        FileSystem fs = FileSystem.get(conf);            Path file = new Path("/text/test.txt");            FSDataInputStream in = fs.open(file);                        BufferedReader reader = new BufferedReader(new InputStreamReader(in));            String line = reader.readLine();            System.out.println(line);                        reader.close();            in.close();            fs.close();        } catch (Exception e) {            e.printStackTrace();        }    }}

    常见问题与解决方案

    运行代码可能出现以下错误:

    错误示例:

    Cannot start process, the working directory 'J:\HadoopTest\HadoopTest' does not exist

    解决方法:

  • 检查工作目录是否存在:

    • 确保项目根目录路径正确,建议检查 HadoopTest 文件夹是否存在或路径是否符合你的操作系统。
  • 检查相关 Hadoop 服务是否运行:

    • 在任务栏任务栏右下角(Win)的运行栏中,检查 Hadoop 的程序是否正在运行:
    C:\regular\bin\hadoop.cmd
    • 确保 Hadoop 服务在运行,特别是在本地主机是否有 namenode 和 datanode 的错误日志。
  • 处理版本不兼容问题:

    • 检查 Hadoop 版本和项目中使用的依赖版本是否相匹配,确保没有类似 版本不兼容 的错误提示。
  • 手动创建工作目录:

    • 指定当前项目根目录为工作目录:
    chdir J:\HadoopTest\HadoopTest
    • 或直接在工作目录下运行代码:J:\HadoopTest\HadoopTest\helloWorld.bat
  • 注意:

    • HDFS 是分布式存储,需正确配置网络(jomux)的情况下才能正常工作,请根据实际 [Hadoop 集群配置](http:// hurts:123@ UINavigationController-/search?q=hadoopcluster) 满足网络环境。

    • 建议将 Hadoop 服务 (hadoop-daemon) 设置为服务的形式运行,这样在后台管理和停止更为简便。

    上一篇:(九)关于MapReduce的认识
    下一篇:(四)HDFS 的认识和 shell 操作

    发表评论

    最新留言

    留言是一种美德,欢迎回访!
    [***.207.175.100]2025年04月23日 08时09分19秒