HDFS操作02(遇到的问题和解决)

news/2024/12/26 14:43:57/文章来源:https://www.cnblogs.com/aixin52129211/p/18632790

编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。

 

查看Java帮助手册或其它资料,用“java.net.URL”“org.apache.hadoop.fs.FsURLStreamHandlerFactory”编程完成输出HDFS中指定文件的文本到终端中。

 

 

 

 

实验内容与完成情况:

 

编程实现一个类“MyFSDataInputStream”,该类继承“org.apache.hadoop.fs.FSDataInputStream”,要求如下:实现按行读取HDFS中指定文件的方法“readLine()”,如果读到文件末尾,则返回空,否则返回文件一行的文本。

编程代码:

package hdfs;

 

import hdfs.HDFSConfig;

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.IOException;

import java.io.InputStreamReader;

 

public class MyFSDataInputStream extends FSDataInputStream {

    private final BufferedReader bufferedReader;

 

    public MyFSDataInputStream(FSDataInputStream fsDataInputStream) {

        super(fsDataInputStream.getWrappedStream());

        this.bufferedReader = new BufferedReader(new InputStreamReader(fsDataInputStream));

    }

 

    /**

     * 按行读取HDFS文件内容的方法。

     *

     * @return 文件中的一行内容,如果到达文件末尾则返回 null。

     * @throws IOException 读取文件过程中可能出现的异常。

     */

    public String hdfsReadLine() throws IOException {

        return bufferedReader.readLine();

    }

 

    @Override

    public void close() throws IOException {

        bufferedReader.close();

        super.close();

    }

 

    public static void main(String[] args) {

        try {

            // 初始化 HDFS 文件系统

            FileSystem fs = HDFSConfig.getFileSystem();

            Path filePath = new Path("/user/hadoop/movedTestFile.txt");

 

            // 检查文件是否存在

            if (!fs.exists(filePath)) {

                System.out.println("文件未找到: " + filePath);

                return;

            }

 

            // 打开文件

            FSDataInputStream fsDataInputStream = fs.open(filePath);

            MyFSDataInputStream myFSDataInputStream = new MyFSDataInputStream(fsDataInputStream);

 

            // 按行读取文件

            String line;

            System.out.println("按行读取文件内容:");

            while ((line = myFSDataInputStream.hdfsReadLine()) != null) {

                System.out.println(line);

            }

 

            // 关闭流

            myFSDataInputStream.close();

            fs.close();

 

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

}

 

 

 

 

(三)查看Java帮助手册或其它资料,用“java.net.URL”和“org.apache.hadoop.fs.FsURLStreamHandlerFactory”编程完成输出HDFS中指定文件的文本到终端中。

package hdfs;

 

import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;

import java.io.BufferedReader;

import java.io.IOException;

import java.io.InputStream;

import java.io.InputStreamReader;

import java.net.URL;

public class HDFSFileViewer {

 

    public static void showFileContentFromHDFS(){

        try {

            String remotePath="/user/hadoop/movedTestFile.txt";

            URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());

            InputStream inputStream = new URL("hdfs","192.168.70.143",8020,remotePath.toString()).openStream();

            BufferedReader bufferedReader = new BufferedReader(new InputStreamReader(inputStream));

            String line = null;

            while ((line = bufferedReader.readLine()) != null){

                System.out.println(line);

            }

        } catch (IOException e) {

            e.printStackTrace();

        }

    }

 

    public static void main(String[] args) {

        showFileContentFromHDFS();

    }

}

 

 

 

出现的问题:

  1. 编程1时运行出错:

     

  2. put: /hdfs/destination/path': No such file or directory: hdfs://node1:8020/hdfs/destination/path'
  3. put: /local/file/path': No such file or directory
  4. 其实遇到最多的问题就是在本地文件系统中找不到指定的文件路径
  5. 这是一个和此实验内容无关,但是不解决还不行的问题。远程连接的问题,finalshell拒绝连接。我还试了shell发现也不行,最后找到了问题,在解决方案中写出。

 

 

解决方案(列出遇到的问题和解决办法,列出没有解决的问题):

  1. 路径问题:

 

 

如同实验1 中的方法,先用命令找到路径再根据自己虚拟机的路径调整。

  1. 编程问题:

这个问题我搜索了好多以往的博客,看了很多步骤,这个解决过程没有截图,所以直接来说一下我的思路:我一开始以为是master传过来的值为空的问题,设置了一些节点,验证之后发现不是代码的问题。然后我想过是路径的问题进行了一些修改,最后我发现是我的权限+路径问题拒绝连接,还是用户的权限不够后来我通过chat询问解决了权限的问题,在这个过程中还有偶尔忘记启动的情况。

  1. 远程连接失败:

先来说一下我开始去搜索的时候我找到的方法,但是这几个方法不是我需要的:

服务端的防火墙打开了,检查您的CentOS 7服务器是否已经安装并运行了SSH服务计算机与CentOS 7服务器在同一局域网内。请检查两台设备的IP地址是否在同一个网段,例如192.168.101.x

后来我发现了产生这个问题的原因是我有两个集群,但是我没有显卡不可以同时有两个同时用。这里我学到了两个方法,我后期更换集群的时候会用第二种。

1).修改本地主机的配置

 

 

 

 

 

 

 

 

 2.虚拟机网络编辑器:

 

 

 

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/859308.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

3083. 字符串及其反转中是否存在同一子字符串

给你一个字符串 s ,请你判断字符串 s 是否存在一个长度为 2 的子字符串,在其反转后的字符串中也出现。 如果存在这样的子字符串,返回 true;如果不存在,返回 false 。 示例 1: 输入:s = "leetcode" 输出:true 解释:子字符串 "ee" 的长度为 2,它也…

19款顶级测试用例管理工具全面解析

在当今数字化飞速发展的时代,软件测试的重要性日益凸显,而一款优秀的测试用例管理工具能够极大地提升测试效率与质量,帮助团队更高效地发现软件中的问题,确保产品的稳定性和可靠性。本文将为您全面解析19款顶级的测试用例管理工具,带您深入了解它们的特点与优势,助您在众…

OCR实践-Table-Transformer

前言 书接上文OCR实践—PaddleOCRTable-Transformer 与 PubTables-1M table-transformer,来自微软,基于Detr,在PubTables1M 数据集上进行训练,模型是在提出数据集同时的工作, paper PubTables-1M: Towards comprehensive table extraction from unstructured documents,发…

新能源汽车门店运营优化:项目管理工具的实践与探索

项目管理工具通过优化任务管理、增强团队协作、提升资源利用效率以及加强数据分析与决策支持等多个方面,显著提升了新能源汽车门店的运营效率。门店管理者应充分利用这些工具的功能和优势,不断优化门店的运营流程和管理方法,以应对日益激烈的市场竞争。项目管理工具在新能源…

摆线的参数方程

建立两个平面直角坐标系,一个是固定系\(O\),另一个是不定系\(O\),二者初始状态完全重合,置于一个半径为\(R\)的圆,圆上取其一点v\(\begin{pmatrix} 0& -R\end{pmatrix}^T\)旋转与平移矩阵——左乘矩阵 矢量u应升级为\(\begin{pmatrix} x& y&1\end{pmatrix}^…

vs2022 web项目F5调试停止后阻止浏览器自动关闭

默认停止调试会自动关掉swagger页面,如何不关闭?取消如图箭头所指向的勾选. 但是会导致每次F5会打开一个新的swagger: launchSettings.json中修改 "launchBrowser": false, 即可. 唯一不方便是第一次调试时,需要手动在浏览器里输入swagger地址.作者:xuejianxiyang出…

idea恢复文件,666

右击文件-Local History

HTML实现一个脱离video标签可拖拽的进度控制条

HTML实现一个脱离video标签可拖拽的进度控制条 主要用到html5的 input range 标签。 <!DOCTYPE html> <html> <body><video id="myVideo" width="320" height="240"><source src="http://***.com/record/st-ec-…

Windows交叉编译MNN-3.0.0安卓版本库(通过WSL2)

一、写在前面 昨天写了在WIN10上面通过Andriod Studio来编译MNN的demo,通过解压.apk文件来得到libMNN.so文件。今天在记录一下使用WSL2来编译MNN-Andriod。 二、WSL2的安装 由于不是本篇的主题,故不在这里进行展开,后续会补充步骤链接。 三、WSL2编译环境配置 1、NDK-Linux安…

再战博客园美化(四)

书接上回 上回提到,博客园的美化实现了vue,并且实现了黑暗模式,现在已经进入到自己美化的地步了。 虽然感觉和安全之路越来越远,不过也是一种体验。 目前的问题现在这个边角有点生硬,不够淡雅。 应该是gpt帮我生成的边角,我试试他原有的样子如何。误会了,它原本的边角就…

【开源】绿联145W能量π外壳

绿联这个移动电源做工和能量还是给力的,但是最近有一个Type-C口既不能充也不能放了,拆解过程非常痛苦,外壳扣太紧了,最后狠下心破坏性拆解掉。电源板是双层堆叠的,拆开上板再插回去后那个坏掉的口子居然复活了。先前可能是内部电路出了什么问题,芯片进入了锁死的状态。接…

基本数据结构——算法学习(三)上

数据结构——算法学习(三)上前言 数据结构是计算机科学的基石,几乎所有的软件开发、算法设计都离不开对数据的组织与管理。它不仅是程序高效运行的保障,也是解决复杂问题的关键工具。学习数据结构的过程,不仅仅是掌握具体的知识点,更是培养逻辑思维能力和问题解决能力的重…