【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命令来退出安全模式。

相关推荐
百年江湖随意沉浮6 小时前
DATA AI · 数据可视化
大数据
SelectDB6 小时前
实时更新排错现场:导入了却查到旧数据,和 FINAL 越加越慢的两条路
大数据·数据库·数据分析
SelectDB6 小时前
拿 Planet 的账单一行行对下来,我总结出三个可自查的校验点
大数据·数据库·数据分析
SelectDB6 小时前
Apache Doris + Vane:让多模态数据进入业务分析
大数据·数据库·数据分析
考拉讲支付7 小时前
延迟分账 / 核销分账的技术实现方案:服务完成后再分钱,到底怎么设计?
大数据·运维·人工智能·微信小程序·小程序·系统架构
大大大大晴天️7 小时前
Agent Loop 深度解析:理解、规划、行动、观察与纠错
大数据·ai-agent
ADAI_Bowen7 小时前
写文章 - 知乎
大数据·运维·人工智能
2601_967212727 小时前
安全型轨道式插座合规资质核查与工程选型技术要点
大数据·经验分享·安全
人工智能培训8 小时前
知识图谱:结构化表达实体与关系的知识组织技术
大数据·人工智能·算法·重构·生活·知识图谱
GIS数据转换器8 小时前
基于CIM的城市智慧供热监管服务平台
java·大数据·开发语言·人工智能·后端·物联网·struts