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的文件相关推荐

  1. java hdfs文件_使用Java访问HDFS中的文件

    我试图使用Java API访问HDFS中的文件,但每次我都找不到文件.我用来访问的代码是: – Configuration conf = new Configuration(); conf.addRe ...

  2. HAWQ上安装PXF插件,并访问HDFS文件数据

    1.说明 HAWQ在github上的地址为:https://github.com/apache/hawq 在安装pxf插件之前,可以先查看一下基础软件对应的版本信息:在hawq目录下的pxf/grad ...

  3. 一幅长文细学华为MRS大数据开发(二)——HDFS分布式文件系统和ZooKeeper

    文章目录 2 HDFS分布式文件系统和ZooKeeper 2.1 HDFS概述以及应用场景 HDFS概述 HDFS应用场景 HDFS不适合的场景 2.2 HDFS相关概念 计算机集群结构 基本系统架构 ...

  4. Hadoop(八)Java程序访问HDFS集群中数据块与查看文件系统

    阅读目录(Content) 一.HDFS中数据块概述 1.1.HDFS集群中数据块存放位置 1.2.数据块(data block)简介 1.3.对分布式文件系统中的块进行抽象会带来很多好处 二.Jav ...

  5. HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS)

    2019独角兽企业重金招聘Python工程师标准>>> HDFS小文件处理解决方案总结+facebook(HayStack) + 淘宝(TFS) 博客分类: 数据库 hbase 一. ...

  6. HDFS分布式文件存储系统详解

    HDFS简介 一.HDFS:Hadoop Distributed File System 1. 一个分布式文件系统             2. 基于流数据模式访问和处理超大文件的需求而开发的     ...

  7. 通过shell命令访问HDFS

    ### 实验名称 通过shell命令访问HDFS ### 实验目的 1.理解HDFS在Hadoop体系结构中的角色: 2.熟练使用常用的Shell命令访问HDFS: ### 实验背景 HDFS分布式存 ...

  8. Hhadoop-2.7.0中HDFS写文件源码分析(二):客户端实现(1)

    一.综述 HDFS写文件是整个Hadoop中最为复杂的流程之一,它涉及到HDFS中NameNode.DataNode.DFSClient等众多角色的分工与合作. 首先上一段代码,客户端是如何写文件的: ...

  9. ssh远程工具_Rsync如何利用SSH加密隧道同步文件

    请关注本头条号,每天坚持更新原创干货技术文章. 如需学习视频,请在微信搜索公众号"智传网优"直接开始自助视频学习 1. 前言 本文主要讲解Linux系统中的Rsync如何利用SSH ...

最新文章

  1. NHibernateLinq简单的CRUD操作
  2. Eular 函数模板
  3. 代码重构(五):继承关系重构规则
  4. OpenCV在Linux中安装
  5. Spaly_Tree 模版
  6. .NET Core快速入门教程 3、我的第一个.NET Core App (CentOS篇)
  7. PID控制器改进笔记之四:改进PID控制器之设定值响应
  8. 【LeetCode笔记】32. 最长有效括号(Java、动态规划、栈、字符串)
  9. Qt工作笔记-使用QCustomplot实现鼠标拖动数据点画曲线
  10. (24)HTTP 方法:GET 对比 POST
  11. Ubuntu 12.04下配置JDK7
  12. Ubuntu18.04 上 phpvirtualbox 折腾记(二)
  13. BubbleSort C#
  14. python 拼音排序_Python实现针对中文排序的方法
  15. Android中可展开的列表组件(ExpandableListView)的使用
  16. 网页多媒体服务器,大区网页直播间搭建,服务器流媒体全对接服务
  17. 小程序设置边框border
  18. 【3D视觉创新应用竞赛作品系列​】轻量化、松耦合的手持RGB-D室内环境实时重建系统
  19. 如何修复SSL: CERTIFICATE_VERIFY_FAILED
  20. 北大青鸟---不怎么样

热门文章

  1. NCCL源码解析②:Bootstrap网络连接的建立
  2. 来自灵魂的拷问:之迁移之后SQL执行变慢了
  3. Linux移动机器人硬件部分,基于ORB-SLAM的移动机器人嵌入式实现与优化
  4. 猿团推出免费开发(成品)APP 助力移动互联网创业
  5. 认真CS☀️Unity中Newtonsoft.Json的使用
  6. bgl 词典_外语学习之词典推荐
  7. yarn 命令学习:yarn application
  8. 拼多多2021笔试真题集 -- 1. 多多的数字组合
  9. 细数2021年前端圈发生的30多件大事
  10. 工程升级技术的学习和使用