昨天总结了一点自己在搭建Hadoop完全分布式环境过程中遇到的几个小问题以及解决方案,今天在搭建成功的环境中进行了简单的文件操作,包括:文件目录的创建、文件的创建、本地文件的上传、文件的重命名、文件的删除以及其他几个关于文件的操作,希望对初学的练习者有所帮助。

 package org.apache.hadoop.examples;

 import java.io.BufferedOutputStream;
import java.io.IOException;
import java.net.URI;
import java.text.SimpleDateFormat;
import java.util.Date; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
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.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;
import org.junit.Before;
import org.junit.Test; public class FileDemo {
private Configuration conf = new Configuration();//这里创建conf对象有一个默认参数,boolean loadDefaults,默认为true
     private String rootPath=new String("hdfs://192.168.56.10:9000/");
private FileSystem coreSys=null;
/**
* 每次执行之前初始化操作,初始化FileSystem核心对象
*/
@Before
public void iniFileSystemObject(){
try {
coreSys=FileSystem.get(URI.create(rootPath), conf);
} catch (IOException e) {
System.out.println("初始化HDFS核心文件对象失败:"+e.getLocalizedMessage());
}
}
/**
* 在HDFS上创建文件目录
*/
@Test
public void createDirOnHDFS(){
Path demoDir=new Path(rootPath+"demoDir");
boolean isSuccess=true;
try {
isSuccess=coreSys.mkdirs(demoDir);
} catch (IOException e) {
isSuccess=false;
}
System.out.println(isSuccess?"目录创建成功!":"目录创建失败!"); }
/**
* 在HDFS上创建文件
* @throws Exception
*/
@Test
public void createFile() throws Exception{
Path hdfsPath = new Path(rootPath + "user/hdfsupload/createDemoFile");
System.out.println(coreSys.getHomeDirectory());
String content = "Hello hadoop,this is first time that I create file on hdfs";
FSDataOutputStream fsout = coreSys.create(hdfsPath);
BufferedOutputStream bout = new BufferedOutputStream(fsout);
bout.write(content.getBytes(), 0, content.getBytes().length);
bout.close();
fsout.close();
System.out.println("文件创建完毕!");
}
/**
* 从本地上传任意文件到服务器HDFS环境
* @throws Exception
*/
@Test
public void uploadFile() throws Exception{
Configuration conf = new Configuration();
Path remotePath=new Path(rootPath+"user/");
coreSys.copyFromLocalFile(new Path("D:\\VirtualBox\\Users"), remotePath);
System.out.println("Upload to:"+conf.get("fs.default.name"));
FileStatus [] files=coreSys.listStatus(remotePath);
for(FileStatus file:files){
System.out.println(file.getPath().toString());
}
}
/**
* 重命名文件名
*/
@Test
public void renameFile(){
Path oldFileName=new Path(rootPath+"user/hdfsupload/createDemoFile");
Path newFileName=new Path(rootPath+"user/hdfsupload/renameDemoFile");
boolean isSuccess=true;
try {
isSuccess=coreSys.rename(oldFileName, newFileName);
} catch (IOException e) {
isSuccess=false;
}
System.out.println(isSuccess?"重命名成功!":"重命名失败!");
}
/**
* 删除文件
*/
@Test
public void deleteFile(){
Path deleteFile=new Path(rootPath+"user/hdfsupload/job.jar");
boolean isSuccess=true;
try {
isSuccess=coreSys.delete(deleteFile, false);
} catch (IOException e) {
isSuccess=false;
}
System.out.println(isSuccess?"删除成功!":"删除失败!");
}
/**
* 查找某个文件是否存在
*/
@Test
public void findFileIsExit(){
Path checkFile=new Path(rootPath+"user/hdfsupload/job.jar");
boolean isExit=true;
try {
isExit=coreSys.exists(checkFile);
} catch (IOException e) {
isExit=false;
}
System.out.println(isExit?"文件存在!":"文件不存在!");
}
/**
* 查看某个文件的最后修改时间
* @throws IOException
*/
@Test
public void watchFileLastModifyTime() throws IOException{
Path targetFile=new Path(rootPath+"user/hdfsupload/renameDemoFile");
FileStatus fileStatus=coreSys.getFileStatus(targetFile);
Long lastTime=fileStatus.getModificationTime();
Date date=new Date(lastTime);
SimpleDateFormat format=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
System.err.println("文件的最后修改时间为:"+format.format(date));
}
/**
* 获取某个路径下面的所有文件
* @throws IOException
*/
@Test
public void getUnderDirAllFile() throws IOException{
Path targetDir=new Path(rootPath+"user/hdfsupload/");
FileStatus []fileStatus=coreSys.listStatus(targetDir);
for(FileStatus file:fileStatus){
System.out.println(file.getPath()+"--"+file.getGroup()+"--"+file.getBlockSize()+"--"+file.getLen()+"--"+file.getModificationTime()+"--"+file.getOwner());
}
}
/**
* 查看某个文件在HDFS集群的位置
* @throws IOException
*/
@Test
public void findLocationOnHadoop() throws IOException{
Path targetFile=new Path(rootPath+"user/hdfsupload/AA.txt");
FileStatus fileStaus=coreSys.getFileStatus(targetFile);
BlockLocation []bloLocations=coreSys.getFileBlockLocations(fileStaus, 0, fileStaus.getLen());
for(int i=0;i<bloLocations.length;i++){
System.out.println("block_"+i+"_location:"+bloLocations[i].getHosts()[0]);
} }
/**
* 获取集群上结点的信息
* @throws IOException
*/
@Test
public void getNodeMsgHdfs() throws IOException{
DistributedFileSystem distributedFileSystem=(DistributedFileSystem) coreSys;
DatanodeInfo []dataInfos=distributedFileSystem.getDataNodeStats();
for(int j=0;j<dataInfos.length;j++){
System.out.println("DataNode_"+j+"_Name:"+dataInfos[j].getHostName()+"--->"+dataInfos[j].getDatanodeReport()+"-->"+
dataInfos[j].getDfsUsedPercent()+"-->"+dataInfos[j].getLevel());
}
} }

本地Eclipse连接HDFS进行简单的文件操作的更多相关文章

  1. (转载)Mac系统下利用ADB命令连接android手机并进行文件操作

    Mac系统下利用ADB命令连接android手机并进行文件操作 标签: Mac adb android 2016-03-14 10:09 5470人阅读 评论(1) 收藏 举报  分类: Androi ...

  2. vbs连接sql server及写文件操作

    此段代码是连接SQL SERVER的 代码内connMMSQL的参数要根据实际情况传入 Function connMMSQL(ip,user,pwd,database,strsql) Dim conn ...

  3. python反转字符串(简单方法)及简单的文件操作示例

    Python反转字符串的最简单方法是用切片: >>> a=' >>> print a[::-1] 654321 切片介绍:切片操作符中的第一个数(冒号之前)表示切片 ...

  4. Foundation 框架 NSFileManager,NSData 简单的文件操作

    一.简单展示NSFileManager的使用 #import <Foundation/Foundation.h> int main(int argc, const char * argv[ ...

  5. ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作

    前言: 本章主要通过一个完整的示例讲解ASP.NET Core MVC+EF Core对MySQL数据库进行简单的CRUD操作,希望能够为刚入门.NET Core的小伙伴们提供一个完整的参考实例.关于 ...

  6. scala简单的文件操作

    1.scala写入文件操作 package com.test import java.io.File import java.io.PrintWriter /** * scala文件写入 */ obj ...

  7. python作业完成简单的文件操作

    题目 请创建以学号命名的目录,在该目录中创建名称为file1.txt的文件,并将自己的个人信息(序号.姓名以及班级)等写入该文件:然后并读取文件中的内容到屏幕上:接着重新命名该文件为file2.txt ...

  8. Linux服务器在外地,如何用eclipse连接hdfs

    配置外网和内网的映射,内部所有配置全部用内网的IP 本地所有配置皆为外网地址 本地给服务器发指令全部由映射转换为内网指定IP,即可​

  9. php简单的文件操作

    (1)先要想好要操作哪个文件? (2)确定文件的路径? (3)要有什么文件管理功能? 一.先做一下简单的查看文件功能,文件中的文件和文件夹都显示,但是双击文件夹可以显示下一级子目录,双击"返 ...

随机推荐

  1. 一些javascript常用方法

    1.输入一个正整数n,从1累加到n,返回结果.(如果输入为非正整数,如:小数.0.负数.NaN或其它非数字则返回false) function f(n){ return ~~+n == n & ...

  2. Upload无刷新上传控件

    Upload无刷新上传控件 最近在做一个web开发项目 ,用到upload上传控件 ,由于c#提供的控件局限性太大 ,所以就自己从国外大牛 手里借鉴一下. 该控件可以判断上传的文件是否已存在 ,减少了 ...

  3. .NET程序保护专家.NET Reactor发布4.7版本

    .NET Reactor是一款功能强大的代码保护以及许可授权管理系统. 关于代码混淆,针对.NET程序程序而言,.NET Reactor保护的程序目前还没有被破解过.这与.NET Reactor的保护 ...

  4. .NET Framework和C#版本历史概览

    发布日期 .Net版本 C#版本 CLR版本 开发工具 功能介绍 2002 1.0 1.0 初始版本 Visual Studio .Net 初始版本 .NET框架结构,详见: 2003 1.1     ...

  5. 日期,为下拉列表添加日期,优化,目前本人博客上最优的解决方案,之前学习的通过判断得到平年闰年,而这个是让系统自动去判断,无须if判断,代码示例

    <%@ page language="java" import="java.util.*" pageEncoding="utf-8"% ...

  6. hibernate 获取实体的表名、主键名、列名(转载+修改)

    package com.escs.utils; import java.util.Iterator; import org.hibernate.cfg.AnnotationConfiguration; ...

  7. s​s​h​配​置​公​钥​和​私​钥​登​陆​S​e​c​u​r​e​C​R​T

    在用windows时管理linux服务器时,常会用到SecureCRT.Xshell以及开源的putty.在我工作环境大多都是采用密码认证的方式进行登录.今天对学习了些SecureCRT的密钥登录方式 ...

  8. P2P中的NAT穿越方案简介

    文章链接: http://www.shipin.it/Index/videolist/id/68.html

  9. 代码重构方向原则指导(转载 cnblogs)

    英文原文:Hill Climbing (Wonkish)   重构是一种对软件进行修改的行为,但它并不改变软件的功能特征,而是通过让软件程序更清晰,更简洁和更条理来改进软件的质量.代码重构之于软件,相 ...

  10. C语言的一些常见细节

    C语言的一些常见细节 对于C语言,不同的编译器采用了不同的实现,并且在不同平台上表现也不同.脱离具体环境探讨C的细节行为是没有意义的,以下是我所使用的环境,大部分内容都经过测试,且所有测试结果基于这个 ...