当前位置: 首页 > article >正文

【Hadoop】【hdfs】【大数据技术基础】实验三 HDFS 基础编程实验

实验三: HDFS Java API编程实践

实验题目

HDFS Java API编程实践

实验目的

熟悉HDFS操作常用的Java API。

实验平台

操作系统:Linux

Hadoop版本:2.6.0或以上版本

JDK版本:1.6或以上版本

Java IDE:Eclipse

实验内容和要求

编写一个Java程序,新建一个HDFS文件,并向其中写入你的名字;

        import org.apache.hadoop.conf.Configuration;  

        import org.apache.hadoop.fs.FileSystem;

        import org.apache.hadoop.fs.FSDataOutputStream;

        import org.apache.hadoop.fs.Path;

        public class Chapter3 {    

                public static void main(String[] args) {

                        try {

                                Configuration conf = new Configuration();  

                                conf.set("fs.defaultFS","hdfs://localhost:9000");

                                conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");

                                FileSystem fs = FileSystem.get(conf);

                                byte[] buff = "Hello world".getBytes(); // 要写入的内容

                                String filename = "LQL"; //要写入的文件名

                                FSDataOutputStream os = fs.create(new Path(filename));

                                os.write(buff,0,buff.length);

                                System.out.println("Create:"+ filename);

                                os.close();

                                fs.close();

                        } catch (Exception e) {  

                                e.printStackTrace();  

                        }  

                }  

        }

编写一个Java程序,判断HDFS上是否存在某个文件(上一步建立的文件是否存在)?

        import org.apache.hadoop.conf.Configuration;

        import org.apache.hadoop.fs.FileSystem;

        import org.apache.hadoop.fs.Path;

        public class Chapter3 {

                public static void main(String[] args) {

                            try {

                                    String filename = "test";

                                    Configuration conf = new Configuration();

                                    conf.set("fs.defaultFS","hdfs://localhost: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("文件不存在");

                                    }

                                    fs.close();

                        } catch (Exception e) {

                                e.printStackTrace();

                        }

                }

        }

编写一个Java程序,打开一个HDFS中的文件(上一步建立的文件),并读取其中的数据,输出到标准输出;

        import java.io.BufferedReader;

        import java.io.InputStreamReader;

        import org.apache.hadoop.conf.Configuration;

        import org.apache.hadoop.fs.FileSystem;

        import org.apache.hadoop.fs.Path;

        import org.apache.hadoop.fs.FSDataInputStream;

        public class Chapter3 {

                public static void main(String[] args) {

                        try {

                                Configuration conf = new Configuration();

                                conf.set("fs.defaultFS","hdfs://localhost:9000");

                                conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");

                                FileSystem fs = FileSystem.get(conf);

                                Path file = new Path("test");

                                FSDataInputStream getIt = fs.open(file);

                                BufferedReader d = new BufferedReader(new InputStreamReader(getIt));

                                String content = d.readLine(); //读取文件一行

                                System.out.println(content);

                                d.close(); //关闭文件

                                fs.close(); //关闭hdfs

                        } catch (Exception e) {

                                e.printStackTrace();

                        }

                }

        }

遇到的问题和解决方法

【遇到的问题】:

Hadoop安全模式问题:

org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.server.n0amenode.SafeModeException):Cannot create file /user/hadoop/LQL. Namenode is in safe mode.

尝试在Hadoop分布式文件系统(HDFS)上创建文件时遇到了问题,因为NameNode处于安全模式(Safe Mode)。

【解决方法】:

Hadoop的NameNode在启动时会进入安全模式,这是为了保护数据的完整性,防止在系统启动时数据不一致时进行写操作。在安全模式中,大多数写操作(如创建、删除文件或目录)将被阻止。根据日志,NameNode将在22秒后自动退出安全模式。

使用HDFS的命令行工具,通过执行hdfs dfsadmin -safemode leave命令来退出安全模式。


http://www.kler.cn/a/392784.html

相关文章:

  • 阿里云和七牛云对象存储区别和实现
  • 图片画廊 day2 (可复制源码)
  • 《DiffusionDet: Diffusion Model for Object Detection》ICCV2023
  • DeBiFormer实战:使用DeBiFormer实现图像分类任务(二)
  • 【AI换装整合包及教程】CatVTON与其他虚拟试衣技术的详细对比
  • RAFT: Recurrent All-Pairs Field Transforms for Optical Flow用于光流估计的循环全对场变换
  • 【监控】如何调出电脑的中摄像头,从摄像头获取视频流
  • STM32完全学习——点亮LED灯
  • C#发票识别、发票查验接口集成、电子发票(航空运输电子行程单)
  • 【再谈设计模式】抽象工厂模式~对象创建的统筹者
  • Python酷库之旅-第三方库Pandas(214)
  • 利用编程语言和脚本编写技术,实现自动化渗透测试和安全工具的开发
  • Llama微调测试记录
  • Go 加密算法工具方法
  • 嵌入式linux系统中RTC硬件的控制与实现
  • Go语言入门教案
  • 【vue】toRefs 和 toRef——如何在解构响应式对象时保持响应性
  • 免费,WPS Office教育考试专用版
  • 【初阶数据结构篇】插入、希尔、选择、堆排序
  • 约束(MYSQL)
  • github高分项目 WGCLOUD - 运维实时管理工具
  • A032-基于Spring Boot的健康医院门诊在线挂号系统
  • PCB+SMT线上报价系统+PCB生产ERP系统自动化拼板模块升级
  • 【网络安全】X-Forwarded-For漏洞成因及防范
  • 中断上下文及抢占标志位的检查——基于调度及锁举例
  • 数据库常用语法总结