Java访问Hadoop实践

要想访问Hadoop集群,你当然要自己有一个集群呀,否则怎么test,此处有教你怎样用虚拟机搭建Hadoop集群

http://blog.csdn.net/admin1973/article/details/60874923

此处记录用java访问Hadoop集群HDFS,简单操作

源码下载地址:

http://download.csdn.net/detail/admin1973/9774470

首先你需要创建一个java项目并导入所必须的jar包:

这些都是访问hdfs所必须的jar

然我就开始贴代码了

前面说了这么多东西都是为Java和Hadoop结合做准备的,下面我们正式进入主题。我们新建一个类,叫HDFSDemo1,如下图所示,我们先来测试一下从HDFS上下载的功能。我们在HDFS系统的根目录下有一个sougou_pinyin_80k.exe的文件,我们现在想把它下载到本F://sougou_pinyin_80k.exe目录下。下面代码中,IOUtils的第三个参数值4096是很多大师级人物在写文件读取时常用的值(4k),第四个参数true的意思是文件写完后返回true。

package com.sct.hadoop;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;import java.io.FileOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;/*** Created by leitao on 2017/3/8.*/
public class DownloadFile {public static void main(String[] args) throws  Exception{//FileSystem是一个抽象类,因此我们再使用它的时候要先创建FileSystem的实现类(工具类)FileSystem fs = FileSystem.get(new URI("hdfs://192.168.113.130:9000"),new Configuration());InputStream is = fs.open(new Path("/sogou_pinyin_80k.exe"));OutputStream out = new FileOutputStream("E://sogou_pinyin_80k.exe");IOUtils.copyBytes(is,out,4096,true);System.out.println("下载完成");}
}

 接下来我们开始执行上面那段代码,执行完之后,我们再来看一看E盘根目录下是否多了一个sougou_pinyin_80k.exe的文件,如下图所示,我们发现确实多了一个jdk1.7的文件!

说明我们Java和Hadoop结合的第一个小功能成功了!!

接下来我们再测试一下上传的功能

package com.sct.hadoop;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;import java.io.FileInputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;/*** Created by leitao on 2017/3/8.*/
public class UploadFile {public  static  void  main(String[] args) throws  Exception{FileSystem fs = FileSystem.get(new URI("hdfs://192.168.113.130:9000"),new Configuration(),"root");//读取本地文件系统,并创建输入流InputStream in = new FileInputStream("F://sogou_pinyin_80k.exe");//在HDFS上创建一个文件返回输出流OutputStream out = fs.create(new Path("/sogou_pinyin_80k.exe"));//将输入流写到输出流,buffersize是4k,即每读4k数据返回一次,写完返回trueIOUtils.copyBytes(in,out,4096,true);System.out.println("上传Hadoop文件成功!");}}

我们来看看报的错误信息,从描述中我们不难看出这是连接被拒绝的意思,也就是说我们缺乏写权限。
  既然我们没有root权限,我们不妨先来伪装一下root,让HDFS认为我就是root用户,伪装的方法是在加载fs的时候增加一个用户的参数"root"。添加完之后我们再来运行testUpload方法,发现运行成功了!这里值得说明的是,这种方式来操作HDFS显然是不好的,因为任何人都可以伪装成root来对HDFS进行写操作,很有可能出现恶意攻击。

既然运行成功了,我们赶紧来看看HDFS的根目录下是否有我们刚才上传上去的文件。我们选择以浏览器的方式来查看HDFS根目录下的文件,我们发现根目录下确实多了一个sougou_pinyin_80k.exe文件.

我们再来新建文件夹,执行完该方法后,到浏览器中查看HDFS的根目录,发现确实多了leitao这个文件夹。

package com.sct.hadoop;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;import java.net.URI;/*** Created by leitao on 2017/3/8.*/
public class mkdir {public static void main(String[] args)throws Exception{FileSystem fs = FileSystem.get(new URI("hdfs://192.168.113.130:9000"),new Configuration(),"root");//测试创建一个文件夹,在HDFS上创建一个leitao文件夹,原根目录下使没有这个文件的boolean flag = fs.mkdirs(new Path("/leitao"));System.out.println(flag);}
}

接下来我们再尝试一下删除HDFS系统上的文件,如下图所示,我们试着把HDFS系统根目录下的jdk1.7文件给删除掉,运行后发现返回的值是true,说明我们删除成功!

package com.sct.hadoop;import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;import java.net.URI;/*** Created by leitao on 2017/3/8.*/
public class deleteFile {public static  void main(String[] args) throws  Exception{FileSystem fs = FileSystem.get(new URI("hdfs://192.168.113.130:9000"),new Configuration(),"root");//测试删除文件,我们尝试删除HDFS下的sogou_pinyin_80k.exe,fs.delete()第二个参数是告诉方法是否//递归删除,如果是文件夹,并且文件夹中有文件的话就填写true,否则填falseboolean flag =fs.delete(new Path("/sogou_pinyin_80k.exe"),false);System.out.println(flag);}
}

=完结=

参考资料

http://blog.csdn.net/u012453843/article/details/52487499

Java访问Hadoop实践相关推荐

  1. java访问修饰符详解——学java,零基础不怕,不只要理论,更要实践+项目,a href=http://www.bjweixin.com太原维信科技提供 /a...

    java访问修饰符详解--学java,零基础不怕,不只要理论,更要实践+项目 <a href=http://www.bjweixin.com>太原维信科技提供 </a> pub ...

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

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

  3. java并发编程实践(1)intro

    [0]README 0.1)本文部分文字描述转自"java并发编程实践",旨在学习"java并发编程实践(1)intro"的相关知识: [3]线程带来的风险 [ ...

  4. Java 理论与实践: 非阻塞算法简介——看吧,没有锁定!(转载)

    简介: Java™ 5.0 第一次让使用 Java 语言开发非阻塞算法成为可能,java.util.concurrent 包充分地利用了这个功能.非阻塞算法属于并发算法,它们可以安全地派生它们的线程, ...

  5. java 理论与实践,Java 理论与实践: 正确使用 Volatile 变量

    Java™ 语言包含两种内在的同步机制:同步块(或方法)和 volatile 变量.这两种机制的提出都是为了实现代码线程的安全性.其中 Volatile 变量的同步性较差(但有时它更简单并且开销更低) ...

  6. Java 理论与实践: 流行的原子——新原子类是 java.util.concurrent 的隐藏精华(转载)...

    简介: 在 JDK 5.0 之前,如果不使用本机代码,就不能用 Java 语言编写无等待.无锁定的算法.在 java.util.concurrent 中添加原子变量类之后,这种情况发生了变化.请跟随并 ...

  7. 赠书:《Java性能优化实践》,众多业内大佬推荐阅读

    没有捷径可走的 Java 性能优化 多年来,用 Google 搜索 Java performance tuning,出现的三篇最热门文章之一是于 1997 年到 1998 年左右发表的文章,这篇文章在 ...

  8. java的WebService实践(cxf)

    java的WebService实践(cxf) Java发布WebService,结合Spring,通过cxf的方式 难点:1.引用什么jar包: 1.创建接口 源码如下: package com.na ...

  9. Java 理论与实践: 垃圾收集简史

    垃圾收集的好处是无可争辩的 ―― 可靠性提高.使内存管理与类接口设计分离,并使开发者减少了跟踪内存管理错误的时间.著名的悬空指针和内存泄漏问题在 Java 程序中再也不会发生了(Java 程序可能会出 ...

最新文章

  1. 想拥有一款钢铁侠Jarvis管家的软件吗?
  2. UEditor使用报错Cannot set property 'innerHTML' of undefined
  3. Fastreport.Net用户手册:报表对象
  4. python实现api接口的脚本_Zabbix批量添加主机,Python调用api接口方式【脚本定制】...
  5. 穿越疫情,阿里云3000万补贴助力中小企业寒冬突围
  6. Linux C DNS 查询IP地址
  7. Linux 多网卡bond
  8. 游戏内存读取工具_不因内存弃旧爱,东芝Canvio Gaming移动硬盘评测
  9. 1.4-nginx启动脚本和配置文件
  10. Haswell 事务内存相关的一些资源介绍
  11. 中信建投软件测试,中信建投笔试经验-范例
  12. AutoHotKey映射方向键和Home, End键
  13. uni-app 创建新页面和页面的配置
  14. Google play 应用签名密钥证书,上传签名证书区别
  15. 水晶报表 (Crystal Reports 2008)的配置
  16. Linux Qt cannot find -lGL错误完美解决方案
  17. 授人以鱼不如授人以渔——和女儿学一起学成语
  18. win10升级nvidia、cuda、cudnn,非常简单
  19. python经济学_用python学习中级微观经济学【WARP篇】
  20. 易语言c源码流程图怎么实现,易语言APC内存注入主要流程源码

热门文章

  1. 沁恒CH32V307单片机入门(02):官方库与工程模板介绍
  2. python中字符串操作
  3. threejs 绘制球体_javascript – 使用ThreeJS获取球体纹理上的点击位置
  4. PPT幻灯片高级使用技巧
  5. 神经网络中的常用算法-BP算法
  6. Tomcat端口被占用(MyEclipse2017或者跟高版本的MyEclipse如何直接修改Tomcat端口号)
  7. NBA 篮球英语第二集
  8. 开机预读快还是不预读快_【采纳后追加100悬赏!】恢复开机预读后为什么变成了延迟预读?...
  9. 网络上的计算机病毒怎么办,电脑中病毒怎么办  电脑病毒的危害有哪些
  10. C语言 文件操作的头文件