(2-4)HDFS的Java接口,上传,下载,创建文件,删除文件
来源:互联网 发布:淘宝卖灵符 法律 编辑:程序博客网 时间:2024/04/18 13:58
HDFS的Java接口
需要使用linux的图形界面,需要登录到eclipse
一般情况下,我们写大量数据的时候用的还是Java接口,我们使用的shell只进行一些简单的操作(删除,查看上传是否成功)
因此,我们采用Java接口的方式来操作HDFS。【我们在Linux下开发,因此一定要使用图形界面】
因此,学hadoop,就变成了要掌握Java基础,因此,在这里开一个番外,简要地了解一下Java的知识,语句,和执行Java的IDE
首先,安装一个eclipse。eclipse是一款开源的,软件集成环境【IDE】 有Windows版本和Linux版本两种
1、打开eclipse,点击文件-新建-Java 项目,输入project name:hadoop0106,点击finish
2、管理一些依赖,导java包,文件-新建-文件夹Folser,
输入或选择父文件夹:hadoop0106 文件夹名:lib,然后把它依赖的java包放在这里
F:\vmware\hadoop\hadoop-2.2.0\share\hadoop\common里的3个文件+
F:\vmware\hadoop\hadoop-2.2.0\share\hadoop\common\lib里的全部+
F:\vmware\hadoop\hadoop-2.2.0\share\hadoop\hdfs里的3个,都复制到lib里
然后全选,右键构建路径Build Path-添加到构建路径Add to Build Path
3、接着写java程序
新建-类class,指定一个 包名:cn.itcast.hadoop.hdfs 名称:HDFSDemo,选择public static void main,点击完成
用户无需了解哪些底层信息,而是它给我一个工具类,只要我使用这些工具类,就能把这些细节隐藏起来。用户可以非常方便的上传下载。
4、开始写代码
【一定要保证你当前JDK的版本和Hadoop集群是一样的】
HDFS里有一个工具类叫:FileSystem 来自org.apache.包
在讲课的人里面,他一输入FileSystem,就能出来这个包,还能自动import这个包,我一出来就是报错
原因:他用了快捷键Alt+/这个键 之后只要双击那个org.apache.hadoop.fs那个,就可以自动import那个包了。
上次就卡在这里了,现在,继续开工!
关联源码,双击FileSystem,鼠标放在上面出现一些东西,放到最下面,点击最下面的“打开声明”,可以出现关联源码界面,选择连接源代码
我们可以看到FileSystem 是一个抽象类(abstract),不能直接用。
注意:上传、下载需要先打开虚拟机的hdfs
方法一:(建议使用第一种方式,更清晰)
从HDFS下载到Windows
得到了实现类,就可以“玩” 了,可以来一个下载,我已经得到一个实现类“fs”了,那么先打开
打开是fs.open,我现在要打开一个路径,把它读进来。 我要从HDFS下载,需要先把HDFS文件读入到内存,然后再把数据写入到本地文件系统,因此,我们应该打开一个HDFS上的文件,
我们可以简写“/jdk1.7” 这个文件在HDFS上,
把这个文件先读进来。读进来之后,我还要new一个outputstream,写入文件系统
后面的地址是自己在Windows上的地址 c://jkd1.7
我们使用【工具类】IOUtils.copyBytes() 将in里的内容拷贝到out,buffersize=4096【一般都默认为4096】,拷贝完成之后穿true就关闭
IOUtils(选hadoop.io).copyBytes(in, out, 4096, true)(选(in, out, buffSize, close));
完整代码如下:
package cn.itcast.hadoop.hdfs;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URISyntaxException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
public class HDFSDemo {
public static void main(String[] args) throws Exception, Exception { #记得要抛出异常,选exception
FileSystem fs = FileSystem.get(new URI("hdfs://itcast01:9000"), new Configuration());
InputStream in = fs.open(new Path("/jdk1.7")); #文件在hdfs根目录下存在
OutputStream out = new FileOutputStream("c://jdk1.7");
IOUtils.copyBytes(in, out,4096, true);
}
}
代码的作用,是在Windows系统的C盘下,把hdfs上的jdk1.7编程了windowsin
值得注意的是,前面的import至关重要,导入时候用Alt+/ 但是容易导错,导错的话是无法解析出结果的。
当运行成功时,控制台给出的这样的结果
然后在window系统中便能看到我们从网上“下载”的数据了。
从Windows上传到HDFS
public class HDFSDemo {
FileSystem fs = null;
@Before
public void init() throws Exception, Exception{
//首先创建FileSystem的实现类(工具类)
fs = FileSystem.get(new URI("hdfs://itcast01:9000"), new Configuration(),"root"); #写了root就可以上传成功了,就是伪装成root用户,有上传的权限【但这种方式不安全】
}
@Test
public void testUpload() throws Exception{
//读取本地文件系统的文件,返回输入流
InputStream in = new FileInputStream("c://123.txt");
//在hdfs上创建一个文件,返回输出流
OutputStream out = fs.create(new Path("/123")); #上传到hdfs
//将输入流---->输出
IOUtils.copyBytes(in, out, 4096, true); #把in给out ,然后关闭
}
方法2 :更简单的方法【直接一步就完成了下载】
@Test
public void testDownload() throws Exception, Exception{
fs.copyToLocalFile(new Path("/jdk1.7"), new Path("c://jkd111") );
}
删除一个HDFS上的文件:
@Test
public void testDel() throws Exception, Exception{
boolean flag = fs.delete(new Path("/jdk1.7"),false); #false不是递归删除,删除文件返回布尔值(返回TRUE就是删除成功或FALSE)
System.out.println(flag);
}
成功后返回TRUE
创建一个HDFS目录:
@Test
public void testMkdir() throws Exception, Exception{
boolean mkdirs = fs.mkdirs(new Path("/itcast0106"));
System.out.println(mkdirs);
}
给文件夹里放一个文件
hadoop fs -put /root/install.log /itcast0106
然后再删除,会报错,/itcast0106 is non empty
@Test
public void testDel() throws Exception, Exception{
boolean flag = fs.delete(new Path("/jdk1.7"), true); #true表示递归删除
System.out.println(flag);
}
- (2-4)HDFS的Java接口,上传,下载,创建文件,删除文件
- HDFS 使用java api实现上传/下载/删除文件
- HDFS 使用Java api实现上传/下载/删除文件
- Eclipse 上传 删除 下载 分析 hdfs 上的文件
- Java实现远程HDFS的文件操作(新建、上传、下载、删除)
- 调用JAVA API 对 HDFS 进行文件的读取、写入、上传、下载、删除等操作
- Java实现远程HDFS的文件操作(新建、上传、下载、删除)
- 使用java接口上传文件到HDFS
- java 实现hadoop的hdfs文件的上传下载删除创建
- java操作hdfs 创建文件 删除文件 读取文件
- java实现对hdfs文件系统的上传,下载,删除,创建文件夹的操作演示
- hdfs文件上传和下载
- 十三、根据HDFS提供的API,实现文件上传、下载、删除、重命名、移动
- 文件上传、下载、删除
- JAVA实现FTP服务器文件的上传,下载,删除功能
- java测试FTP服务器的上传、下载、删除文件
- java上传、下载、删除ftp文件
- java删除hdfs文件的例子
- bzoj2555: SubString SAM+LCT
- ssh整合问题:启动tomcat时报错org.springframework.beans.factory.BeanCreationException
- Android 设置圆角虚线
- 蓝桥杯 ALGO-97排序
- C++中四种类型转换方式
- (2-4)HDFS的Java接口,上传,下载,创建文件,删除文件
- 一般情况下的实体设计,Struts2,String,hibernate快速准确的从零开始实现增删改查功能
- bzoj2395: [Balkan 2011]Timeismoney
- R绘图中使用中文字体
- android Wearable-Adding Wearable Features to Notifications
- DevExpress 中根据数据库字典动态生成卡式菜单
- View.onMeasured的默认实现 (onMeasure必须调setMeasuredDimension)
- 牛客网 | 魔术索引II
- 简单的数据查询