`

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-HDFS实践教程是...总之,Hadoop-HDFS实践教程是一本非常适合大数据初学者的入门指南,通过学习这本教程,可以帮助初学者快速上手Hadoop技术,理解HDFS的原理和应用,并为今后深入研究大数据技术打下坚实的基础。

    Hadoop-hdfs下载

    同样地,使用文本编辑器打开`D:\Hadoop\hadoop-2.7.7\etc\hadoop\hdfs-site.xml`,配置HDFS的相关属性: ```xml &lt;name&gt;dfs.replication &lt;value&gt;1 &lt;name&gt;dfs.namenode.name.dir &lt;value&gt;/D:/Hadoop/hadoop-...

    hadoop -1.2.1-jar(全)

    1. **hadoop-core-1.2.1.jar**:这是Hadoop的核心库,包含了文件系统接口(如HDFS)和MapReduce的基础实现。它提供了对分布式存储和计算的基本支持,包括数据块的概念、节点管理和容错机制等。 2. **hadoop-test-...

    hadoop-eclipse-plugin-2.6.0.jar.zip_2.6.0_hadoop_hadoop plugin

    《Hadoop Eclipse Plugin 2.6.0:高效开发与测试工具》 Hadoop作为大数据处理的核心框架,为开发者提供了强大的...对于Hadoop初学者和专业开发者来说,熟练掌握并运用这款插件,无疑是提升开发体验和工作效率的关键。

    hadoop-eclipse-plugin-1.1.2

    - 配置插件时,确保正确指向Hadoop的配置文件(core-site.xml和hdfs-site.xml),以获取集群的相关信息。 - 利用Eclipse的版本控制功能,如Git,对源代码进行版本管理,便于团队协作和回溯错误。 7. **扩展与...

    hadoop hdfs配置

    - **hdfs-site.xml**:该文件用于配置HDFS的具体参数。 ```xml &lt;name&gt;dfs.replication &lt;value&gt;2 ``` - **解释**: - `dfs.replication`:配置数据块的副本数,默认为3,这里设为2表示每个数据块会有...

    hadoop-eclipse-plugin-2.6.5.jar插件下载

    4. **连接Hadoop集群**:通过设置Hadoop的配置文件(core-site.xml和hdfs-site.xml),开发者可以连接到本地或远程的Hadoop集群。 5. **提交和监控作业**:在Eclipse中直接提交MapReduce作业到Hadoop集群,并可以在...

    hadoop-eclipse-plugin-2.7.2.rar

    Hadoop Eclipse Plugin是Apache Hadoop项目的一个重要组成部分,主要用于在Eclipse集成开发环境中方便地创建、管理和调试Hadoop ...如果你是Hadoop初学者或者希望提升开发效率,掌握这个插件的使用将对你大有裨益。

    hadoop-2.7.4-with-windows.tar.gz

    标题中的"hadoop-2.7.4-...总的来说,这个压缩包提供了一个在Windows上快速启动和运行Hadoop 2.7.4的解决方案,避免了手动配置和解决跨平台兼容性问题的麻烦,适合开发者和初学者在本地进行Hadoop相关的开发和学习。

    董西城--Hadoop技术内幕--深入解析HADOOP COMMON和HDFS架构设计与实现原理--完整版528页--带完整书签

    总的来说,这本书是学习和理解Hadoop技术的宝贵资料,无论是对初学者还是经验丰富的开发者,都能从中获取到关于Hadoop Common和HDFS的深入见解,有助于提升大数据处理和分析的能力。通过阅读这本书,读者将能够更好...

    Hadoop技术内幕 深入解析HADOOP COMMON和HDFS架构设计与实现原理

    总之,《Hadoop技术内幕:深入解析HADOOP COMMON和HDFS架构设计与实现原理》这本书将带你全面了解Hadoop生态系统的基础,帮助你更好地理解和优化Hadoop集群,从而在大数据处理领域发挥更大的效能。无论是初学者还是...

    hadoop-common-2.2.0-bin-master

    在Windows环境下部署Hadoop Common 2.2.0,需要设置环境变量、配置Hadoop配置文件(如core-site.xml、hdfs-site.xml等),并确保Java环境已安装。此外,还需要对Hadoop目录结构有清晰的理解,如bin、sbin、lib等目录...

    hadoop-2.8.3-eclipse-plugin插件包

    对于初学者,了解Hadoop的基本概念和MapReduce编程模型至关重要。MapReduce分为Map阶段和Reduce阶段,Map将大任务拆分成小任务并行处理,Reduce则对Map的结果进行聚合。同时,理解Hadoop的配置文件和YARN资源调度器...

    hadoop-2.6.0-cdh5.7.0.tar.gz和jdk-7u80-linux-x64.tar.gz安装包

    7. 初始化Hadoop配置,如`core-site.xml`、`hdfs-site.xml`、`mapred-site.xml`和`yarn-site.xml`,以适应你的集群环境。 8. 格式化NameNode: ``` hdfs namenode -format ``` 9. 启动Hadoop服务: ``` sbin/...

    Java-Operate-HDFS.zip_hdfs

    首先,我们需要配置Hadoop的配置文件(core-site.xml和hdfs-site.xml),设置HDFS的地址和端口。然后,通过`FileSystem.get(conf)`方法获取`FileSystem`实例,其中`conf`是配置对象。 4. 文件操作: - 读取文件:...

    hadoop-0.20.2-eclipse-plugin 插件

    Hadoop-0.20.2-Eclipse-Plugin是一个经典的插件,专为Eclipse集成开发环境(IDE)设计,旨在提升Hadoop开发者的工作效率。...对于初学者和经验丰富的Hadoop开发者来说,这种集成开发环境的增强都是一个巨大的福音。

    hadoop-2.7.4-with-centos-6.7.tar.gz

    Hadoop的配置文件包括core-site.xml、hdfs-site.xml、mapred-site.xml和yarn-site.xml等,它们定义了Hadoop运行时的各项参数,如数据块大小、副本数量、内存分配等。用户可以根据实际需求对这些配置进行调整。 在...

    hadoop1-2-1源码

    本资源提供的“hadoop1-2-1源码”是Hadoop 1.2.1版本的源代码,这个版本在Hadoop发展历史上具有重要的地位,为许多大数据处理项目提供了基础。 Hadoop的核心思想是将大型数据集分布到集群上的多台计算机上进行处理...

Global site tag (gtag.js) - Google Analytics