hadoop hdfs (java api)

简单介绍使用java控制hdfs文件系统

一、注意namenode端访问权限,修改hdfs-site.xml文件或修改文件目录权限

本次采用修改hdfs-site.xml用于测试,在configuration节点中添加如下内容

    <property><name>dfs.permissions.enabled</name><value>false</value></property>

二、本次使用eclipse环境新建项目完成测试

使用手动添加jar包完成环境准备,jar包位于hadoop解压目录 

如下:

 

hadoop-2.7.3\share\hadoop\common\hadoop-common-2.7.3.jar
hadoop-2.7.3\share\hadoop\common\lib\*.jar
hadoop-2.7.3\share\hadoop\hdfs\hadoop-hdfs-2.7.3.jar

添加完成jar包就可以编写代码,链接hdfs文件系统

链接hdfs需完成如下步骤

1.创建 org.apache.hadoop.conf.Configuration 用于指定客户端的配置(服务器的地址,上传下载文件的一些配置),本次采用如下方式配置

package com.huaqin.hdfs.conf;import org.apache.hadoop.conf.Configuration;public class DeFaultDfsClientConfigration extends Configuration{public DeFaultDfsClientConfigration() {this.set("fs.defaultFS","hdfs://*.*.*.*:9000");this.set("dfs.replication", "2");}
}

2.编写Utils封装常见操作文件方法

需使用org.apache.hadoop.fs.FileSystem

通过上面的配置文件创建

FileSystem fileSystem = FileSystem.get(new DeFaultDfsClientConfigration());

创建完成之后便可以操作hdfs了,代码封装如下

package com.huaqin.hdfs.utils;import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.util.Map;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 com.huaqin.hdfs.conf.DeFaultDfsClientConfigration;public class HDFSFileUtils {public double progressBar;public HDFSFileUtils() throws IOException {// 使用默认类加载fileSystem = FileSystem.get(new DeFaultDfsClientConfigration());}public HDFSFileUtils(DeFaultDfsClientConfigration clientConfration) throws IOException {// 使用指定类加载fileSystem = FileSystem.get(clientConfration);}// 默认客户端配置类private FileSystem fileSystem;public void reloadClientConfigration(DeFaultDfsClientConfigration clientConfration) {fileSystem.setConf(clientConfration);}public FileStatus[] list(String fileName) throws FileNotFoundException, IllegalArgumentException, IOException {// TODO Auto-generated method stubFileStatus[] statusList = this.fileSystem.listStatus(new Path(fileName));return statusList;}public void text(String fileName) throws IllegalArgumentException, IOException {// TODO Auto-generated method stubFSDataInputStream inputStream = this.fileSystem.open(new Path(fileName));IOUtils.copyBytes(inputStream, System.out, fileSystem.getConf());}// 上传文件public void upload(String src, String dest) throws IOException {// TODO Auto-generated method stubFileInputStream in = new FileInputStream(src);FSDataOutputStream os = this.fileSystem.create(new Path(dest), true);IOUtils.copyBytes(in, os, 4096, true);}// 删除文件public boolean deleteFile(String dest) throws IllegalArgumentException, IOException {// TODO Auto-generated method stubboolean success = this.fileSystem.delete(new Path(dest), true);return success;}// 创建文件夹public boolean makeDir(String dest) throws IllegalArgumentException, IOException {return this.fileSystem.mkdirs(new Path(dest));}// 下载显示进度public void download2(String dest, Map<String, Integer> descript) throws IllegalArgumentException, IOException {FSDataInputStream in = fileSystem.open(new Path(dest));descript.put("byteSize", in.available());descript.put("current", 0);byte[] bs = new byte[1024];while (-1 != (in.read(bs))) {descript.put("current", descript.get("current") + 1024);}in.close();}// 上传显示进度public void upload2(String src, String dest, Map<String, Long> descript)throws IllegalArgumentException, IOException {File file = new File(src);FileInputStream in = new FileInputStream(file);FSDataOutputStream out = this.fileSystem.create(new Path(dest), true);descript.put("byteSize", file.length());descript.put("current", 0l);// 0.5mbbyte[] bs = new byte[1024 * 1024 / 2];while (-1 != (in.read(bs))) {out.write(bs);descript.put("current", descript.get("current") + 1024);}out.close();in.close();}}

三、以下是JUnitTest测试环境

import java.io.IOException;
import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.Map;import org.junit.Before;
import org.junit.Test;import com.huaqin.hdfs.utils.HDFSFileUtils;public class HDFSFileUtilsJUT {@Beforepublic void before() throws IOException {fileUtils = new HDFSFileUtils();}HDFSFileUtils fileUtils;@Testpublic void testCreateNEWFile() throws IOException {
//        fileUtils.upload("D:\\temp\\helloworld.txt", "/tmp/helloworld.txt");fileUtils.upload("E:\\devtool\\hadoop-2.7.3.tar.gz", "/hadoop-2.7.3.tar.gz");}@Testpublic void testText() throws IllegalArgumentException, IOException {fileUtils.text("/hello.txt");}@Testpublic void testDeleteFile() throws IllegalArgumentException, IOException {boolean success = fileUtils.deleteFile("/CentOS-7-x86_64-DVD-1511.iso");System.out.println(success);}@Testpublic void testZMikdirs() throws IllegalArgumentException, IOException {boolean success = fileUtils.makeDir("/tmp");System.out.println(success);}@Testpublic void testdownload2() throws IllegalArgumentException, IOException {Map<String, Integer> desc = new HashMap<>();desc.put("current", 0);desc.put("byteSize", 0);new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubwhile (true) {try {Thread.sleep(500);System.out.printf("maxL:%d\tcurrent:%d\tsurplus:%d\n", desc.get("byteSize"),desc.get("current"),desc.get("byteSize")-desc.get("current"));} catch (InterruptedException e) {// TODO Auto-generated catch block
                        e.printStackTrace();}}}}).start();fileUtils.download2("/hadoop-2.7.3.tar.gz",desc);}@Testpublic void testupload2() throws IllegalArgumentException, IOException {DecimalFormat df = new DecimalFormat("0.00%");Map<String, Long> desc = new HashMap<String, Long>();desc.put("current", 0l);desc.put("byteSize", 0l);new Thread(new Runnable() {@Overridepublic void run() {// TODO Auto-generated method stubwhile (true) {try {Thread.sleep(500);System.out.printf("maxL:%d\tcurrent:%d\tsurplus:%d\tprogressBar:%s\n", desc.get("byteSize"),desc.get("current"),desc.get("byteSize")-desc.get("current"),df.format((desc.get("current")+0.0)/desc.get("byteSize")));} catch (InterruptedException e) {// TODO Auto-generated catch block
                        e.printStackTrace();}}}}).start();fileUtils.upload2("D:\\hadoop\\CentOS-7-x86_64-DVD-1511.iso", "/CentOS-7-x86_64-DVD-1511.iso",desc);}}

 

转载于:https://www.cnblogs.com/black-/p/8677743.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/353886.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

glassfish_重写到边缘–充分利用它! 在GlassFish上!

glassfish现代应用程序开发的一个重要主题是重写。 自从Java Server Faces引入和Java EE 6中新的轻量级编程模型以来&#xff0c;您一直在努力使用漂亮&#xff0c;简单&#xff0c;可添加书签的URL。 PrettyFaces已有一段时间了&#xff0c;即使我可以说服它在3.3.3版本中被称…

BZOJ 4557 JLOI2016 侦查守卫 树形dp

题目链接&#xff1a;https://www.lydsy.com/JudgeOnline/problem.php?id4557 题意概述&#xff1a; 给出一棵树&#xff0c;每个点付出代价w[i]可以控制距离和它不超过d的点&#xff0c;现在给出一些点&#xff0c;问控制这些点的最小代价是多少。 分析: 观察一下数据范围发现…

Java6上开发WebService

Java6上开发WebService 2010-01-23 16:19:00 标签&#xff1a;Java6 WebService 休闲 职场 版权声明&#xff1a;原创作品&#xff0c;如需转载&#xff0c;请与作者联系。否则将追究法律责任。 近日朋友问起Java开发WebService的问题&#xff0c;于是为其写了一份简单说明&…

在spring中该如何使用DTO,以及DTO和Entity的关系

1. DTO是用于将后台的数据结构&#xff08;javaBean&#xff09;转换为对用户友好的表现方式的数据结构&#xff0c;同时也能防止后台数据直接传送到前台而存在的潜在危险。 2. 可以时候要哪个springbot框架提供的转换器接口&#xff1a; org.springframework.core.convert.con…

带有Kafka和ZeroMQ的分布式类星体演员

因此&#xff0c;您已经有了使用actor的精美设计&#xff0c;选择了JVM和Quasar在该主题上的强大而忠实的观点。 所有明智的决定&#xff0c;但是在集群上进行分配时您有什么选择呢&#xff1f; 星系 Galaxy是一个非常酷的选择&#xff1a;快速的内存中数据网格&#xff0c;针…

JAVA中断线程的方法

JAVA中断线程的方法 Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经被废弃&#xff0c;使用它们是极端不安全的&#xff01; 现在&#xff0c;如果你要安全有效地终止一个线程&#xff0c;应该采用以下这些方法&a…

最常见的Java异常及其对Java开发人员的评价

我知道我说在完成视频之前我不会张贴帖子&#xff0c;但这一直困扰着我。 至于视频的更新&#xff0c;我有些懒散&#xff0c;有些忙碌&#xff0c;但是我已经准备好记录第一集&#xff0c;这是我第一次有机会&#xff0c;而且我不需要太多的编辑。 无论如何&#xff0c;还是今…

日志系统设计

日志系统设计 2009-12-11 00:46:58| 分类&#xff1a; 技术 | 标签&#xff1a; |字号大中小 订阅 一、重要性日志系统在整个系统架构中的重要性可以称得上基础的基础&#xff0c;但是这一点&#xff0c;都容易被大多数人所忽视。因为日志在很多人看来只是printf。在系…

bzoj 1124 [POI2008]枪战Maf 贪心

[POI2008]枪战Maf Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 741 Solved: 295[Submit][Status][Discuss]Description 有n个人&#xff0c;每个人手里有一把手枪。一开始所有人都选定一个人瞄准&#xff08;有可能瞄准自己&#xff09;。然后他们按某个顺序开枪&#x…

核心API最佳实践——JDK日志分级

核心API最佳实践——JDK日志分级 时间:2005-10-29 08:00 来源:网管之家bitsCN.com 字体:[大 中 小]日志&#xff08;Log&#xff09;是什么&#xff1f;字典对其的解释是"对某种机器工作情况或某项任务进展情况的记载"。对于应用系统来说&#xff0c;日志就应该记录应…

20165234 《Java程序设计》第五周学习总结

第五周学习总结 教材学习内容总结 第七章 内部类与异常类 内部类内部类&#xff1a;在一个类中定义另一个类。 外嵌类&#xff1a;包含内部类的类&#xff0c;称为内部类的外嵌类。 内部类的类体中不能声明类变量和类方法。外嵌类的类体中可以用内部类声明对象&#xff0c;作为…

Java日志操作总结

Java日志操作总结 (2008-04-21 17:39:06)标签&#xff1a; 杂谈 . 使用Jakarta Commons Logging(JCL) 1.1. 概述 Apache的开源日志组件Jakarta CommonsLogging(JCL)提供的是一个日志(Log)接口(Interface)&#xff0c;同时兼顾轻量级和不依赖于具体的日志实现工具。它提供给中…

4-2日装饰器,带参数的装饰器

1&#xff0c;函数的有用信息 from functools import wraps#引用模块 def wrapper(f): # f func1wraps(f)def inner(*args,**kwargs): #聚合#args &#xff08;1,2,3&#xff09;执行函数之前的相关操作ret f(*args,**kwargs) # 打散 1,2,3执行函数之后的相关操作return re…

Apache Storm:如何使用Flux配置KafkaBolt

微型框架中的助焊剂可以帮助我们定义和部署Storm拓扑。 Flux有各种包装器&#xff0c;可帮助您定义所需的流并初始化Bolts和Spouts&#xff08;使用带有或不带有参数的构造函数&#xff0c;并通过反射自动调用自定义配置方法&#xff09;。 您只需要使用Flux就是将其作为依赖…

java 获取当前函数名

import java.text.SimpleDateFormat; import java.util.Date; /** * Java实现类似C/C中的__FILE__、__FUNC__、__LINE__等,主要用于日志等功能中。 * * version 1.0 2011-07-13 * */ public abstract class CommonFunction { /** * 打印日志时获取当前的程序文件名、行号、方法…

美国华尔街拥抱区块链是最大的威胁

Overstock的首席执行官帕特里克伯恩宣布证券交易委员会已批准其计划在区块链上发行股票&#xff0c;该区块链是推动比特币数字货币的巨大在线分类账。 这是一个重要的时刻。至少在理论上&#xff0c;区块链可以更有效&#xff0c;准确和公开地跟踪股票&#xff0c;债券和其他金…

java枚举和枚举类_Java枚举:您拥有优雅,优雅和力量,这就是我所爱!

java枚举和枚举类当Java 8即将面世时&#xff0c;您确定您对Java 5中引入的枚举很熟悉吗&#xff1f; Java枚举仍然被低估了&#xff0c;很可惜&#xff0c;因为它们比您想象的要有用&#xff0c;它们不仅仅用于通常的枚举常量&#xff01; Java枚举是多态的 Java枚举是可以包…

Java关键字final、static使用总结

Java关键字final、static使用总结 一、final 根据程序上下文环境&#xff0c;Java关键字final有“这是无法改变的”或者“终态的”含义&#xff0c;它可以修饰非抽象类、非抽象类成员方法和变量。你可能出于两种理解而需要阻止改变&#xff1a;设计或效率。 final类不能被继承…

【SpringCloud】第五篇: 路由网关(zuul)

前言: 必需学会SpringBoot基础知识 简介: spring cloud 为开发人员提供了快速构建分布式系统的一些工具&#xff0c;包括配置管理、服务发现、断路器、路由、微代理、事件总线、全局锁、决策竞选、分布式会话等等。它运行环境简单&#xff0c;可以在开发人员的电脑上跑。 工具:…

ubuntu shell简介

ubuntu shell简介 (2012-03-13 19:48:09) 标签&#xff1a; 杂谈 分类&#xff1a; 虚拟机下的ubuntu8.04 1.什么是shell&#xff1f; shell是接受用户或应用层的命令&#xff0c;并将这些命令解释给底层的系统内核层&#xff0c;由这些内核完成相应的工作&#xff0c;并将结果…