利用JavaAPI访问HDFS的文件
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版本开始就不支持了
利用JavaAPI访问HDFS的文件相关推荐
- java hdfs文件_使用Java访问HDFS中的文件
我试图使用Java API访问HDFS中的文件,但每次我都找不到文件.我用来访问的代码是: – Configuration conf = new Configuration(); conf.addRe ...
- HAWQ上安装PXF插件,并访问HDFS文件数据
1.说明 HAWQ在github上的地址为:https://github.com/apache/hawq 在安装pxf插件之前,可以先查看一下基础软件对应的版本信息:在hawq目录下的pxf/grad ...
- 一幅长文细学华为MRS大数据开发(二)——HDFS分布式文件系统和ZooKeeper
文章目录 2 HDFS分布式文件系统和ZooKeeper 2.1 HDFS概述以及应用场景 HDFS概述 HDFS应用场景 HDFS不适合的场景 2.2 HDFS相关概念 计算机集群结构 基本系统架构 ...
- Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统
阅读目录(Content) 一.HDFS中数据块概述 1.1.HDFS集群中数据块存放位置 1.2.数据块(data block)简介 1.3.对分布式文件系统中的块进行抽象会带来很多好处 二.Jav ...
- HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)
2019独角兽企业重金招聘Python工程师标准>>> HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) 博客分类: 数据库 hbase 一. ...
- HDFS分布式文件存储系统详解
HDFS简介 一.HDFS:Hadoop Distributed File System 1. 一个分布式文件系统 2. 基于流数据模式访问和处理超大文件的需求而开发的 ...
- 通过shell命令访问HDFS
### 实验名称 通过shell命令访问HDFS ### 实验目的 1.理解HDFS在Hadoop体系结构中的角色: 2.熟练使用常用的Shell命令访问HDFS: ### 实验背景 HDFS分布式存 ...
- Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现(1)
一.综述 HDFS写文件是整个Hadoop中最为复杂的流程之一,它涉及到HDFS中NameNode.DataNode.DFSClient等众多角色的分工与合作. 首先上一段代码,客户端是如何写文件的: ...
- ssh远程工具_Rsync如何利用SSH加密隧道同步文件
请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要讲解Linux系统中的Rsync如何利用SSH ...
最新文章
- NHibernateLinq简单的CRUD操作
- Eular 函数模板
- 代码重构(五):继承关系重构规则
- OpenCV在Linux中安装
- Spaly_Tree 模版
- .NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)
- PID控制器改进笔记之四:改进PID控制器之设定值响应
- 【LeetCode笔记】32. 最长有效括号(Java、动态规划、栈、字符串)
- Qt工作笔记-使用QCustomplot实现鼠标拖动数据点画曲线
- (24)HTTP 方法:GET 对比 POST
- Ubuntu 12.04下配置JDK7
- Ubuntu18.04 上 phpvirtualbox 折腾记(二)
- BubbleSort C#
- python 拼音排序_Python实现针对中文排序的方法
- Android中可展开的列表组件(ExpandableListView)的使用
- 网页多媒体服务器,大区网页直播间搭建,服务器流媒体全对接服务
- 小程序设置边框border
- 【3D视觉创新应用竞赛作品系列​】轻量化、松耦合的手持RGB-D室内环境实时重建系统
- 如何修复SSL: CERTIFICATE_VERIFY_FAILED
- 北大青鸟---不怎么样