本地Eclipse连接HDFS进行简单的文件操作
昨天总结了一点自己在搭建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进行简单的文件操作的更多相关文章
- (转载)Mac系统下利用ADB命令连接android手机并进行文件操作
Mac系统下利用ADB命令连接android手机并进行文件操作 标签: Mac adb android 2016-03-14 10:09 5470人阅读 评论(1) 收藏 举报 分类: Androi ...
- vbs连接sql server及写文件操作
此段代码是连接SQL SERVER的 代码内connMMSQL的参数要根据实际情况传入 Function connMMSQL(ip,user,pwd,database,strsql) Dim conn ...
- python反转字符串(简单方法)及简单的文件操作示例
Python反转字符串的最简单方法是用切片: >>> a=' >>> print a[::-1] 654321 切片介绍:切片操作符中的第一个数(冒号之前)表示切片 ...
- Foundation 框架 NSFileManager,NSData 简单的文件操作
一.简单展示NSFileManager的使用 #import <Foundation/Foundation.h> int main(int argc, const char * argv[ ...
- ASP.NET Core MVC+Layui使用EF Core连接MySQL执行简单的CRUD操作
前言: 本章主要通过一个完整的示例讲解ASP.NET Core MVC+EF Core对MySQL数据库进行简单的CRUD操作,希望能够为刚入门.NET Core的小伙伴们提供一个完整的参考实例.关于 ...
- scala简单的文件操作
1.scala写入文件操作 package com.test import java.io.File import java.io.PrintWriter /** * scala文件写入 */ obj ...
- python作业完成简单的文件操作
题目 请创建以学号命名的目录,在该目录中创建名称为file1.txt的文件,并将自己的个人信息(序号.姓名以及班级)等写入该文件:然后并读取文件中的内容到屏幕上:接着重新命名该文件为file2.txt ...
- Linux服务器在外地,如何用eclipse连接hdfs
配置外网和内网的映射,内部所有配置全部用内网的IP 本地所有配置皆为外网地址 本地给服务器发指令全部由映射转换为内网指定IP,即可
- php简单的文件操作
(1)先要想好要操作哪个文件? (2)确定文件的路径? (3)要有什么文件管理功能? 一.先做一下简单的查看文件功能,文件中的文件和文件夹都显示,但是双击文件夹可以显示下一级子目录,双击"返 ...
随机推荐
- 空连接ipc$入侵
使用命令 net use url=file://\\IP\ipc$\\IP\ipc$ "" /user:"" 就可以简单地和目标建立一个空连接(需要目标开放ip ...
- C# 标签(条码)
C# 标签(条码) 上一篇说到条码的打印,主要是通过读取模板定义文件(XML文件),然后结合从数据库中读取的动态数据结合而产生条码.下面主要说一下如何设计这个条码模板.设计过程也很简单,只需要简单的拖 ...
- C#6.0 中的那些新特性
C#6.0 中的那些新特性 前言 VS2015在自己机器上确实是装好了,费了老劲了,想来体验一下跨平台的快感,结果被微软狠狠的来了一棒子了,装好了还是没什么用,应该还需要装Xarmain插件,配置一些 ...
- 图文详解ReSharper 8.1功能变化
ReSharper 8.1版本已经发布有段时间了,被广大开发者购买和试用,今天小编就ReSharper 8.1功能变化就行详细的解说. 支持TypeScript 突出了重构(重命名,引入变量).导航. ...
- 与6lowpan最相关的RFC文档列表
有关于6lowpan最原始的文档,请参考下面的链接与截图: http://datatracker.ietf.org/wg/6lowpan/
- 【SSRS】入门篇(六) -- 分组和总计
原文:[SSRS]入门篇(六) -- 分组和总计 通过[SSRS]入门篇(五) -- 设置报表格式的设计,一份简单格式的报表已产生,如下图: 这节来说说分组和总计: 根据日期.订单对数据进行分组 添加 ...
- C#边边角角(一)
前言 此篇为在学习C#基础时,熟悉C#的语法和高级特性的一些小的尝试和笔记,记录一下以供分享 集合初始化器 集合必须实现System.Collections.IEnumerable接口 集合必须包含A ...
- nginx 502 Bad Gateway 错误问题收集
nginx 502 Bad Gateway 错误问题收集 (2010-11-18 13:51:37) 转载▼ 标签: 杂谈 分类: 工作 nginx 502 Bad Gateway 错误问题收集 因为 ...
- 给Angularjs配上Requirejs
给Angularjs配上Requirejs 需要考虑的事情: 1.js.css.template都按需加载,js主要就controller: * js和css都可以用requirejs和它的插件解决, ...
- 记录OC学习的一点一滴(一)
练习代码: 代码一:(面向过程的OC) // // main.m // Class01Test01 // // Copyright (c) 2014年 levi. All rights reserve ...