`

Hadoop初学-HDFS基础

 
阅读更多

    HDFS是hadoop的分布式文件系统,全称:Hadoop Distributed Filesystem。由1个master(call me NameNode)和N个slaver组成(call me datanode)。其中namenode负责存储元数据,控制和协调datanode存储文件数据。通过写多份(可定义,默认1)的方式实现数据的可靠性和读取的高效性。


主要特点:
1.    适合存储大文件,对海量小文件效率较低。这主要是由于存储在namenode上的大量小文件的文件元数据会让namenode成为瓶颈。
2.    标准流式访问。一次写入,多次读取是最高效的访问模式,只支持文件的追加写,不支持随机访问。
3.    对数据节点的硬件要求低,可靠性高,单台或多台节点故障一般不会中断服务(只要不是文件所在的所有副本存放节点都故障)
4.    适合做大数据量的离线分析,不适合做第时延的联机事务业务访问。

HDFS的数据块
HDFS的数据块(block)是该文件系统的最小读写单位,默认64M(本地磁盘文件系统一般为512K)之所以设置为比较大的块,目的是最小化寻址时间,使文件系统的传输速度尽可能的取决于磁盘本身的性能。

HDFS的命令
Hdfs和其它文件系统一样,提供了命令行方式操作和访问的功能。可以通过命令:hadoop fs 进行操作,而且比较简单和容易理解。
常用命令:
$ hadoop fs –ls <path>
$ hadoop fs –lsr <path> //递归
$ hadoop fs –mkdir <path>
$ hadoop fs –put <localsrc> ... <dst>
$ hadoop fs –cp <src> <dst>
$ hadoop fs –mv <src> <dst>
$ hadoop fs –rm <path>
$ hadoop fs –rmr <path> //递归
$ hadoop fs –cat <src>

//查看文件系统的命令帮助
$ hadoop fs
//查看具体命令的使用帮助
$ hadoop fs –help <cmd>
如:
[hadoop@hadoop00 ~]$ hadoop fs -help mv
11/10/24 09:59:50 INFO security.Groups: Group mapping impl=org.apache.hadoop.security.ShellBasedUnixGroupsMapping; cacheTimeout=300000
-mv <src> <dst>:   Move files that match the specified file pattern <src>
                to a destination <dst>.  When moving multiple files, the
                destination must be a directory.

Hadoop文件系统
Hadoop有一个抽象的文件系统概念,抽象类:org.apache.hadoop.fs.FileSystem,HDFS只是其中的一个实现。Mapreduce理论上可以运行在任何一个实现中。实现类包括:

  • LocalFileSystem:本地文件系统
  • DistributedFileSystem:HDFS分布式文件系统
  • HftpFileSystem:通过HTTP提供HDFS只读访问的文件系统
  • HsftpFileSystem: 通过HTTPS提供HDFS只读访问的文件系统
  • HarFileSystem:HDFS归档文件系统
  • kosmosFileSystem:CloudStore文件系统
  • FTPFileSystem:由FTP提供支持的文件系统
  • NativeS3FileSystem和S3FileSystem:由Amazon S3支持的文件系统


HDFS的JAVA-API
HDFS分布式文件系统的JAVA-API提供了丰富的访问接口。主要包括:目录的创建,列表,查询,删除和文件的创建(写入),读取等。这个就不好文字记录了,还是代码表达吧,热,快1点了,看来只有明天写了~~

 

package org.acooly.hadoop.study;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.URI;
import java.net.URL;

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.FsUrlStreamHandlerFactory;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils;
import org.apache.log4j.Logger;

@SuppressWarnings("deprecation")
public class HDFSSample {

	static final Logger logger = Logger.getLogger(HDFSSample.class);
	static {
		URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
	}

	public static void main(String[] args) throws Exception {
		HDFSSample sample = new HDFSSample();
		String cmd = args[0];
		String localPath = args[1];
		String hdfsPath = args[2];
		if (cmd.equals("create")) {
			sample.createFile(localPath, hdfsPath);
		} else if (cmd.equals("get")) {
			boolean print = Boolean.parseBoolean(args[3]);
			sample.getFile(localPath, hdfsPath, print);
		}
	}

	/**
	 * 创建文件
	 * 
	 * @param localPath
	 * @param hdfsPath
	 * @throws IOException
	 */
	@SuppressWarnings("deprecation")
	public void createFile(String localPath, String hdfsPath) throws IOException {
		InputStream in = null;
		try {
			Configuration conf = new Configuration();
			FileSystem fileSystem = FileSystem.get(URI.create(hdfsPath), conf);
			FSDataOutputStream out = fileSystem.create(new Path(hdfsPath));
			in = new BufferedInputStream(new FileInputStream(new File(localPath)));
			IOUtils.copyBytes(in, out, 4096, false);
			out.hsync();
			out.close();
			logger.info("create file in hdfs:" + hdfsPath);
		} finally {
			IOUtils.closeStream(in);
		}
	}

	/**
	 * 从HDFS获取文件
	 * 
	 * @param localPath
	 * @param hdfsPath
	 * @throws IOException
	 */
	public void getFile(String localPath, String hdfsPath, boolean print) throws IOException {

		Configuration conf = new Configuration();
		FileSystem fileSystem = FileSystem.get(URI.create(hdfsPath), conf);
		FSDataInputStream in = null;
		OutputStream out = null;
		try {
			in = fileSystem.open(new Path(hdfsPath));
			out = new BufferedOutputStream(new FileOutputStream(new File(localPath)));
			IOUtils.copyBytes(in, out, 4096, !print);
			logger.info("get file form hdfs to local: " + hdfsPath + ", " + localPath);
			if (print) {
				in.seek(0);
				IOUtils.copyBytes(in, System.out, 4096, true);
			}
		} finally {
			IOUtils.closeStream(out);
		}
	}
}

 

运行测试代码

可以直接在WINDOWS本机运行,通过HADOOP客户端API访问HDFS:
//创建文件

java org.acooly.hadoop.study.HDFSSample create D:/temp/keepalive.txt hdfs://hadoop00:9000/input/keepalive.txt

//读取文件

java org.acooly.hadoop.study.HDFSSample get hdfs://hadoop00:9000/input/keepalive.txt D:/temp/keepalive_get.txt

 

如果是单机节点的安全模式,需要关闭安全模式,在namenode上运行:

$ hadoop dfsadmin -safemode leave

 

分享到:
评论

相关推荐

    Hadoop-HDFS-实践教程

    初学大数据hadoop,学习实践看的教程,对初学者很有帮助,分享给大家,共同学习进步。

    Hadoop实战-陆嘉恒

    《Hadoop实战》是一本系统且极具实践指导意义的hadoop工具书和参考书。内容全面,对hadoop整个...《Hadoop实战》既适合没有hadoop基础的初学者系统地学习,又适合有一定hadoop基础但是缺乏实践经验的读者实践和参考。

    hadoop日记2.1:hdfs设计思想和基础概念

    这是hdfs的基础知识,适合初学者了解hdfs是怎么分布式存储数据和怎么写入、读出的等等

    hadoop_test.rar_API_client_hadoop test 作用_hadoop test_hadoop-te

    HDFS 客户端接口的调用和测试示例,基于 hadoop-release-HDP-2.5.0.0 ,供初学者参考

    elcipse java hadoop操作hdfs的api

    自己整理的hadoop的java-api。各个API写得比较简单,比较细,适合初学者参考。PS:集群请自行搭建

    Hadoop-2.6.0上调用C的API实现类似云盘的功能

    Hadoop-2.6.0上调用C的API实现类似云盘的功能,很适合hadoop初学者研究C的API来访问HDFS

    seatunnel v2.0 初学极速安装包-源码+文档+发布包+flink+依赖

    incubator-seatunnel-2.0.0-pre.zip: 源码可以编译打包,放入waterdrop dir的lib...flink-shaded-hadoop-2-uber-2.8.3-9.0.jar:flink checkpoint hadoop依赖,将flink-shaded-hadoop-2-uber.jar放入flink dir的lib下

    Ubuntu Hadoop 0.20.2 安装配置说明

    本文档适合初学者,指引初学者或初次接触 Hadoop 的人成功安装 Hadoop ,使用代码执行简单的 HDFS 操作,并利用 MapReduce 执行分布式计算示例代码。其中 MapReduce 示例代码为 Hadoop 官方带的 hadoop-0.20.2-...

    Hadoop海量数据处理

    Hadoop是目前最受关注的大数据处理平台和解决方案,并且已经广泛应用于生产环境。本书主要介绍Hadoop技术..., 本书由浅至深,从理论基础到项目实战,适合Hadoop的初学者阅读,也适合作为高等院校相关课程的教学参考书。

    Hadoop权威指南-中文译版

    对HadoopTom不熟悉的初学者,可以参考本书。Wbite著,此为第二版(修订升级),由周敏奇等人翻译。该书介绍了Hadoop的安装及使用,详述了MapReduce机制并介绍了Hbase,Hive,Zookeeper及HDFS,最后给出了实例分析。

    Ambari部署Hadoop集群.doc

    对大数据的初学者来说,搭建一个Hadoop大数据基础平台不是一件容易的事;对于企业,如果要部署由成千上万的节点组成的Hadoop集群,手工方式部署显然不符合实际。 而由Hortonworks贡献给Apache开源社区的Ambari则提供...

    Hadoop 云计算

    分布式云计算平台hadoop的介绍(里面有三个文件,分别是hadoop介绍,hdfs文件系统介绍和‘熟悉hadoop’ mapreduce和hdfs),全部为pdf格式,有三本书是以ppt形式的pdf. 可以在15分钟内看完,并给你一个全方面对hadoop...

    Hadoop实战手册

    通过阅读《hadoop实战手册》,hadoop初学者可以使用hadoop来进行数据处理,hadoop工程师或者数据挖掘工程师可以解决复杂的业务分析,hadoop系统管理员可以更好地进行日常运维。《hadoop实战手册》也可作为一本hadoop...

    Hadoop入门学习

    Hadoop权威操作指南.pdf+Hadoop搭建操作文档(集群、伪分布式),HDFS简单接口实现文档,HadoopAPI参考手册+HDFS Java API 简单源码,用于初学者学习

    炼数成金pdf---适合初学者

    hadoop入门,炼数成金课件(全),适合初学者。hdfs+mapreduce,基础、基础、基础、基础、基础

    Hadoop分布式文件系统使用指南hdfs_user_guide.pdf

    比较详细的hadoop说明指导,相信是你初学分布式或是云计算都是相当的有帮助的。

    分布式基础学习hadoop

    Hadoop本身,实现的是分布式的文件系统HDFS,和分布式的计算(Map/Reduce)框架,此外,它还不是一个人在战斗,Hadoop包含一系列扩展项目,包括了分布式文件数据库HBase(对应Google的BigTable),分布式协同服务...

    Hadoop实战(陆嘉恒)

    《Hadoop实战》是一本系统且极具实践指导意义的hadoop工具书和参考书。内容全面,对hadoop整个... 《Hadoop实战》既适合没有hadoop基础的初学者系统地学习,又适合有一定hadoop基础但是缺乏实践经验的读者实践和参考。

    Hadoop实战

    本书是一本系统且极具实践指导意义的hadoop工具书和参考书。内容全面,对hadoop整个技术体系进行了全面的... 本书既适合没有hadoop基础的初学者系统地学习,又适合有一定hadoop基础但是缺乏实践经验的读者实践和参考。

Global site tag (gtag.js) - Google Analytics