来自:http://blog.csdn.net/zhangzhaokun/article/details/5597433
1、重读配置文件core-site.xml
要利用Java客户端来存取HDFS上的文件,不得不说的是配置文件hadoop-0.20.2/conf/core-site.xml了,最初我就是在这里吃了大亏,所以我死活连不上HDFS,文件无法创建、读取。
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!--- global properties -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/zhangzk/hadoop</value>
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://linux-zzk-113:9000</value>
</property>
</configuration>
配置项:hadoop.tmp.dir表示命名节点上存放元数据的目录位置,对于数据节点则为该节点上存放文件数据的目录。
配置项:fs.default.name表示命名的IP地址和端口号,缺省值是file:///,对于JavaAPI来讲,连接HDFS必须使用这里的配置的URL地址,对于数据节点来讲,数据节点通过该URL来访问命名节点。
2、利用JavaAPI来访问HDFS的文件与目录
package com.demo.hdfs;
import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;
/**
* @author zhangzk
*
*/
public class FileCopyToHdfs {
public static void main(String[] args) throws Exception {
try {
//uploadToHdfs();
//deleteFromHdfs();
//getDirectoryFromHdfs();
appendToHdfs();
readFromHdfs();
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
finally
{
System.out.println("SUCCESS");
}
}
/**上传文件到HDFS上去*/
private static void uploadToHdfs() throws FileNotFoundException,IOException {
String localSrc = "d://qq.txt";
String dst = "hdfs://192.168.0.113:9000/user/zhangzk/qq.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.print(".");
}
});
IOUtils.copyBytes(in, out, 4096, true);
}
/**从HDFS上读取文件*/
private static void readFromHdfs() throws FileNotFoundException,IOException {
String dst = "hdfs://192.168.0.113:9000/user/zhangzk/qq.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);
}
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.0.113:9000/user/zhangzk/qq.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.0.113:9000/user/zhangzk/qq-bak.txt";
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.0.113:9000/user/zhangzk";
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();
}
}
注意:对于append操作,从hadoop-0.21版本开始就不支持了,关于Append的操作可以参考Javaeye上的一篇文档。
相关推荐
### 使用Java API访问HDFS文件的关键知识点 #### 一、HDFS概述 Hadoop Distributed File System(HDFS)是Apache Hadoop项目的核心组件之一,它为海量数据提供了高吞吐量的数据访问,非常适合大规模数据集的应用...
本教程将详细介绍如何利用Java API进行HDFS的基础操作,包括创建目录、上传文件、下载文件、删除文件、重命名文件以及列举文件等。 首先,进行HDFS操作前,我们需要在项目中引入Hadoop的相关依赖,通常是`hadoop-...
Java API提供了访问HDFS的接口,例如`org.apache.hadoop.fs.FileSystem`类,可以用于读取、写入和管理文件系统中的文件。 2. **Hadoop MapReduce**:MapReduce是Hadoop用于并行处理和分析大数据的编程模型。在GROUP...
本节将介绍 Linux 操作系统中关于 HDFS 文件操作的常用命令行,并将介绍利用 Hadoop 提供的 Java API 进行基本的文件操作,以及利用 Web 界面查看和管理 HDFS 的方法。 HDFS 常用命令 在 Linux 命令行终端,可以...
在这个实验中,我们关注的是如何使用Java API来操作HDFS,而提到的"winutils&hadoop.dll"文件对于Windows环境下配置Hadoop环境至关重要。 首先,让我们了解HDFS Java API的基本操作。HDFS API主要由`org.apache....
三、HDFS文件上传 1. **配置HDFS环境**:首先需要配置Hadoop的相关环境变量,包括HADOOP_HOME、HADOOP_CONF_DIR等,确保可以正确连接到HDFS集群。 2. **创建`FileSystem`对象**:使用`FileSystem.get(URI uri, ...
- **用户伪装**:为了使root用户能够代表hadoop用户访问HDFS,需要在`core-site.xml`中添加用户伪装配置。具体配置如下: ```xml <name>hadoop.proxyuser.root.hosts * <name>hadoop.proxyuser.root....
在这个“web中进行HDFS文件系统操作的demo”中,我们将探讨如何通过Web界面与HDFS进行交互,使得用户能够方便地管理HDFS上的文件和目录,而无需直接使用命令行工具。这个demo是由jsp(JavaServer Pages)编写的,这...
而HDFS Java API则是开发人员与HDFS进行交互的主要接口,使得Java应用程序能够便捷地读写HDFS上的文件。本文将深入探讨HDFS Java API的原理、使用方法及其在实际应用中的最佳实践。 一、HDFS基础 1.1 HDFS架构:...
Java API是与HDFS进行交互的主要方式,它允许开发者编写程序来读取、写入和管理存储在HDFS上的文件。 在使用Java操作HDFS时,首先需要确保你已经在本地环境中安装了Hadoop,并且正确配置了环境变量。这包括设置`...
* FileSystem:用于访问HDFS文件系统的接口 * Path:用于表示HDFS文件路径的接口 * FSDataInputStream:用于读取HDFS文件的接口 * FSDataOutputStream:用于写入HDFS文件的接口 实验代码 实验代码包括: * HDFSApi:...
标签 "ftp ftpoverhdfs hdfs文件传入ftp java_hadoop java_hdfs-over-ftp" 进一步明确了主题。"ftpoverhdfs"可能是指一个特定的模块或工具,它允许FTP通信“覆盖”HDFS,即通过FTP接口操作HDFS。"java_hadoop"和...
**Java API** 是Java编程语言提供的应用程序接口,允许开发者使用Java来访问和操作Hadoop和HBase的功能。对于Hadoop,Java API主要包括`org.apache.hadoop.mapreduce`包下的类,如Job、Mapper、Reducer等,用于实现...
文件“hdfs_design.pdf”很可能是HDFS设计的详细解读,涵盖了HDFS的架构、数据复制策略、故障恢复机制、NameNode和DataNode的角色以及客户端API等内容。这部分内容将帮助你深入理解HDFS的内部工作原理,如Block和...
本教程将详细讲解如何利用HDFS API进行文件的上传、创建、删除以及重命名等基本操作。这些API是Java编程接口,为开发者提供了与HDFS交互的便利。 首先,我们需要导入Hadoop相关的库,通常在Java项目中,这可以通过...
这个Java客户端库则是专门为了方便Java开发者利用WebHDFS进行文件系统操作。 1. **WebHDFS API**: WebHDFS API提供了创建、打开、读取、写入、移动和删除文件或目录的方法。这些方法通常包括GET、PUT、POST和...
为了让root用户能够伪装成hadoop用户访问HDFS,需要在`core-site.xml`中进行相应的配置。具体步骤如下: ```xml <name>hadoop.proxyuser.root.hosts * <name>hadoop.proxyuser.root.groups * ``` 若未进行...
在这个名为“hdfs的jar包.zip”的压缩文件中,包含的是与HDFS相关的Java库,这些库使得开发者能够在Java程序中访问和操作HDFS。使用这些jar包,可以实现创建、读取、写入、移动和删除HDFS上的文件和目录等操作。 ...