Java访问Hadoop实践

来源:互联网 发布:单片机资源百度云盘 编辑:程序博客网 时间:2024/05/22 03:34

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数据返回一次,写完返回true        IOUtils.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,否则填false        boolean flag =fs.delete(new Path("/sogou_pinyin_80k.exe"),false);        System.out.println(flag);    }}


=完结=

参考资料

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


0 0
原创粉丝点击