hadoop-hdfs(三)
HDFS概念
1 数据块*
HDFS的一个数据块默认是64M,与元数据分开管理。
优点:
数据块的大小设计的较大,所以寻址占传输的时间比例较小,只需要计算传输速度即可。
便于简化管理,利于计算剩余空间、冗余备份(默认三个)
与元数据分开管理,保持他本身无属性的特性。
2 nameNode,DataNode*
nameNode:
1 命名空间
2 维护文件系统树(命名空间镜像文件)与目录(编辑日志文件)(本地磁盘)
3 保存每个块的元数据信息
4 维护多个dataNode
备份策略:写入远程磁盘、两个NameNode同时运行
DataNode
1 文件系统的工作节点
2 定期向NameNode发送块列表
3 收到NameNode和Client的调度
3 外部接口
Thrift:Hadoop提供给外部非JAVA语言调用的接口
HTTP:网页监控
FTP:传输文件
4 JAVA接口
1 URL API读取
@Test
public void input1() throws MalformedURLException, IOException {
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
InputStream in = new URL("hdfs://192.168.1.100:9000/user/sunfan/input/file1.txt").openStream();
byte[] buff = new byte[];
int len;
while (- != (len = in.read(buff))) {
for (int i = ; i < len; i++) {
System.out.print((char) buff[i]);
}
}
in.close();
}
2 FileSystem API 读取FSDatainputStream流的使用(seek方法可以重新定位读取,和inputStream的skip不一样) *
@Test
public void input2() throws MalformedURLException, IOException {
String uri = "hdfs://192.168.1.100:9000/user/sunfan/input/file1.txt";
FileSystem fs = FileSystem.get(URI.create(uri), new Configuration());
FSDataInputStream in = null;
in = fs.open(new Path(uri));
byte[] buff = new byte[];
int len;
while (- != (len = in.read(buff))) {
for (int i = ; i < len; i++) {
System.out.print((char) buff[i]);
}
}
in.seek();
while (- != (len = in.read(buff))) {
for (int i = ; i < len; i++) {
System.out.print((char) buff[i]);
}
}
in.close();
}
写入数据 FSDataOutPutStream
@Test
public void out3() throws IOException {
String uri2 = "hdfs://192.168.1.100:9000/user/sunfan/input/file3.txt";
FileSystem fs = FileSystem.get(URI.create(uri2), new Configuration());
FSDataOutputStream out = fs.create(new Path(uri2));
System.out.println(fs.exists(new Path(uri2)));
out.write();
}
本地文件的复制:注意这里重写Progressable来写进度条,用IOUtils.copy方法来复制
@Test
public void out3() throws IOException {
long start = System.currentTimeMillis();
FileInputStream in = new FileInputStream("C:\\Users\\sunfan\\Desktop\\copy.pdf");
String uri2 = "hdfs://192.168.1.100:9000/user/sunfan/input/file3.txt";
FileSystem fs = FileSystem.get(URI.create(uri2), new Configuration());
FSDataOutputStream out = fs.create(new Path(uri2), new Progressable() {
public void progress() {
System.out.print(".");
}
});
IOUtils.copyBytes(in, out, , true);
System.out.println(System.currentTimeMillis()-start);
}
读取文件的详细信息:通过fs.getFileStatus得到FileStatus
@Test
public void showFilesystem() throws IOException {
String dir = "hdfs://192.168.1.100:9000/user/sunfan/input";
FileSystem fs = FileSystem.get(URI.create("hdfs://192.168.1.100:9000"), new Configuration());
FileStatus status = fs.getFileStatus(new Path(dir));
System.out.println(status.getPermission());
}
读取文件列表:通过fs.listStatus获取FileStatus数组
@Test
public void showFilesystem2() throws IOException {
String dir = "hdfs://192.168.1.100:9000/user/sunfan/input";
FileSystem fs = FileSystem.get(URI.create(dir), new Configuration());
FileStatus[] status = fs.listStatus(new Path("hdfs://192.168.1.100:9000/user/sunfan/input"));
for (FileStatus fileStatus : status) {
System.out.println(fileStatus.getPath());
}
}
用正则读取文件:通过fs.globStatus读取
@Test
public void showFilesystem2() throws IOException {
String dir = "hdfs://192.168.1.100:9000/user/sunfan/input";
FileSystem fs = FileSystem.get(URI.create(dir), new Configuration());
FileStatus[] status = fs.globStatus(new Path("hdfs://192.168.1.100:9000/user/sunfan/input/*"));
for (FileStatus fileStatus : status) {
System.out.println(fileStatus.getPath());
}
}
hadoop-hdfs(三)的更多相关文章
- 马士兵hadoop第三课:java开发hdfs
马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...
- Hadoop(三)HDFS读写原理与shell命令
一 HDFS概述 1.1 HDFS产生背景 随着数据量越来越大,在一个操作系统管辖的范围内存不下了,那么就分配到更多的操作系统管理的磁盘中,但是不方便管理和维护,迫切需要一种系统来管理多台机器上的文件 ...
- 马士兵hadoop第三课:java开发hdfs(转)
马士兵hadoop第一课:虚拟机搭建和安装hadoop及启动 马士兵hadoop第二课:hdfs集群集中管理和hadoop文件操作 马士兵hadoop第三课:java开发hdfs 马士兵hadoop第 ...
- 【Hadoop】三、HDFS命令行接口
通过前面对HDFS基本概念.高可用性.数据读写流程的介绍,我们对HDFS已经有了大致的了解.这里我们还需要明确一点:Hadoop作为一个完整的分布式系统,它有一个抽象的文件系统的概念,而我们介绍的 ...
- HADOOP docker(三):HDFS高可用实验
前言1.机器环境2.配置HA2.1 修改hdfs-site.xml2.2 设置core-site.xml3.配置手动HA3.1 关闭YARN.HDFS3.2 启动HDFS HA4.配置自动HA4. ...
- Hadoop HDFS负载均衡
Hadoop HDFS负载均衡 转载请注明出处:http://www.cnblogs.com/BYRans/ Hadoop HDFS Hadoop 分布式文件系统(Hadoop Distributed ...
- Hadoop HDFS编程 API入门系列之简单综合版本1(四)
不多说,直接上代码. 代码 package zhouls.bigdata.myWholeHadoop.HDFS.hdfs4; import java.io.IOException; import ja ...
- Hadoop HDFS (3) JAVA訪问HDFS
如今我们来深入了解一下Hadoop的FileSystem类. 这个类是用来跟Hadoop的文件系统进行交互的.尽管我们这里主要是针对HDFS.可是我们还是应该让我们的代码仅仅使用抽象类FileSyst ...
- Hadoop HDFS分布式文件系统设计要点与架构
Hadoop HDFS分布式文件系统设计要点与架构 Hadoop简介:一个分布式系统基础架构,由Apache基金会开发.用户可以在不了解分布式底层细节的情况下,开发分布式程序.充分利用集群 ...
- hadoop hdfs uri详解
body{ font-family: "Microsoft YaHei UI","Microsoft YaHei",SimSun,"Segoe UI& ...
随机推荐
- 【转】css行高line-height的一些深入理解及应用
一.前言 前两天在腾讯ISD团队博客上看到一篇翻译的文章“深入理解css 行高”,是个不错的文章,学到了不少东西,建议您看看. 这里,我也要讲讲我对line-height的一些理解,所讲解的东西绝大多 ...
- HttpWebRequest类之基本定义
HttpWebRequest和HttpWebResponse类是用于发送和接收HTTP数据的最好选择.它们支持一系列有用的属性.这两个类位 于System.Net命名空间,默认情况下这个类对于控制台程 ...
- 一个老鸟发的公司内部整理的 Android 学习路线图 Markdown 版本
jixiaohua发了一篇一个老鸟也发了一份他给公司内部小伙伴整理的路线图.另一份 Android 开发学习路线图.可惜不是MarkDown格式的,所以jixiaohua直接上传的截图,在jixiao ...
- Oracle 使用Nid 修改数据库的DBID 和 Database Name
How to Change the DBID, DBNAME Using NID Utility (Doc ID 863800.1) Changing the DBID and Database Na ...
- react中内联样式的z-index不起作用.
<div style={{z-index: -100}} > hello,money. </div> 以上z-index样式如上写法是不起作用,原因是在react中内联样式的写 ...
- HDU 1052 Tian Ji -- The Horse Racing(贪心)
题目来源:1052 题目分析:题目说的权值匹配算法,有点误导作用,这道题实际是用贪心来做的. 主要就是规则的设定: 1.田忌最慢的马比国王最慢的马快,就赢一场 2.如果田忌最慢的马比国王最慢的马慢,就 ...
- 干货!一篇文章集合所有Linux基础命令,适合所有菜鸟学习和老手回顾!
1 文件{ ls -rtl # 按时间倒叙列出所有目录和文件 ll -rt touch file # 创建空白文件 rm -rf 目录名 # 不提示删除非空目录(-r:递归删除 -f强制) dos2u ...
- 关于移动端video标签层级问题
这是在微信中正常页面,就是用了一个原生video标签没做任何处理.然后顶部是固定页面顶端的,这个时候向上滑动页面时,会出现下图现象 这个时候正常人都会想到z-index问题,我也是这样想的,可惜很抱歉 ...
- Oauth2.0协议 http://www.php20.com/forum.php?mod=viewthread&tid=28 (出处: 码农之家)
概要 OAuth2.0是OAuth协议的下一版本,但不向后兼容OAuth 1.0即完全废止了OAuth1.0. OAuth 2.0关注客户端开发者的简易性.要么通过组织在资源拥有者和HTTP服 ...
- C# 不同窗口传递参数
form1: private void button1_Click(object sender, System.EventArgs e) { Form2 frm = new Form2(); frm. ...