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 就行了?
2.运行Test的时候,加一段VM的参数-DHADOOP_USER_NAME=hadoop,即可解决问题
重新run test,绿色心情,O(∩_∩)O~,查看HDFS
未完待续,下班啦,下周继续,先住大家周末愉快!O(∩_∩)O~??
?
?
?
?
原文:http://agilestyle.iteye.com/blog/2289588