hdfs java读写hdfs demo

windows环境配置:


1.下载winutils的windows版本

  GitHub上,有人提供了winutils的windows的版本,

项目地址是:https://github.com/srccodes/hadoop-common-2.2.0-bin,直接下载此项目的zip包,下载后是文件名是hadoop-common-2.2.0-bin-master.zip,

2016-12-14更新

在hadoop2.7.x版本里,请使用:https://github.com/SweetInk/hadoop-common-2.7.1-bin

随便解压到一个目录,将加压出来的bin文件夹覆盖hadoop压缩包解压出来的bin目录。

2.配置环境变量

  增加用户变量HADOOP_HOME,值是下载的zip包解压的目录,然后在系统变量path里增加%HADOOP_HOME%\bin 。

3、压缩包里的hadoop.dll,并拷贝到c:\windows\system32目录中。


如果下载的版本与hadoop不对应,或者windows环境没配置好,会报错:

1、java.io.IOException: (null) entry in command string: null chmod 0644

2、java.lang.UnsatisfiedLinkError: org.apache.hadoop.io.nativeio.NativeIO


实例代码:



package filedemo;import java.io.FileInputStream;
import java.net.URI;
import java.util.Iterator;
import java.util.Map.Entry;import org.apache.commons.io.IOUtils;
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.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.junit.Before;
import org.junit.Test;public class HdfsUtil {FileSystem fs=null;//@Before 是junit 测试框架@Beforepublic void init() throws Exception{/** * 注意注意注意* windows上eclipse上运行,hadoop的bin文件下windows环境编译的文件和hadoop版本关系紧密* 如果报错,或者api无效,很可能是bin下hadoop文件问题* *///读取classpath下的core/hdfs-site.xml 配置文件,并解析其内容,封装到conf对象中//如果没有会读取hadoop里的配置文件Configuration conf=new Configuration();//也可以在代码中对conf中的配置信息进行手动设置,会覆盖掉配置文件中的读取的值//设置文件系统为hdfs。如果设置这个参数,那么下面的方法里的路径就不用写hdfs://hello110:9000///conf.set("fs.defaultFS", "hdfs://hello110:9000/");//根据配置信息,去获取一个具体文件系统的客户端操作实例对象fs=FileSystem.get(new URI("hdfs://hadoop1:9000/"), conf,"hadoop");Iterator<Entry<String, String>> iterator = conf.iterator();while(iterator.hasNext()){Entry<String, String> ent=iterator.next();System.out.println(ent.getKey()+"  :  "+ent.getValue());}System.out.println("-----------------/hdfs-site.xml 文件读取结束----------------");}@Testpublic void listFiles() throws Exception{//RemoteIterator 远程迭代器RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);while(listFiles.hasNext()){LocatedFileStatus file = listFiles.next();Path path = file.getPath();//String fileName=path.getName();System.out.println(path.toString());System.out.println("权限:"+file.getPermission());System.out.println("组:"+file.getGroup());System.out.println("文件大小:"+file.getBlockSize());System.out.println("所属者:"+file.getOwner());System.out.println("副本数:"+file.getReplication());BlockLocation[] blockLocations = file.getBlockLocations();for(BlockLocation bl:blockLocations){System.out.println("块起始位置:"+bl.getOffset());System.out.println("块长度:"+bl.getLength());String[] hosts = bl.getHosts();for(String h:hosts){System.out.println("块所在DataNode:"+h);}}System.out.println("*****************************************");}System.out.println("-----------------华丽的分割线----------------");FileStatus[] listStatus = fs.listStatus(new Path("/"));for(FileStatus status:listStatus){String name=status.getPath().getName();System.out.println(name+(status.isDirectory()?" is Dir":" is File"));}}//比较低层的写法@Testpublic void upload() throws Exception{System.out.println("-----------------upload----------------");Path path = new Path("/testdata/testFs.txt");FSDataOutputStream os = fs.create(path);FileInputStream is = new FileInputStream("d:/testFS.txt");IOUtils.copy(is, os);}//封装好的方法@Testpublic void upload2() throws Exception{System.out.println("-----------------upload2----------------");//hdfs dfs -copyFromLocal 从本地拷贝命令fs.copyFromLocalFile(new Path("d:/testFS-2.txt"), new Path("/testdata/testFs6.txt"));//如果windows-hadoop环境不行,可以用下面的api,最后的true是:用java的io去写。//fs.copyToLocalFile(false, new Path("d:/testFS-2.txt"), new Path("/testdata/testFs6.txt"), true);fs.close();}@Testpublic void download() throws Exception{//hdfs dfs -copyToLocal 拷贝到本地命令fs.copyToLocalFile(new Path("/testdata/testFs6.txt") , new Path("d:/testFS3.txt"));//如果windows-hadoop环境不行,可以用下面的api,最后的true是:用java的io去写。//fs.copyToLocalFile(false, new Path("/testdata/testFs6.txt"), new Path("d:/testFS3.txt"), true);}@Testpublic void mkdir() throws Exception{System.out.println("-----------------mkdir----------------");fs.mkdirs(new Path("/testdata/a123"));fs.mkdirs(new Path("/testdata/a124"));}@Testpublic void rm() throws Exception{//true:如果是目录也会删除。false,遇到目录则报错fs.delete(new Path("hdfs://hello110:9000/testdata/a124"), true);}}




package filedemo;import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.net.URI;import org.apache.commons.io.IOUtils;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.junit.Before;
import org.junit.Test;/*** 用流的方式来操作hdfs上的文件* 可以实现读取指定偏移量范围的数据* @author**/
public class HdfsStreamAccess {FileSystem fs = null;Configuration conf = null;@Beforepublic void init() throws Exception{conf = new Configuration();//拿到一个文件系统操作的客户端实例对象
//		fs = FileSystem.get(conf);//可以直接传入 uri和用户身份fs = FileSystem.get(new URI("hdfs://mini1:9000"),conf,"hadoop");}/*** 通过流的方式上传文件到hdfs* @throws Exception*/@Testpublic void testUpload() throws Exception {FSDataOutputStream outputStream = fs.create(new Path("/angelababy.love"), true);FileInputStream inputStream = new FileInputStream("c:/angelababy.love");IOUtils.copy(inputStream, outputStream);}/*** 通过流的方式获取hdfs上数据* @throws Exception*/@Testpublic void testDownLoad() throws Exception {FSDataInputStream inputStream = fs.open(new Path("/angelababy.love"));		FileOutputStream outputStream = new FileOutputStream("d:/angelababy.love");IOUtils.copy(inputStream, outputStream);}@Testpublic void testRandomAccess() throws Exception{FSDataInputStream inputStream = fs.open(new Path("/angelababy.love"));inputStream.seek(12);FileOutputStream outputStream = new FileOutputStream("d:/angelababy.love.part2");IOUtils.copy(inputStream, outputStream);}/*** 显示hdfs上文件的内容* @throws IOException * @throws IllegalArgumentException */@Testpublic void testCat() throws IllegalArgumentException, IOException{FSDataInputStream in = fs.open(new Path("/angelababy.love"));IOUtils.copy(in, System.out);}}



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

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

相关文章

cesium 经纬度绘制点_NCL绘制2016年1号台风(Nepartak)

begin ncol 6 ;台风参数 nrow 31 ;时次总数 nbin 6 ;已知该该气旋共经历了6个等级的演变 ;读入台风资料 data asciiread("NEPARTAK.txt",(/nrow,ncol/),"integer") ;/31,6/ 31行6列&#xff0c;integer整数类型 ;;数据读取函数总结&…

VR究竟多奇幻?eSmart邀你共赴一场VR奇幻之旅!

今年夏天&#xff0c;快来参加首届eSmart展会&#xff0c;来一场VR游戏的奇妙之旅&#xff0c;见识最好玩、最有趣的VR游戏&#xff01; 正如十几年前互联网的兴起开创了全新时代一样&#xff0c;VR产业在近两年也势不可挡。随着一重行业巨头的进入&#xff0c;2016年&#xf…

HTML5新的解析顺序,HTML5新表单新功能解析

HTML5新增了很多属性功能。但是有兼容性问题&#xff0c;因为这些表单功能新增的。我这里做了一个简单的练习&#xff0c;方便参考。如果完全兼容的话&#xff0c;那我们写表单的时候就省了很多代码以及各种判断。HTML5表单新功能解析#da{width:350px;height:600px;margin:0 au…

python子类继承父类属性实例_Python实现子类调用父类的初始化实例

前言 python中进行面向对象编程&#xff0c;当在子类的实例中调用父类的属性时&#xff0c;由于子类的__init__方法重写了父类的__init__方法&#xff0c;如果在子类中这些属性未经过初始化&#xff0c;使用时就会出错。 例如以下的代码: class A(object): def __init__(self):…

hadoop 回收站Trash

介绍&#xff1a; Hadoop回收站trash&#xff0c;默认是关闭的。 和Linux系统的回收站设计一样&#xff0c;HDFS会为每一个用户创建一个回收站目录&#xff1a;/user/用户名/.Trash/&#xff0c;每一个被用户通过Shell删除的文件/目录&#xff0c;在系统回收站中都一个周期&…

opencv画框返回坐标 python_[python]依靠pynput和pyautogui替换ahk

autohotkey当然是不错的工具&#xff0c;但是这个东西的社群一直发展的不行。从开始学习python以后&#xff0c;我就不时会希望能找到别的工具替代ahk。Python的众多包里面确实是有对应的工具的&#xff1a;模拟鼠标和键盘的操作可以用pyautogui&#xff0c;而捕捉热键则可以使…

Hadoop SequenceFile

apache原文&#xff1a;http://hadoop.apache.org/docs/r1.0.4/api/org/apache/hadoop/io/SequenceFile.html 概念&#xff1a; SequenceFile是一个由二进制序列化过的key/value的字节流组成的文本存储文件&#xff0c;它可以在map/reduce过程中的input/output 的format时被使…

机器学习算法平台alink_Alink漫谈(十二) :在线学习算法FTRL 之 整体设计

Alink漫谈(十二) &#xff1a;在线学习算法FTRL 之 整体设计[Toc]0x00 摘要Alink 是阿里巴巴基于实时计算引擎 Flink 研发的新一代机器学习算法平台&#xff0c;是业界首个同时支持批式算法、流式算法的机器学习平台。本文和下文将介绍在线学习算法FTRL在Alink中是如何实现的&a…

Linux Shell获取系统资源使用百分比(CentOS)

CPU使用率&#xff1a; top -b -n 1 | head -n 4 | grep "^Cpu(s)" | awk {print $2} | cut -d u -f 1 内存使用率&#xff1a; free -m | grep ^- | awk {print $3/($3$4)*100"%"} IO使用率&#xff08;FS_PATH的值改成df -h出来的那些Filesystem名称即可…

html城市绘制,HTML5/Canvas二分法构建城市版图

JavaScript语言&#xff1a;JaveScriptBabelCoffeeScript确定var ctx fullscreenCanvas().ctx;var canvas ctx.canvas;function Rect(pos, width, height) {this.pos pos;this.width width;this.height height;}Rect.prototype.update Function.prototype;Rect.prototype…

探测器反向偏压_近红外和可见光双模有机光电探测器

更多精彩&#xff0c;点击上方蓝字关注我们&#xff01;中英标题近红外和可见光双模有机光电探测器Near-infrared and Visible Light Dual-mode Organic Photodetectors图文导读研究报告了一种具有三层可见光吸收体/光学间隔层/近红外(NIR)光吸收体结构的双模有机光电探测器(OP…

html里post请求404,请求登陆页面post请求404错误,OPTIONS请求通过

点击登录的时候option请求是通过的&#xff0c;但post请求失败。服务端代码app.js&#xff1a;const express require(‘express’)const bodyParser require(‘body-parser’)const cors require(‘cors’)const router require(’./router/index’)// 创建 express 应用c…

python贪吃蛇毕业设计_【干货|python项目实例——贪吃蛇】- 环球网校

【摘要】当今世界充满了各种数据&#xff0c;而python是其中一种的重要组成部分。然而&#xff0c;若想其有所应用&#xff0c;我们需要对这些python理论进行实践。其中包含很多有趣的的过程&#xff0c;然后将其用于某些方面。其中一种应用就是python项目实例。今天环球网校的…

PWA即将推向所有Chrome平台

\看新闻很累&#xff1f;看技术新闻更累&#xff1f;试试下载InfoQ手机客户端&#xff0c;每天上下班路上听新闻&#xff0c;有趣还有料&#xff01;\\\大多数人应该都听说了微软已经着手在Windows商店中增加PWA&#xff0c;这是一个重磅消息&#xff01;\\\\渐进增强式Web应用…

c++代码转为go_Go语言学习笔记六--string编码

分解探索string编码转为byte数组func main() {s : "Hi小智加油!"fmt.Println("len(s):",len(s)) //len(s): 15 为什么是15呢?for _, v : range []byte(s) {fmt.Printf("%X ",v) //%X 转为16进制//48 69 E5 B0 8F E6 99 BA E5 8A A0 E6 B2 B9 21…

Linux机器件拷贝文件

常用命令有&#xff1a;sftp&#xff0c;scp sftp [rootzengmg develop_soft]# sftp 192.168.255.132Connecting to 192.168.255.132... The authenticity of host 192.168.255.132 (192.168.255.132) cant be established. RSA key fingerprint is bd:09:eb:22:2f:ed:95:57:ab…

steam游戏时长计算机,我加入steam五年了,盘点下我买过的22款正版单机游戏

我加入steam五年了&#xff0c;盘点下我买过的22款正版单机游戏2020-02-17 10:50:07104点赞72收藏37评论大家好吖&#xff0c;在2015年的时候朋友就推荐了我入坑steam&#xff0c;不过那个时候更多的知道这是个dota启动器&#xff0c;慢慢的steam也越来越出名啦&#xff0c;中国…

AdPlayBanner:功能丰富、一键式使用的图片轮播插件

概述 AdPlayBanner&#xff1a;功能丰富、一键式使用的图片轮播插件详细 代码下载&#xff1a;http://www.demodashi.com/demo/11312.html AdPlayBanner是一个Android平台基于ViewPager实现的轮播图插件&#xff0c;主要用以自动或者手动地播放轮播图&#xff0c;提供了Fresco、…

pycharm运行模型时怎么设置权重?_使用AMP和Tensor Cores得到更快速,更节省内存的PyTorch模型...

点击上方“AI派”&#xff0c;关注公众号&#xff0c;选择加“星标“或“置顶”导读只需要添加几行代码&#xff0c;就可以得到更快速&#xff0c;更省显存的PyTorch模型。你知道吗&#xff0c;在1986年Geoffrey Hinton就在Nature论文中给出了反向传播算法&#xff1f;此外&…

引入静态变量_Common Lisp变量的一些事情

Lisp-1 vs Lisp-2[1]Scheme的求值模型非常简单&#xff1a;只是用一个名字空间&#xff0c;所有表达式中相应位置的值应该是明确的。Common Lisp和Scheme最大的不同是&#xff0c;函数名字空间和数据的名字空间是分离的。操作函数名字空间的语句包括&#xff0c;defun&#xff…