标签: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/等等相关的一系列命令,这边就不一一讲出~
一种是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"; }运行上面的程序如下:
直接输出的是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
标签:blog http java 使用 os io 文件 数据
原文地址:http://blog.csdn.net/enson16855/article/details/38358119