码迷,mamicode.com
首页 > 其他好文 > 详细

【hadoop之翊】——hadoop大核心之HDFS初识

时间:2014-08-03 18:09:05      阅读:332      评论:0      收藏:0      [点我收藏+]

标签:blog   http   java   使用   os   io   文件   数据   

今天来说说hadoop的一大核心——HDFS,这个是很重要的,它呢,是分布式文件系统。为什么说hadoop能存储海量数据?其实主要还是依赖与hdfs的能力,主要依赖的是hdfs能存储海量数据。

1、 为什么hdfs能存储海量数据呢?

一开始抛出这样的问题来想想。至于HDFS的基本概念什么的都不用多说了的~我们重在使用,而不是去做“研究”。扯蛋的话就是,“专家的研究”已经成为名副其实的贬义词了,很带有讽刺意义了,在现在这个时代~你们懂的~因为他们有的没有真正经历过,而却要说着要去“研究”~所以我们不“纠结于”概念,我们只要使用就可以了的~

回到问题,这个是为什么呢?其实很简单,hdfs包含两大核心——NameNode和DataNode,namenode在集群中是只能有一个的,datanode可以有多个,我们要知道,数据其主要实是保存在datanode上的,从字面上也能理解的~并且datanode可以平滑扩展的~这就好比数据可以存储在一个大型的datanode中的,所以能支持海量数据的存储。

2、怎么使用hdfs?

安装了hadoop的就可以直接使用hdfs了的,一般有两种方式:

一种是命令式:

我们知道hadoop的bin目录下有一个hadoop的命令,这个其实算是hadoop的一个管理命令,我们可以使用这个来对hdfs操作的。

hadoop fs -lsr /
以上是递归列出hdfs根目录下的所有文件(夹)

解释一下:

hadoop 不用解释了的,fs 指的是hdfs, -ls(r) 这个类似linux的目录列表命令,列出所有文件(夹),括弧的r表示递归,/ 表示根目录。

其他常用的命令还有:

hadoop fs -mkdir [path] 表示创建文件夹

hadoop fs -put [path] 表示上传文件到hdfs

hadoop fs -put ~/hello.txt /tmp/input/
等等相关的一系列命令,这边就不一一讲出~

bubuko.com,布布扣
bubuko.com,布布扣

一种是api式:

看下面程序:

	public static void main(String[] args) throws Exception {
		URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
		final URL url = new URL(PathConstant.FILE01);
		final InputStream in = url.openStream();

		/**
		 * @param in
		 *            输出流
		 * @param out
		 *            输出流
		 * @param buffSize
		 *            缓冲区大小
		 * @param close
		 *            是否关闭流
		 */
		IOUtils.copyBytes(in, System.out, 1024, true);
	}

public class PathConstant {
	public static final String FILE01 = "hdfs://192.168.0.167:9000/tmp/input/micmiu-01.txt";
	
	public static final String DIR_PATH = "hdfs://192.168.0.167:9000/tmp/";
	
	public static final String TEST_PATH = "hdfs://192.168.0.167:9000/tmp/test/";

	public static final String FILE_PATH = "hdfs://192.168.0.167:9000/tmp/test/demo.txt";
}
运行上面的程序如下:

bubuko.com,布布扣

直接输出的是hdfs里面文件的内容。org.apache.hadoop.io.IOUtils; 这个是hadoop里面提供的一个操作工具类

以上这种是java.socket的方式,其实hadoop里面推荐了使用FileSystem这个类来操作:

public static void main(String[] args) throws Exception {
		// 创建文件夹
		// mkdir();

		// 上传文件
		// uploadData();

		// 下载文件
		// getContent();
		// 删除文件(夹)
		// delete();
	}

	public static void delete() throws IOException {
		FileSystem testFileSystem = FileSystem.get(
				URI.create(PathConstant.TEST_PATH), new Configuration());
		/**
		 * @param f
		 *            目录
		 * @param recursive
		 *            递归
		 */
		boolean flag = testFileSystem.delete(new Path(PathConstant.TEST_PATH),
				true);
		System.out.println(flag);
	}

	public static void uploadData() throws IOException, FileNotFoundException {
		FileSystem testFileSystem = FileSystem.get(
				URI.create(PathConstant.TEST_PATH), new Configuration());

		FSDataOutputStream out = testFileSystem.create(new Path(
				PathConstant.FILE_PATH));
		FileInputStream in = new FileInputStream(
				"F:\\hadoop.file\\demo\\hello.txt");

		IOUtils.copyBytes(in, out, 1024, true);
	}

	public static void getContent() throws Exception {
		FileSystem fileSystem = FileSystem.get(
				URI.create(PathConstant.FILE_PATH), new Configuration());

		InputStream in = fileSystem.open(new Path(PathConstant.FILE_PATH));

		IOUtils.copyBytes(in, System.out, 1024, true);
	}

	public static void mkdir() throws Exception {
		FileSystem fileSystem = FileSystem.get(
				URI.create(PathConstant.DIR_PATH), new Configuration());

		boolean flag = fileSystem.mkdirs(new Path(PathConstant.TEST_PATH));
		System.out.println(flag);
	}

【hadoop之翊】——hadoop大核心之HDFS初识,布布扣,bubuko.com

【hadoop之翊】——hadoop大核心之HDFS初识

标签:blog   http   java   使用   os   io   文件   数据   

原文地址:http://blog.csdn.net/enson16855/article/details/38358119

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!