热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

HDFSAPI

Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。比较重要的几个类:(1)Configurati

Hadoop的文件操作位于包org.apache.hadoop.fs里面,能够进行新建、删除、修改等操作。

比较重要的几个类:

(1)Configuration:HDFS的配置信息;

(2)FileSystem: HDFS文件系统;

(3)Path: HDFS文件或目录的路径;

(4)FileStatus: Path下面的文件或目录;

(5)BlockLocation: 文件块的位置;

(6)DistributedFileSystem: 分布式文件系统;

(7)DatanodeInfo:数据节点信息。

代码:

package com.hellohadoop;import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Date;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FSDataOutputStream;public class FileOperator {static Configuration conf;static FileSystem hdfs;public static void main(String[] args) throws Exception{Init();Upload();
// Create();
// CreateFolder();
// Rename();
// Delete();
// IsExist();
// GetTime();
// GetAllFiles();
// GetLocations();
// GetAllHosts();
}// 初始化public static void Init() throws Exception{conf = new Configuration();hdfs = FileSystem.get(conf); }// 上传文件public static void Upload() throws Exception{// 本地文件Path src = new Path("F:\\Hadoop\\DataFiles\\data.txt");// 上传路径Path dst = new Path("hdfs://master:9000/user/Administrator/");// 上传文件
hdfs.copyFromLocalFile(src, dst);System.out.println("Upload to " + conf.get("fs.default.name"));}// 创建文件public static void Create() throws Exception{byte[] buff = "Hello Hadoop!".getBytes();// 新建文件路径Path dfs = new Path("hdfs://master:9000/user/Administrator/hello");FSDataOutputStream outputStream = hdfs.create(dfs);outputStream.write(buff, 0, buff.length);System.out.println("Created!");}// 创建文件夹public static void CreateFolder() throws Exception{// 新建文件路径Path dfs = new Path("hdfs://master:9000/user/Administrator/helloDir");hdfs.mkdirs(dfs);System.out.println("Created!");}// 重新命名HDFS文件public static void Rename() throws Exception{Path of = new Path("hdfs://master:9000/user/Administrator/data.txt");Path nf = new Path("hdfs://master:9000/user/Administrator/newdata.txt");boolean isOk = hdfs.rename(of, nf);String res = isOk? "Yes": "No";System.out.println("Result:" + res);}// 删除HDFS文件public static void Delete() throws Exception{Path file = new Path("hdfs://master:9000/user/Administrator/helloDir");
// hdfs.delete(file, false);// 第二个为是否递归删除,如果目录下面有文件,是否递归删除为false会报错hdfs.delete(file, true);}// 查看某个文件是否存在public static void IsExist() throws IOException{Path file = new Path("hdfs://master:9000/user/Administrator/hello1");String res = hdfs.exists(file)? "Yes": "No";System.out.println("Result:" + res);}// 查看文件最后修改时间public static void GetTime() throws Exception{Path file = new Path("hdfs://master:9000/user/Administrator/hello");FileStatus fs = hdfs.getFileStatus(file);long mTime = fs.getModificationTime();SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd hh:mm:ss");String sTime = sdf.format(new Date(mTime));System.out.println("Modified Time:" + sTime);}// 递归查看文件目录public static void GetAllFiles() throws Exception{Path file = new Path("hdfs://master:9000/");AllFile(file);}public static void AllFile(Path p) throws Exception{FileStatus[] fs = hdfs.listStatus(p);for (FileStatus f: fs){// 是文件输出路径if (hdfs.isFile(f.getPath())){System.out.println(f.getPath());}// 是目录继续递归else{System.out.println();System.out.println(f.getPath() + ":");AllFile(f.getPath());}}}// 查看文件在HDFS中的位置public static void GetLocations() throws Exception{Path file = new Path("hdfs://master:9000/user/Administrator/stsme_20150330.sql");FileStatus fs = hdfs.getFileStatus(file);BlockLocation[] blk = hdfs.getFileBlockLocations(fs, 0, fs.getLen());for(int i=0; i){String[] host = blk[i].getHosts();System.out.println("Block " + i + " Location:" + host[0]);} }// 查看HDFS集群上所有节点public static void GetAllHosts() throws Exception{DistributedFileSystem dfs = (DistributedFileSystem) hdfs;DatanodeInfo[] dns = dfs.getDataNodeStats();for (int i=0; i){System.out.println("Datanode " + i + " Name:" + dns[i].getHostName());}}}




推荐阅读
  • 为什么多数程序员难以成为架构师?
    探讨80%的程序员为何难以晋升为架构师,涉及技术深度、经验积累和综合能力等方面。本文将详细解析Tomcat的配置和服务组件,帮助读者理解其内部机制。 ... [详细]
  • 开机自启动的几种方式
    0x01快速自启动目录快速启动目录自启动方式源于Windows中的一个目录,这个目录一般叫启动或者Startup。位于该目录下的PE文件会在开机后进行自启动 ... [详细]
  • 本文详细介绍了 Spark 中的弹性分布式数据集(RDD)及其常见的操作方法,包括 union、intersection、cartesian、subtract、join、cogroup 等转换操作,以及 count、collect、reduce、take、foreach、first、saveAsTextFile 等行动操作。 ... [详细]
  • 我有一个从C项目编译的.o文件,该文件引用了名为init_static_pool ... [详细]
  • 如果应用程序经常播放密集、急促而又短暂的音效(如游戏音效)那么使用MediaPlayer显得有些不太适合了。因为MediaPlayer存在如下缺点:1)延时时间较长,且资源占用率高 ... [详细]
  • Spring – Bean Life Cycle
    Spring – Bean Life Cycle ... [详细]
  • 本文详细介绍了在 CentOS 7 系统中配置 fstab 文件以实现开机自动挂载 NFS 共享目录的方法,并解决了常见的配置失败问题。 ... [详细]
  • com.sun.javadoc.PackageDoc.exceptions()方法的使用及代码示例 ... [详细]
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 原文网址:https:www.cnblogs.comysoceanp7476379.html目录1、AOP什么?2、需求3、解决办法1:使用静态代理4 ... [详细]
  • 本文详细介绍了 PHP 中对象的生命周期、内存管理和魔术方法的使用,包括对象的自动销毁、析构函数的作用以及各种魔术方法的具体应用场景。 ... [详细]
  • 在 Ubuntu 中遇到 Samba 服务器故障时,尝试卸载并重新安装 Samba 发现配置文件未重新生成。本文介绍了解决该问题的方法。 ... [详细]
  • 本文详细介绍了如何使用Python中的smtplib库来发送带有附件的邮件,并提供了完整的代码示例。作者:多测师_王sir,时间:2020年5月20日 17:24,微信:15367499889,公司:上海多测师信息有限公司。 ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
author-avatar
海滨2502940147
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有