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);}}

hdfs java读写hdfs demo相关推荐

  1. Java 读写 hdfs文件或者目录

    1.读取单个文件 [java] view plain copy Date date = DateUtil.getSpecifiedDayBefore(); String yesterday = Dat ...

  2. MapReduce统计排序和HDFS的读写

    实验材料及说明 在Ubuntu系统的/学号(每个人之间的学号)/salesInfo目录下,有买家的购买记录文件Sales,该文件记录了买家的id,购买商品的id以及购买日期,文件为名为Sales.Sa ...

  3. HDFS文件系统基本文件命令、编程读写HDFS

    HDFS是一种文件系统,存储着Hadoop应用将要处理的数据,类似于普通的Unix和linux文件系统,不同的是他是实现了google的GFS文件系统的思想,是适用于大规模分布式数据处理相关应用的.可 ...

  4. hadoop java操作hdfs

    hfds 是一种文件系统,用于存储hadoop将要处理的数据.适用于大规模分布式数据处理,是一个可扩展行的文件分布式系统: 优点 1.如果出现节点宕机,hdfs,可以持续监视,错误检查,容错处理,文档 ...

  5. 分布式文件系统—HDFS—Java API操作

    原文作者:jiangw-Tony 原文地址:HDFS基础使用 hdfs 在生产应用中主要是客户端的开发,其核心步骤是从 hdfs 提供的 api 中构造一个 HDFS的访问客户端对象,然后通过该客户端 ...

  6. hadoop hdfs (java api)

    简单介绍使用java控制hdfs文件系统 一.注意namenode端访问权限,修改hdfs-site.xml文件或修改文件目录权限 本次采用修改hdfs-site.xml用于测试,在configura ...

  7. Java 操作 HDFS

    HDFS 作为开源界比较成熟的分布式文件存储系统,适用于海量文件存储,本文介绍了如何使用 Java 操作 HDFS,采用 Maven 管理包. pom.xml <dependency>&l ...

  8. hadoop java访问_Hadoop(五)搭建Hadoop客户端与Java访问HDFS集群

    上一篇详细介绍了HDFS集群,还有操作HDFS集群的一些命令,常用的命令: hdfs dfs -ls xxx hdfs dfs -mkdir -p /xxx/xxx hdfs dfs -cat xxx ...

  9. 常用HDFS java API

    hadoop 关于文件操作类基本上是在"org.apache.hadoop.fs"包中.如:打开文件,删除文件,读写文件等. static FileSystem get (Conf ...

最新文章

  1. 使用git命令上传本地文件到GitHub上
  2. 如何修改influxdb表结构_使用nginx-lua修改influxdb API的返回结构
  3. Apache Ranger插件的美丽简洁
  4. 关于Makefile,Makefile.in,Makefile.am,Configure功能及相互关系的问题
  5. JavaWeb三大组件(ServletFilterListener)
  6. 如何打造高质量的SSP广告引擎(内部干货分享)
  7. 基于Tesseract的Android OCR应用程序
  8. 台积电:无法回应检调中的案件,不评论单一客户特定订单
  9. 让无线网卡同时工作在 AP 和 STA 模式
  10. Winodws 10中pyCharm 2017安装
  11. 和其正的复兴梦,藏在气泡水与凉茶的碰撞里?
  12. E聊SDK-简介(1): 介绍
  13. sql导入数据以及列表编号设置自动填充
  14. 【笔记】MATLAB 批量注释/批量取消注释
  15. 在unreal中的基于波叠加的波浪水面材质原理和制作
  16. mug网络用语_游戏术语
  17. Git基本命令及缩写
  18. 基于JAVA图书馆座位预约管理系统计算机毕业设计源码+数据库+lw文档+系统+部署
  19. 从PHP 5到PHP 7性能全评测(含未发布的JIT版PHP 8对比)
  20. SQL2000重新装,有文件挂起

热门文章

  1. linux环境对xml的影响,Linux下XPath对xml解析
  2. lintcode 落单的数(位操作)
  3. codeforces B. Pasha and String(贪心)
  4. c++ dicom图像切割_【高训智造】原创专业课堂第225期--定位滑座的线切割加工
  5. spring boot admin 2.2 获取日志失败_SB实战20-Spring Boot的日志和报告
  6. python程序设计上机实践第三章答案_20192419 实验三《Python程序设计》实验报告
  7. php tire树,Immutable.js源码之List 类型的详细解析(附示例)
  8. Java小魔女芭芭拉_沉迷蘑菇不可自拔,黏土人《小魔女学园》苏西·曼芭芭拉 图赏...
  9. vuex中的值变化 页面重新渲染_浅谈浏览器的渲染过程,重绘与回流
  10. android studio 跨进程,Android IPC机制(三)在Android Studio中使用AIDL实现跨进程方法调用...