`

Hadoop HDFS CRUD

 
阅读更多

Maven Dependency

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
	<modelVersion>4.0.0</modelVersion>

	<groupId>org.fool.hadoop</groupId>
	<artifactId>hadoop</artifactId>
	<version>0.0.1-SNAPSHOT</version>
	<packaging>jar</packaging>

	<name>hadoop</name>
	<url>http://maven.apache.org</url>

	<properties>
		<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
		<hadoop.version>2.6.4</hadoop.version>
	</properties>

	<dependencies>
		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-common</artifactId>
			<version>${hadoop.version}</version>
		</dependency>

		<dependency>
			<groupId>org.apache.hadoop</groupId>
			<artifactId>hadoop-hdfs</artifactId>
			<version>${hadoop.version}</version>
		</dependency>

		<dependency>
			<groupId>jdk.tools</groupId>
			<artifactId>jdk.tools</artifactId>
			<version>1.8</version>
			<scope>system</scope>
			<systemPath>${JAVA_HOME}/lib/tools.jar</systemPath>
		</dependency>

		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.12</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
</project>

 

首先确认Hadoop HDFS已经启动——start-dfs.sh

先来看一个上传和下载比较底层的写法(不推荐)

下载

@Test
public void downloadTest() throws Exception {
	Configuration conf = new Configuration();

	conf.set("fs.defaultFS", "hdfs://hadoop-0000:9000/");

	FileSystem fs = FileSystem.get(conf);

	// get the file on HDFS via input stream
	FSDataInputStream is = fs.open(new Path("/jdk-8u77-linux-x64.tar.gz"));

	// create an output stream
	BufferedOutputStream os = new BufferedOutputStream(new FileOutputStream(new File("C:/jdk.tgz")));

	// download the file to disk C
	IOUtils.copy(is, os);
}

这里尝试将HDFS的JDK下载到到本地C盘,首先获取一个输入流读取HDFS的文件,之后创建一个输出流用来写文件,最后调用IOUtils的copy方法完成文件的下载

 

上传

@Test
public void uploadTest() throws Exception {
	Configuration conf = new Configuration();

	conf.set("fs.defaultFS", "hdfs://hadoop-0000:9000/");

	FileSystem fs = FileSystem.get(conf);

	// create an output stream to upload file
	FSDataOutputStream os = fs.create(new Path("hdfs://hadoop-0000:9000/myupload/pom.xml"));

	// create an input stream to get local file e.g pom.xml
	BufferedInputStream is = new BufferedInputStream(new FileInputStream(new File("pom.xml")));

	// upload the file to HDFS
	IOUtils.copy(is, os);
}

同理,首先创建一个输出流用来写HDFS文件,之后创建一个输入流来读取本地的本区,比如当前工作目录的pom.xml,最后调用IOUtils的copy方法完成文件的上传。

但是这里直接运行这段代码会报错,提示没有权限写


这里有两种解决方法(这里采用第2种方法)

1.将Hadoop HDFS的文件的权限放大,这个嘛直接chmod 777 就行了(hadoop fs -chmod 777 /myupload

2.运行Test的时候,加一段VM的参数-DHADOOP_USER_NAME=hadoop,即可解决问题

重新run test,绿色心情,O(∩_∩)O~,查看HDFS

这个底层的写法是不是感觉相当烦琐,不要怕,Hadoop的fs的已经封装了相关的方法,提供给我们直接调用,接下来看一个完整的例子

package org.fool.hadoop.hdfs;

import java.net.URI;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileStatus;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.LocatedFileStatus;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.RemoteIterator;
import org.junit.Before;
import org.junit.Test;

import com.google.common.base.Joiner;

public class HdfsTest {

	private FileSystem fs = null;

	@Before
	public void setUp() throws Exception {
		Configuration conf = new Configuration();

		conf.set("fs.defaultFS", "hdfs://hadoop-0000:9000/");

		fs = FileSystem.get(new URI("hdfs://hadoop-0000:9000/"), conf, "hadoop");
	}

	@Test
	public void testMkDir() throws Exception {
		fs.mkdirs(new Path("/aaa/bbb/ccc"));
	}
	
	@Test
	public void testUpload() throws Exception {
		fs.copyFromLocalFile(new Path("pom.xml"), new Path("hdfs://hadoop-0000:9000/pom.xml"));
		fs.copyFromLocalFile(new Path("pom.xml"), new Path("hdfs://hadoop-0000:9000/myupload/pom.xml"));
	}
	
	@Test
	public void testDownload() throws Exception {
		fs.copyToLocalFile(false, new Path("hdfs://hadoop-0000:9000/myupload/pom.xml"), new Path("D:/pom.xml"), true);
	}
	
	@Test
	public void testDelete() throws Exception {
		fs.delete(new Path("/myupload"), true);
		fs.delete(new Path("/pom.xml"), true);
		fs.delete(new Path("/aaa"), true);
	}
	
	@Test
	public void listFiles() throws Exception {
		for(RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true); files.hasNext();) {
			LocatedFileStatus file = files.next();
			
			String name = file.getPath().getName();
			
			System.out.println(name);
		}
		
		System.out.println("\n");
		
		FileStatus[] listStatus = fs.listStatus(new Path("/"));
		for (FileStatus fileStatus : listStatus) {
			String name = fileStatus.getPath().getName();
			System.out.println(Joiner.on(" ").join(name, (fileStatus.isDirectory() ? "is dir" : "is file"), fileStatus.getPath()));
		}
	}

}

 是不是so easy O(∩_∩)O哈哈~

 

 

 

 

 

 

  • 大小: 71.6 KB
  • 大小: 15 KB
  • 大小: 23.1 KB
  • 大小: 16.4 KB
1
6
分享到:
评论

相关推荐

    google三大论文 gfs bigtable mapreduce hadoop hdfs hbase的原型

    - **HDFS (Hadoop Distributed File System)** - HDFS 是基于GFS设计的分布式文件系统,用于存储大量的数据。 - 它将数据分成块并复制到集群中的多个节点,以确保数据的高可用性和容错性。 - **MapReduce in ...

    hadoop hbase 全jar包

    Hadoop的jar包通常包含Hadoop Common、Hadoop HDFS、Hadoop MapReduce等模块,它们提供了Hadoop的基本功能和接口。HBase的jar包则包含了HBase Server、HBase Client、Zookeeper等相关组件,使得开发者可以与HBase...

    springboot对hadoop增删改查源码及hadoop图片访问

    - Servlet接收到请求后,使用Hadoop的HDFS API读取图片文件,然后通过Servlet的`response.getOutputStream()`将二进制数据流发送回客户端。 - 注意要正确设置响应头,例如`Content-Type`应设置为图片对应的MIME...

    基于django的hadoop文件管理系统-期末实训项目

    接下来是Hadoop,这是一个开源的大数据处理框架,主要由HDFS(Hadoop Distributed File System)和MapReduce两部分组成。HDFS是分布式文件系统,能存储海量数据,并保证数据的高可用性和容错性;MapReduce则是一种...

    前端基于vue,后端基于springboot和hdfs的云盘项目.zip

    该项目是一个集成前端Vue.js框架和后端Spring Boot技术的云盘系统,同时还利用了Hadoop分布式文件系统(HDFS)来实现大规模数据存储。以下是基于这些技术的关键知识点: 1. **Vue.js**:Vue.js 是一种轻量级的前端...

    SpringBoot整合Hadoop的案例代码demo,含HDFS文件操作、MapReduce分词操作、案例数据分析,系统推荐等

    通过使用Hadoop的Java API,开发者可以在SpringBoot应用中编写代码,实现对HDFS的CRUD(创建、读取、更新和删除)操作,增强了应用的存储能力。 其次,MapReduce是Hadoop用于大规模数据处理的编程模型,主要包含Map...

    基于hadoop结合spring全家桶,采用hdfs文件系统存储的以jpa完成持久层的项目.zip

    本项目“基于Hadoop结合Spring全家桶,采用HDFS文件系统存储的以JPA完成持久层的项目”正是这样一个将大数据处理与企业级应用开发紧密结合的实例。下面将详细阐述该项目中的关键知识点。 首先,Hadoop是一个开源的...

    hadoop集群jar包大全

    - 包含的实例可能是简化版的Hadoop应用,用于学习和理解Hadoop工作原理,包括MapReduce任务的实现,Hive查询脚本,或者HBase的CRUD操作。 使用这些jar包,开发者可以构建完整的Hadoop生态系统解决方案,涵盖数据的...

    spring-data-hadoop-2.2.0.RELEASE(含源码)

    - **Repository支持**:类似于Spring Data对其他数据存储的支持,Spring Data Hadoop提供了Hadoop Repository接口,允许定义通用的CRUD操作。 - **MapReduce抽象**:Spring Data Hadoop提供了Map/Reduce任务的抽象...

    大数据相关学习资料hadoop kafka mongodb

    它主要由两个关键组件组成:HDFS(Hadoop Distributed File System)和MapReduce。HDFS是一种分布式文件系统,可以将大规模数据分布在多台廉价硬件上,提供高容错性和高吞吐量的数据访问。MapReduce则是一种并行计算...

    java集成hadoop-hbase用到的jar包

    Hadoop的客户端jar包通常包含了HDFS(Hadoop Distributed File System)和MapReduce的相关API,允许你读写HDFS中的数据以及执行MapReduce任务。你需要确保包含以下jar包: 1. `hadoop-common-*.jar`:这是Hadoop的...

    Hadoop&MongoDB;学习资料

    它由两个核心组件组成:Hadoop Distributed File System (HDFS) 和 MapReduce。HDFS提供高容错性的分布式文件系统,允许数据在多台机器上冗余存储,即使部分节点故障也能保证数据可用性。MapReduce则是一种编程模型...

    springboot集成mysql和hdfs

    MySQL是世界上最受欢迎的关系型数据库管理系统之一,而HDFS(Hadoop Distributed File System)则是Apache Hadoop项目的一部分,是一个分布式文件系统,专为大规模数据处理设计。本教程将详细介绍如何在Spring Boot...

    Hadoop实战-附目录

    - **文件上传与下载**:了解如何使用Hadoop命令行工具将本地文件上传到HDFS以及从HDFS下载文件。 - **文件管理**:掌握HDFS文件管理操作,如创建目录、删除文件、查看文件状态等。 - **数据块管理**:理解HDFS数据块...

    spring-data-hadoop-1.0.1.RELEASE.zip

    Spring Data Hadoop是Spring框架的一部分,它为开发人员提供了一种简单的方式来使用Hadoop生态系统的组件,如HDFS、MapReduce和HBase等。在1.0.1.RELEASE这个版本中,它继续致力于简化Hadoop编程模型,让Java开发者...

    基于hadoop+hbase+springboot实现分布式网盘系统.zip

    它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS提供了高容错性的数据存储,能够将大型文件分布在不同的节点上,确保数据的冗余和可靠性。MapReduce则是一种并行计算模型,用于处理和生成...

    hbase的基本crud封装

    HBase构建于Hadoop之上,利用HDFS作为其底层存储,提供实时读写能力,适合处理大规模结构化数据。在本教程中,我们将深入探讨HBase的基本CRUD(创建、读取、更新和删除)操作的封装。 首先,要进行HBase的CRUD操作...

    Hadoop;学习资料

    Hadoop的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS是一种分布式文件系统,它将大文件分割成块并分布在多台机器上,保证了数据的高可用性和容错性。MapReduce则是处理这些数据的计算框架...

    springboot基于Hadoop的物品租赁系统的设计与实现 LW PPT-9349a.zip

    Hadoop则是大数据处理的核心,它的主要组件包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS提供了高容错性的分布式文件存储,适合存储海量数据。物品租赁系统中的交易记录、用户信息等大量数据,可以...

    hbase-2.2.4-bin-for-hadoop3.tar.gz

    Hadoop提供了一个可靠的分布式文件系统(HDFS)和资源管理框架(YARN),为HBase提供了底层的存储和计算支持。HBase则在此基础上构建,实现了高性能、实时的随机读写操作,适合大量结构化数据的存储和查询。因此,...

Global site tag (gtag.js) - Google Analytics