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哈哈~
相关推荐
- **HDFS (Hadoop Distributed File System)** - HDFS 是基于GFS设计的分布式文件系统,用于存储大量的数据。 - 它将数据分成块并复制到集群中的多个节点,以确保数据的高可用性和容错性。 - **MapReduce in ...
Hadoop的jar包通常包含Hadoop Common、Hadoop HDFS、Hadoop MapReduce等模块,它们提供了Hadoop的基本功能和接口。HBase的jar包则包含了HBase Server、HBase Client、Zookeeper等相关组件,使得开发者可以与HBase...
- Servlet接收到请求后,使用Hadoop的HDFS API读取图片文件,然后通过Servlet的`response.getOutputStream()`将二进制数据流发送回客户端。 - 注意要正确设置响应头,例如`Content-Type`应设置为图片对应的MIME...
接下来是Hadoop,这是一个开源的大数据处理框架,主要由HDFS(Hadoop Distributed File System)和MapReduce两部分组成。HDFS是分布式文件系统,能存储海量数据,并保证数据的高可用性和容错性;MapReduce则是一种...
该项目是一个集成前端Vue.js框架和后端Spring Boot技术的云盘系统,同时还利用了Hadoop分布式文件系统(HDFS)来实现大规模数据存储。以下是基于这些技术的关键知识点: 1. **Vue.js**:Vue.js 是一种轻量级的前端...
通过使用Hadoop的Java API,开发者可以在SpringBoot应用中编写代码,实现对HDFS的CRUD(创建、读取、更新和删除)操作,增强了应用的存储能力。 其次,MapReduce是Hadoop用于大规模数据处理的编程模型,主要包含Map...
本项目“基于Hadoop结合Spring全家桶,采用HDFS文件系统存储的以JPA完成持久层的项目”正是这样一个将大数据处理与企业级应用开发紧密结合的实例。下面将详细阐述该项目中的关键知识点。 首先,Hadoop是一个开源的...
- 包含的实例可能是简化版的Hadoop应用,用于学习和理解Hadoop工作原理,包括MapReduce任务的实现,Hive查询脚本,或者HBase的CRUD操作。 使用这些jar包,开发者可以构建完整的Hadoop生态系统解决方案,涵盖数据的...
- **Repository支持**:类似于Spring Data对其他数据存储的支持,Spring Data Hadoop提供了Hadoop Repository接口,允许定义通用的CRUD操作。 - **MapReduce抽象**:Spring Data Hadoop提供了Map/Reduce任务的抽象...
它主要由两个关键组件组成:HDFS(Hadoop Distributed File System)和MapReduce。HDFS是一种分布式文件系统,可以将大规模数据分布在多台廉价硬件上,提供高容错性和高吞吐量的数据访问。MapReduce则是一种并行计算...
Hadoop的客户端jar包通常包含了HDFS(Hadoop Distributed File System)和MapReduce的相关API,允许你读写HDFS中的数据以及执行MapReduce任务。你需要确保包含以下jar包: 1. `hadoop-common-*.jar`:这是Hadoop的...
它由两个核心组件组成:Hadoop Distributed File System (HDFS) 和 MapReduce。HDFS提供高容错性的分布式文件系统,允许数据在多台机器上冗余存储,即使部分节点故障也能保证数据可用性。MapReduce则是一种编程模型...
MySQL是世界上最受欢迎的关系型数据库管理系统之一,而HDFS(Hadoop Distributed File System)则是Apache Hadoop项目的一部分,是一个分布式文件系统,专为大规模数据处理设计。本教程将详细介绍如何在Spring Boot...
- **文件上传与下载**:了解如何使用Hadoop命令行工具将本地文件上传到HDFS以及从HDFS下载文件。 - **文件管理**:掌握HDFS文件管理操作,如创建目录、删除文件、查看文件状态等。 - **数据块管理**:理解HDFS数据块...
Spring Data Hadoop是Spring框架的一部分,它为开发人员提供了一种简单的方式来使用Hadoop生态系统的组件,如HDFS、MapReduce和HBase等。在1.0.1.RELEASE这个版本中,它继续致力于简化Hadoop编程模型,让Java开发者...
它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS提供了高容错性的数据存储,能够将大型文件分布在不同的节点上,确保数据的冗余和可靠性。MapReduce则是一种并行计算模型,用于处理和生成...
HBase构建于Hadoop之上,利用HDFS作为其底层存储,提供实时读写能力,适合处理大规模结构化数据。在本教程中,我们将深入探讨HBase的基本CRUD(创建、读取、更新和删除)操作的封装。 首先,要进行HBase的CRUD操作...
Hadoop的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS是一种分布式文件系统,它将大文件分割成块并分布在多台机器上,保证了数据的高可用性和容错性。MapReduce则是处理这些数据的计算框架...
Hadoop则是大数据处理的核心,它的主要组件包括HDFS(Hadoop Distributed File System)和MapReduce。HDFS提供了高容错性的分布式文件存储,适合存储海量数据。物品租赁系统中的交易记录、用户信息等大量数据,可以...
Hadoop提供了一个可靠的分布式文件系统(HDFS)和资源管理框架(YARN),为HBase提供了底层的存储和计算支持。HBase则在此基础上构建,实现了高性能、实时的随机读写操作,适合大量结构化数据的存储和查询。因此,...