Sample: Write And Read data from HDFS with java API

HDFS: hadoop distributed file system

它抽象了整个集群的存储资源,可以存放大文件。

文件采用分块存储复制的设计。块的默认大小是64M。

流式数据访问,一次写入(现支持append),多次读取。

不适合的方面:

低延迟的数据访问

解决方案:HBASE

大量的小文件

解决方案:combinefileinputformat ,或直接把小文件合并成sequencefile存储到hdfs.

HDFS的块

块是独立的存储单元。但是如果文件小于默认的块大小如64M,它不会占据整个块的空间。

HDFS的块比磁盘的块大,目的是为了最小化寻址开销。

namenode 管理着文件系统的命名空间,即文件的元数据信息,文件的块信息存在哪个Datanode结点,请求文件的时候,namenode根据元数据信息去datanode结点上寻求数据内容。

package myexamples;
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class hdfsexample {

 static void showblock(FileSystem fs,Path file) throws IOException
 {
	// show the file meta data info
	FileStatus 		fileStatus  = fs.getFileStatus(file);
	BlockLocation[] blocks		= fs.getFileBlockLocations(fileStatus, 0, fileStatus.getLen());
	for(BlockLocation bl:blocks)
		System.out.println(bl.toString());
 }
 static void read(FileSystem fs,Path file) throws IOException
 {
	//Reading from file
	FSDataInputStream inStream = fs.open(file);
	String data = null;
	BufferedReader br = new BufferedReader(new InputStreamReader(inStream));
	while((data = br.readLine())!=null)
		System.out.println(data);
	br.close();
 }
 static void write(FileSystem fs,Path file) throws IOException
	{
		FSDataOutputStream outStream = null;
		outStream = fs.create(file);
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(outStream));
		for(int i=1;i<101;i++)
			{
				bw.write("Line" +i + " welcome to hdfs java api");
				bw.newLine();
			}
		bw.close();
	}

public static void main(String[] args) throws IOException {
	Configuration conf = new Configuration();
	//this is import for connect to hadoop hdfs
	//or else you will get file:///, local file system
	conf.set("fs.default.name", "hdfs://namenode:9000");

	FileSystem fs = FileSystem.get(conf);
	System.out.println(fs.getUri());
	Path file = new Path("/user/hadoop/test/demo2.txt");
	if (fs.exists(file)) fs.delete(file,false);
	write(fs,file);
	read(fs,file);
	showblock(fs,file);

	fs.close();

	}
}
时间: 2024-11-05 23:29:29

Sample: Write And Read data from HDFS with java API的相关文章

HDFS中JAVA API的使用

转自:http://www.cnblogs.com/liuling/p/2013-6-17-01.html 相关源代码:http://www.cnblogs.com/ggjucheng/archive/2013/02/19/2917020.html HDFS是一个分布式文件系统,既然是文件系统,就可以对其文件进行操作,比如说新建文件.删除文件.读取文件内容等操作.下面记录一下使用JAVA API对HDFS中的文件进行操作的过程. 对分HDFS中的文件操作主要涉及一下几个类: Configurat

掌握HDFS的Java API接口访问

HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:Shell接口和Java API 接口,对HDFS里面的文件进行操作,具体每个Block放在哪台DataNode上面,对于开发者来说是透明的. 1.获取文件系统 1 /** 2 * 获取文件系统 3 * 4 * @return FileSystem 5 */ 6 public static FileSys

熟练掌握HDFS的Java API接口访问

HDFS设计的主要目的是对海量数据进行存储,也就是说在其上能够存储很大量文件(可以存储TB级的文件).HDFS将这些文件分割之后,存储在不同的DataNode上, HDFS 提供了两种访问接口:Shell接口和Java API 接口,对HDFS里面的文件进行操作,具体每个Block放在哪台DataNode上面,对于开发者来说是透明的. 通过Java API接口对HDFS进行操作,我将其整理成工具类,地址见底部 1.获取文件系统 1 /** 2 * 获取文件系统 3 * 4 * @return F

使用HDFS客户端java api读取hadoop集群上的信息

本文介绍使用hdfs java api的配置方法. 1.先解决依赖,pom <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.7.2</version> <scope>provided</scope> </dependency> 2.配置文

IDEA 创建HDFS项目 JAVA api

1.创建quickMaven 1.在properties中写hadoop 的版本号并且通过EL表达式的方式映射到dependency中 2.写一个repostory将依赖加载到本地仓库中 这是加载完成的页面 这是开发代码 package com.kevin.hadoop; import org.apache.hadoop.conf.Configuration;import org.apache.hadoop.fs.*;import org.apache.hadoop.io.IOUtils;imp

hdfs的Java Api开发

1.创建maven工程并导入jar包 jdk使用1.8.maven3.x版本 pom.xml添加一下内容 <repositories> <repository> <id>cloudera</id> <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url> </repository> </repositories> <dep

Loading Data into HDFS

How to use a PDI job to move a file into HDFS. Prerequisites In order to follow along with this how-to guide you will need the following: Hadoop Pentaho Data Integration Sample Files The sample data file needed for this guide is: File Name Content we

HDFS Java API使用之读取上传文件

package com.ibeifeng.hadoop.senior.hdfs; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOu

Hadoop HDFS (3) JAVA访问HDFS

现在我们来深入了解一下Hadoop的FileSystem类.这个类是用来跟Hadoop的文件系统进行交互的.虽然我们这里主要是针对HDFS,但是我们还是应该让我们的代码只使用抽象类FileSystem,这样我们的代码就可以跟任何一个Hadoop的文件系统交互了.在写测试代码时,我们可以用本地文件系统测试,部署时使用HDFS,只需配置一下,不需要修改代码了. 在Hadoop 1.x以后的版本中引入了一个新的文件系统接口叫FileContext,一个FileContext实例可以处理多种文件系统,而