在去年寒假的时候,我们已经完成了hadoop集群的搭建,已经初步搭建起来了自己的云平台,也测试了一下远程访问HDFS,这几天也回顾了一下和测试了一下远程对HDFS的操作。
HDFS的文件操作
格式化HDFS
命令:user@namenode:hadoop$ bin/hadoop namenode -format
启动HDFS
命令:user@namenode:hadoop$ bin/start-dfs.sh
列出HDFS上的文件
命令:user@namenode:hadoop$ bin/hadoop dfs -ls
使用hadoop API
public List<String[]> GetFileBolckHost(Configuration conf, String FileName) {
try {
List<String[]> list = new ArrayList<String[]>();
FileSystem hdfs = FileSystem.get(conf);
Path path = new Path(FileName);
FileStatus fileStatus = hdfs.getFileStatus(path);
BlockLocation[] blkLocations = hdfs.getFileBlockLocations(
fileStatus, 0, fileStatus.getLen());
int blkCount = blkLocations.length;
for (int i = 0; i < blkCount; i++) {
String[] hosts = blkLocations[i].getHosts();
list.add(hosts);
}
return list;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
在HDFS上创建目录
命令:user@namenode:hadoop$ bin/hadoop dfs -mkdir /文件名
使用hadoop API
// 在HDFS新建文件
public FSDataOutputStream CreateFile(Configuration conf, String FileName) {
try {
FileSystem hdfs = FileSystem.get(conf);
Path path = new Path(FileName);
FSDataOutputStream outputStream = hdfs.create(path);
return outputStream;
} catch (IOException e) {
e.printStackTrace();
}
return null;
}
上传一个文件到HDFS
命令:user@namenode:hadoop$ bin/hadoop dfs -put 文件名 /user/yourUserName/
使用hadoop API
// 上传文件到HDFS
public void PutFile(Configuration conf, String srcFile, String dstFile) {
try {
FileSystem hdfs = FileSystem.get(conf);
Path srcPath = new Path(srcFile);
Path dstPath = new Path(dstFile);
hdfs.copyFromLocalFile(srcPath, dstPath);
} catch (IOException e) {
e.printStackTrace();
}
}
从 HDFS 中导出数据
命令:user@namenode:hadoop$ bin/hadoop dfs -cat foo
使用hadoop API
// 从HDFS读取文件
public void ReadFile(Configuration conf, String FileName) {
try {
FileSystem hdfs = FileSystem.get(conf);
FSDataInputStream dis = hdfs.open(new Path(FileName));
IOUtils.copyBytes(dis, System.out, 4096, false);
dis.close();
} catch (IOException e) {
e.printStackTrace();
}
}
HDFS 的关闭
命令:user@namenode:hadoop$ bin/stop-dfs.sh
HDFS全局状态信息
命令:bin/hadoop dfsadmin -report
我们可以得到一份全局状态报告。这份报告包含了HDFS集群的基本信息,当然也有每台机器的一些情况。
以上讲的都是本地操作HDFS,都是基于在ubuntu下并配置有hadoop环境下对HDFS的操作,作为客户端也可以在window系统下远程的对HDFS进行操作,其实原理基本上差不多,只需要集群中namenode对外开放的IP和端口,就可以访问到HDFS
/**
* 对HDFS操作
* @author yujing
*
*/
public class Write {
public static void main(String[] args) {
try {
uploadTohdfs();
readHdfs();
getDirectoryFromHdfs();
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}
}
public static void uploadTohdfs() throws FileNotFoundException, IOException {
String localSrc = "D://qq.txt";
String dst = "hdfs://192.168.1.11:9000/usr/yujing/test.txt";
InputStream in = new BufferedInputStream(new FileInputStream(localSrc));
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(dst), conf);
OutputStream out = fs.create(new Path(dst), new Progressable() {
public void progress() {
System.out.println(".");
}
});
System.out.println("上传文件成功");
IOUtils.copyBytes(in, out, 4096, true);
}
/** 从HDFS上读取文件 */
private static void readHdfs() throws FileNotFoundException, IOException {
String dst = "hdfs://192.168.1.11:9000/usr/yujing/test.txt";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(dst), conf);
FSDataInputStream hdfsInStream = fs.open(new Path(dst));
OutputStream out = new FileOutputStream("d:/qq-hdfs.txt");
byte[] ioBuffer = new byte[1024];
int readLen = hdfsInStream.read(ioBuffer);
while (-1 != readLen) {
out.write(ioBuffer, 0, readLen);
readLen = hdfsInStream.read(ioBuffer);
}
System.out.println("读文件成功");
out.close();
hdfsInStream.close();
fs.close();
}
/**
* 以append方式将内容添加到HDFS上文件的末尾;注意:文件更新,需要在hdfs-site.xml中添<property><name>dfs.
* append.support</name><value>true</value></property>
*/
private static void appendToHdfs() throws FileNotFoundException,
IOException {
String dst = "hdfs://192.168.1.11:9000/usr/yujing/test.txt";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(dst), conf);
FSDataOutputStream out = fs.append(new Path(dst));
int readLen = "zhangzk add by hdfs java api".getBytes().length;
while (-1 != readLen) {
out.write("zhangzk add by hdfs java api".getBytes(), 0, readLen);
}
out.close();
fs.close();
}
/** 从HDFS上删除文件 */
private static void deleteFromHdfs() throws FileNotFoundException,
IOException {
String dst = "hdfs://192.168.1.11:9000/usr/yujing";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(dst), conf);
fs.deleteOnExit(new Path(dst));
fs.close();
}
/** 遍历HDFS上的文件和目录 */
private static void getDirectoryFromHdfs() throws FileNotFoundException,
IOException {
String dst = "hdfs://192.168.1.11:9000/usr/yujing";
Configuration conf = new Configuration();
FileSystem fs = FileSystem.get(URI.create(dst), conf);
FileStatus fileList[] = fs.listStatus(new Path(dst));
int size = fileList.length;
for (int i = 0; i < size; i++) {
System.out.println("文件名name:" + fileList[i].getPath().getName()
+ "文件大小/t/tsize:" + fileList[i].getLen());
}
fs.close();
}
}
我们可以通过http://主机IP:50030就可以查看集群的所有信息,也可以查看到自己上传到HDFS上的文件
分享到:
相关推荐
本篇文章将详细讲解Hadoop HDFS文件操作、MapReduce(MR)示例以及如何实现TopN问题。 首先,HDFS是分布式文件系统,设计用于跨大量廉价硬件节点存储和处理大规模数据。它具有高容错性,能够自动数据复制,确保数据...
文档详细的讲述了Hadoop中HDFS文件操作命令和HDFS编程
6. **项目示例**:提供的两个项目"java对HDFS文件操作jar包版"和"java对HDFS文件操作maven版.zip.zip"可能包含了上述操作的完整实现。`jar包版`可能是一个已经编译好的可执行程序,可以直接运行。而`maven版`则是一...
本案例代码demo旨在帮助开发者更好地理解和应用这一技术组合,涵盖了HDFS文件操作、MapReduce分词处理以及数据分析和系统推荐等功能。 首先,HDFS(Hadoop Distributed File System)是Hadoop的核心组件之一,提供...
2. HDFS API:通过FSDataInputStream,可以读取HDFS文件并写入本地文件系统。 四、HDFS的文件创建与删除 1. 创建文件夹:使用`hadoop fs -mkdir`命令创建目录,如`hadoop fs -mkdir /myfolder`。 2. 删除文件:...
hadoop测试(1)---HDFS文件操作 完整测试代码, 相关文章:http://www.cnblogs.com/yinpengxiang/archive/2011/07/03/2096605.html
HDFS 提供了一系列基本文件命令,用于管理和操作 HDFS 文件系统。这些命令包括: 1. mkdir:创建一个新的目录。 2. put:将本地文件上传到 HDFS。 3. get:从 HDFS 下载文件到本地文件系统。 4. rm:删除 HDFS 文件...
### HDFS文件读写操作详解 #### 一、HDFS架构概述 HDFS(Hadoop Distributed File System)是Hadoop项目的核心子项目之一,旨在提供高吞吐量的数据访问,适用于大规模数据集上的应用。HDFS采用了Master/Slave的...
总的来说,这个实验加深了学生对HDFS文件操作的理解,尤其是文件的读写和合并,同时也锻炼了他们的环境配置和问题解决能力。通过实际操作,学生能更好地掌握Hadoop生态系统中的核心组件——HDFS的工作原理,这对于...
hadoop入门级的代码 Java编写 eclipse可运行 包含 hdfs的文件操作 rpc远程调用的简单示例 map-reduce的几个例子:wordcount 学生平均成绩 手机流量统计
在这个“web中进行HDFS文件系统操作的demo”中,我们将探讨如何通过Web界面与HDFS进行交互,使得用户能够方便地管理HDFS上的文件和目录,而无需直接使用命令行工具。这个demo是由jsp(JavaServer Pages)编写的,这...
以下是如何使用`pyhdfs`进行文件操作的示例: 1. **文件读取**: - 首先,需要导入`HdfsClient`,指定HDFS的地址和端口,例如:`client = HdfsClient(hosts='ghym:50070')` - 使用`client.open()`打开HDFS上的...
标题中的“Windows平台下的HDFS文件浏览器”是指在Windows操作系统上使用的、用于浏览和管理Hadoop分布式文件系统(HDFS)的图形用户界面工具。这种工具通常提供了方便的方式来查看、上传、下载和管理HDFS中的文件和...
五、HDFS文件操作示例 以下是一个简单的Java代码示例,展示如何上传和下载文件至HDFS: ```java import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop...
在分布式计算领域,Apache Hadoop 是一个开源框架,主要用于存储和处理大规模数据。Hadoop 的核心组件之一是 HDFS...通过实例化的 `FileSystem` 对象,你可以轻松地执行各种文件操作,从而充分利用 HDFS 的分布式特性。
HDFS的操作主要通过命令行客户端`hdfs dfs`进行,它提供了丰富的命令集来管理文件和目录。例如: 1. `hdfs dfs -ls`: 此命令用于列出指定路径下的文件和目录,基本形式是`hdfs dfs -ls <path>`。添加 `-d` 参数可以...
本文将深入探讨使用Java管理HDFS文件和文件夹的关键知识点,特别是基于Hadoop 2.4版本。 首先,理解HDFS的基础概念至关重要。HDFS是一种分布式文件系统,设计用于跨大量廉价硬件节点存储和处理大数据。它遵循主从...
### HDFS文件系统详解 #### 一、HDFS概述与分布式文件系统概念 Hadoop分布式文件系统(HDFS)作为Hadoop项目的核心组成部分之一,它为海量数据提供了高吞吐量的数据访问,非常适合大规模数据集的处理。HDFS的设计...
实验二:“熟悉常用的HDFS操作”旨在帮助学习者深入理解Hadoop分布式文件系统(HDFS)在大数据处理中的核心地位,以及如何通过Shell命令和Java API进行高效操作。HDFS在Hadoop架构中扮演着存储大数据的核心角色,为...
总结起来,通过Eclipse与Hadoop的Java API,我们能实现HDFS的基本操作,包括文件的上传、下载、删除、移动以及目录的管理。这对于大数据开发人员来说是必不可少的技能,有助于理解和掌握Hadoop生态系统的工作原理。