HDFS的Java API的访问方式实例代码

本文研究的主要是HDFS的Java API的访问方式,具体代码如下所示,有详细注释。

最近的节奏有点儿快,等有空的时候把这个封装一下

实现代码

要导入的包:

import java.io.IOException;
import java.net.URI;
import java.net.URISyntaxException;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileUtil;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.hdfs.protocol.DatanodeInfo;

实体方法:

/**
   * 获取HDFS文件系统
   * @return
   * @throws IOException
   * @throws URISyntaxException
   */
public static FileSystem getFileSystem() throws IOException, URISyntaxException{
	//read config file
	Configuration conf = new Configuration();
	//返回默认文件系统
	//如果在Hadoop集群下运行,使用此种方法可以直接获取默认文件系统
	//FileSystem fs = FileSystem.get(conf);
	//指定的文件系统地址
	URI uri = new URI("hdfs://hy:9000");
	//返回指定的文件系统
	//如果在本地测试,需要使用此种方法获取文件系统
	FileSystem fs = FileSystem.get(uri, conf);
	return fs;
}
/**
   * 创建文件目录
   * @throws Exception
   */
public static void mkdir() throws Exception{
	//获取文件系统
	FileSystem fs = getFileSystem();
	//创建文件目录
	fs.mkdirs(new Path("hdfs://hy:9000/hy/weibo"));
	//释放资源
	fs.close();
}
/**
   * 删除文件或者文件目录
   * @throws Exception
   */
public static void rmdir() throws Exception{
	//获取文件系统
	FileSystem fs = getFileSystem();
	//删除文件或者文件目录
	fs.delete(new Path("hdfs://hy:9000/hy/weibo"), true);
	//释放资源
	fs.close();
}
/**
   * 获取目录下所有文件
   * @throws Exception
   */
public static void listAllFile() throws Exception{
	//获取文件系统
	FileSystem fs = getFileSystem();
	//列出目录内容
	FileStatus[] status = fs.listStatus(new Path("hdfs://hy:9000/hy/"));
	//获取目录下所有文件路径
	Path[] listedPaths = FileUtil.stat2Paths(status);
	//循环读取每个文件
	for (Path path : listedPaths) {
		System.out.println(path);
	}
	//释放资源
	fs.close();
}
/**
   * 将文件上传至HDFS
   * @throws Exception
   */
public static void copyToHDFS() throws Exception{
	//获取文件对象
	FileSystem fs = getFileSystem();
	//源文件路径是Linux下的路径 Path srcPath = new Path("/home/hadoop/temp.jar");
	//如果需要在windows下测试,需要改为Windows下的路径,比如 E://temp.jar
	Path srcPath = new Path("E://temp.jar");
	//目的路径
	Path dstPath = new Path("hdfs://hy:9000/hy/weibo");
	//实现文件上传
	fs.copyFromLocalFile(srcPath, dstPath);
	//释放资源
	fs.close();
}
/**
   * 从HDFS上下载文件
   * @throws Exception
   */
public static void getFile() throws Exception{
	//获得文件系统
	FileSystem fs = getFileSystem();
	//源文件路径
	Path srcPath = new Path("hdfs://hy:9000/hy/weibo/temp.jar");
	//目的路径,默认是Linux下的
	//如果在Windows下测试,需要改为Windows下的路径,如C://User/andy/Desktop/
	Path dstPath = new Path("D://");
	//下载HDFS上的文件
	fs.copyToLocalFile(srcPath, dstPath);
	//释放资源
	fs.close();
}
/**
   * 获取HDFS集群点的信息
   * @throws Exception
   */
public static void getHDFSNodes() throws Exception{
	//获取文件系统
	FileSystem fs = getFileSystem();
	//获取分布式文件系统
	DistributedFileSystem hdfs = (DistributedFileSystem)fs;
	//获取所有节点
	DatanodeInfo[] dataNodeStats = hdfs.getDataNodeStats();
	//循环比遍历
	for (int i = 0; i < dataNodeStats.length; i++) {
		System.out.println("DataNote_" + i + "_Name:" + dataNodeStats[i].getHostName());
	}
	//释放资源
	fs.close();
}
/**
   * 查找某个文件在HDFS集群的位置
   * @throws Exception
   */
public static void getFileLocal() throws Exception{
	//获取文件系统
	FileSystem fs = getFileSystem();
	//文件路径
	Path path = new Path("hdfs://hy:9000/hy/weibo/temp.jar");
	//获取文件目录
	FileStatus fileStatus = fs.getFileStatus(path);
	//获取文件块位置列表
	BlockLocation[] blockLocations = fs.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
	//循环输出块信息
	for (int i = 0; i < blockLocations.length; i++) {
		String[] hosts = blockLocations[i].getHosts();
		System.out.println("block_" + i + "_location:" + hosts[0]);
	}
	//释放资源
	fs.close();
}

总结

以上就是本文关于HDFS的Java API的访问方式实例代码的全部内容,希望对大家有所帮助。感兴趣的朋友可以继续参阅本站其他相关专题,如有不足之处,欢迎留言指出。感谢朋友们对本站的支持!

您可能感兴趣的文章:

  • JAVA操作HDFS案例的简单实现
  • HDFS中JAVA API的使用
  • java 中Spark中将对象序列化存储到hdfs
  • Java访问Hadoop分布式文件系统HDFS的配置说明
  • java实现将ftp和http的文件直接传送到hdfs
  • java连接hdfs ha和调用mapreduce jar示例
(0)

相关推荐

  • java连接hdfs ha和调用mapreduce jar示例

    Java API 连接 HDFS HA 复制代码 代码如下: public static void main(String[] args) {  Configuration conf = new Configuration();  conf.set("fs.defaultFS", "hdfs://hadoop2cluster");  conf.set("dfs.nameservices", "hadoop2cluster");

  • HDFS中JAVA API的使用

    HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的文件操作主要涉及一下几个类: Configuration类:该类的对象封转了客户端或者服务器的配置. FileSystem类:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作.FileSystem fs = FileSystem.get(conf);通过FileSystem的静态

  • java 中Spark中将对象序列化存储到hdfs

    java 中Spark中将对象序列化存储到hdfs 摘要: Spark应用中经常会遇到这样一个需求: 需要将JAVA对象序列化并存储到HDFS, 尤其是利用MLlib计算出来的一些模型, 存储到hdfs以便模型可以反复利用. 下面的例子演示了Spark环境下从Hbase读取数据, 生成一个word2vec模型, 存储到hdfs. 废话不多说, 直接贴代码了. spark1.4 + hbase0.98 import org.apache.spark.storage.StorageLevel imp

  • Java访问Hadoop分布式文件系统HDFS的配置说明

    配置文件 m103替换为hdfs服务地址. 要利用Java客户端来存取HDFS上的文件,不得不说的是配置文件hadoop-0.20.2/conf/core-site.xml了,最初我就是在这里吃了大亏,所以我死活连不上HDFS,文件无法创建.读取. <?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <co

  • java实现将ftp和http的文件直接传送到hdfs

    之前实现了使用流来讲http和ftp的文件下载到本地,也实现了将本地文件上传到hdfs上,那现在就可以做到将 ftp和http的文件转移到hdfs上了,而不用先将ftp和http的文件拷贝到本地再上传到hdfs上了.其实这个东西的原理 很简单,就是使用流,将ftp或http的文件读入到流中,然后将流中的内容传送到hdfs上,这样子就不用让数据存到 本地的硬盘上了,只是让内存来完成这个转移的过程,希望这个工具,能够帮到有这样需求的同学~ 这里先附上之前的几个工具的链接: http工具 ftp工具

  • JAVA操作HDFS案例的简单实现

    本文介绍了JAVA操作HDFS案例的简单实现,分享给大家,也给自己做个笔记 Jar包引入,pom.xml: <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.8.0</version> </dependency> <dependency> <gr

  • HDFS的Java API的访问方式实例代码

    本文研究的主要是HDFS的Java API的访问方式,具体代码如下所示,有详细注释. 最近的节奏有点儿快,等有空的时候把这个封装一下 实现代码 要导入的包: import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.BlockLocation

  • Java 大小写最快转换方式实例代码

    Java 大小写最快转换方式实例代码          这里直接给出实现代码,在代码中注释都很清楚,不多做介绍. Java代码 package io.mycat; import java.util.stream.IntStream; /** * 小写字母的 'a'=97 大写字母 A=65 更好相差32利用这个差进行大小写转换 * @author : Hpgary * @date : 2017年5月3日 10:26:26 * @mail: hpgary@qq.com * */ public cl

  • JavaScript中访问id对象 属性的方式访问属性(实例代码)

    实例如下: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Co

  • Java 从网上下载文件的几种方式实例代码详解

    废话不多说了,直接给大家贴代码了,具体代码如下所示: package com.github.pandafang.tool; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.net.URL; import java.nio.chan

  • Java实现FTP服务器功能实例代码

    FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议.在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Download).FTP是实时联机服务,在使用它之前必须是具有该服务的一个用户(用户名和口令),工作时客户端必须先登录到作为服务器一方的计算机上,用户登录后可以进行文件搜索和文件传送等有关操作,如改变当前工作目录.列文件目录.设置传输参数及传送文件等.使用FTP可以传送所有类型的文件,如文本文件.二进制可执

  • Java执行hadoop的基本操作实例代码

    Java执行hadoop的基本操作实例代码 向HDFS上传本地文件 public static void uploadInputFile(String localFile) throws IOException{ Configuration conf = new Configuration(); String hdfsPath = "hdfs://localhost:9000/"; String hdfsInput = "hdfs://localhost:9000/user/

  • java 实现输出随机图片实例代码

    java  实现输出随机图片实例代码 输出随机图片(CAPTCHA图像):Completely Automated Public Turing Test to Tell Computers and Humans Apart (全自动区分计算机和人类的测试) 相关主要类(JDK 查看API) BufferedImage:内存图像 Graphics:画笔 ImageIO:输出图像 放在html页面上<img src/> 注意:浏览器默认会缓存图片 public static int WIDTH =

  • Java Chaos Game噪声游戏实例代码

    [简介] 最近一直在读<深奥的简洁>,里面有一章介绍了几种使用噪声产生分形图的方法,感觉很有意思,于是尝试使用计算机模拟了一下,效果还不错(噪声法比传统迭代法在编程上好实现一些,后来发现这类算法还不少,搜索chaosgame可以找到更多). [Sierpinski三角形的噪声产生法] 在这些噪声游戏中,Sierpinski(谢尔宾斯基)三角形的生成规则可谓是最简单的: 1.在平面上选取三个点,标记为1.2.3,作为大三角形的顶点. 2.选择其中一点,作为"当前点"(比如选择

  • Java性能优化之数据结构实例代码

    -举例(学生排课)- 正常思路的处理方法和优化过后的处理方法: 比如说给学生排课.学生和课程是一个多对多的关系. 按照正常的逻辑 应该有一个关联表来维护 两者之间的关系. 现在,添加一个约束条件用于校验.如:张三上学期学过的课程,在排课的时候不应该再排这种课程. 所以需要出现一个约束表(即:历史成绩表). 即:学生选课表,需要学生成绩表作为约束. -方案一:正常处理方式- 当一个学生进行再次选课的时候.需要查询学生选课表看是否已经存在. 即有如下校验: //查询 学生code和课程code分别为

  • java实现远程桌面的实例代码

    java实现远程桌面的实例代码 控制端将鼠标事件传递到服务端 服务端拿到鼠标事件之后传输到客户端 客户端拿到鼠标事件之后,通过robot类即可完成,并且截屏将图片发给服务器,服务器再发给控制端 被我简化之后得到 //先介绍一下robot类的简单使用 import java.awt.AWTException; import java.awt.Robot; import java.awt.event.InputEvent; /** * 使用robot * @author 哑元 * */ public

随机推荐