hadoop第二天——2. HDFS的应用开发(JAVA API操作)
2019-06-17 08:53
218 查看
二、HDFS的应用开发
HDFS的JAVA API操作
- 需要注意客户端身份的设定 使得身份符合hdfs对应路径的操作权限
- 配置环境变量(HADOOP_HOME、path)
- 因为在windows上做HDFS客户端应用开发,需要设置Hadoop环境,而且要求是windows平台编译的Hadoop,否则会报“找不到winutils.exe”的错误。hadoop涉及往windows进行数据写操作的时候 需要winutils工具跟windows平台进行交互,负责数据的写操作。该工具由hadoop提供 但是需要下载源码在windows编译。
- 解决:下载hadoop源码 在windows平台编译(支持C++环境)
- 配置:把windows版本的hadoop在操作系统上配置环境变量 重启idea - 搭建开发环境(创建maven工程,引入pom依赖)
HADOOP_HOME=hadoop安装目录 path=%HADOOP_HOME%\bin
方案一,使用cdh仓库的依赖:
<repositories> <repository> <id>cloudera</id> <url>https://repository.cloudera.com/artifactory/clouderarepos/</url> </repository> </repositories> <dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.6.0-mr1-cdh5.14.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.6.0-cdh5.14.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.6.0-cdh5.14.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-mapreduce-client-core</artifactId> <version>2.6.0-cdh5.14.0</version> </dependency> </dependencies>
方案二,使用apache hadooop的依赖:
<dependencies> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-common</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-hdfs</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>org.apache.hadoop</groupId> <artifactId>hadoop-client</artifactId> <version>2.6.0</version> </dependency> <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>RELEASE</version> </dependency> </dependencies>
注:两种方案api都一样。
- 构建客户端对象
Configuration:该类的对象封装了客户端或者服务器的配置。
FileSystem:该类的对象是一个文件系统对象,可以用该对象的一些方法来对文件进行操作,通过FileSystem的静态方法get获得该对象。
import org.apache.commons.io.IOUtils; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import java.io.FileInputStream; import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; public class HdfsTest { public static void main(String[] args) throws URISyntaxException, IOException, InterruptedException { // 配置参数,指定相关属性信息 Configuration config = new Configuration(); /* 设置文件系统为hdfs 通过FileSystem静态对象获取文件系统实例 构造文件系统实例同时指定操作文件系统的用户身份 */ /* 方案一: config.set("fs.defaultFS", "hdfs://node01:9000"); System.setProperty("HADOOP_USER_NAME", "root"); FileSystem fs = FileSystem.get(config); */ // 方案二: FileSystem fs = FileSystem.get(new URI("hdfs://node01:9000"), config, "root"); // 创建文件夹 fs.mkdirs(new Path("/createByJava")); // 上传文件 fs.copyFromLocalFile(new Path("D:\\test\\1.txt"), new Path("/createByJava/1.txt")); // 下载文件 fs.copyToLocalFile(new Path("/createByJava/1.txt"), new Path("D:\\test\\2.txt")); // 更加底层的方式操作hdfs,后续mr、spark程序底层都是通过stream形式操作文件的 FSDataOutputStream out = fs.create(new Path("/createByJava/2.txt")); FileInputStream in = new FileInputStream("D:\\test\\1.txt"); IOUtils.copy(in, out); // 关闭文件系统 fs.close(); } }
get方法从conf中的一个参数fs.defaultFS的配置值判断具体是什么类型的文件系统。如果我们的代码中没有指定fs.defaultFS,并且工程classpath下也没有给定相应的配置,conf中的默认值就来自于hadoop的jar包中的core-default.xml,默认值为:file:///,则获取的将不是一个DistributedFileSystem的实例,而是一个本地文件系统的客户端对象。
相关文章推荐
- openjweb1.8 java web应用快速开发平台操作手册
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
- 黑马程序员_加速Java应用开发速度5:使用脚本自动化日常操作
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包相关 接口 api
- Hadoop学习二(java api调用操作HDFS)
- JAVA操作HDFS API(hadoop) HDFS API详解
- 第一天:Java源码级实战速成(通过动手实战类、对象等,通过Spark和Hadoop案例代码和源码解析具体指知识的应用、深度详解匿名接口在Spark开发中的运用)
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简单介绍
- Java Web应用快速开发平台OpenJWeb(v1.6)增删改查页面生成器操作手册
- java应用中,调用第三方api如何处理异常(系统异常、操作异常等等)
- JAVA操作数据库方式与设计模式应用-Java基础-Java-编程开发
- 【Android 应用开发】Android 网络编程 API笔记 - java.net 包 权限 地址 套接字 相关类 简介
- openjweb1.8 java web应用快速开发平台操作手册
- 第二篇:Hadoop HDFS常用JAVA api操作程序
- windows下JAVA开发操作hadoop的方法
- Java API操作HA方式下的Hadoop
- java api 操作hadoop
- hadoop系列之五JavaAPI操作HDFS文本系统
- 使用Java操作Hadoop API
- Hadoop FIleSystem API JAVA操作。