大数据之HDFS应用开发(java API)

  • 目录
    • 1、搭建开发环境
    • 2、获取api中的客户端对象
    • 3、DistributedFileSystem实例对象所具备的方法
    • 4、HDFS客户端操作数据代码示例

目录

1、搭建开发环境

window下开发的说明:
A、在windows的某个目录下解压一个hadoop的安装包
B、将安装包下的lib和bin目录用对应windows版本平台编译的本地库替换
(这里我的环境是win10、hadoop2.6.4。
对应的win10的编译的本地库下载地址:http://pan.baidu.com/s/1dFzYVKH
密码:pdj9)
C、在window系统中配置HADOOP_HOME指向你解压的安装包
D、在windows系统的path变量中加入hadoop的bin目录
E、根据需要将hadoop下的jar包导入对应的工程中中生成新的Jar包(开发什么程序打成什么jar包。如开发HDFS程序就把hadoop下hdfs下对应的jar包打成一个新的jar包供工程使用)

2、获取api中的客户端对象

在java中操作hdfs,首先要获得一个客户端实例

Configuration conf = new Configuration() 
FileSystem fs = FileSystem.get(conf)

而我们的操作目标是HDFS,所以获取到的fs对象应该是DistributedFileSystem的实例;
get方法是从何处判断具体实例化那种客户端类呢?
——从conf中的一个参数 fs.defaultFS的配置值判断;

如果我们的代码中没有指定fs.defaultFS,并且工程classpath下也没有给定相应的配置,conf中的默认值就来自于hadoop的jar包中的core-default.xml,默认值为: file:///,则获取的将不是一个DistributedFileSystem的实例,而是一个本地文件系统的客户端对象

3、DistributedFileSystem实例对象所具备的方法

这里写图片描述

4、HDFS客户端操作数据代码示例

4.1、文件的增删改查

/*** * 客户端去操作hdfs时,是有一个用户身份的* 默认情况下,hdfs客户端api会从jvm中获取一个参数来作为自己的用户身份:
-DHADOOP_USER_NAME=hadoop* 也可以在构造客户端fs对象时,通过参数传递进去* @author**/
public class HdfsClient {FileSystem fs = null;@Beforepublic void init() throws Exception {// 构造一个配置参数对象,设置一个参数:我们要访问的hdfs的URI// 从而FileSystem.get()方法就知道应该是去构造一个访问hdfs文件系统的客户端,以及hdfs的访问地址// new Configuration();的时候,它就会去加载jar包中的hdfs-default.xml// 然后再加载classpath下的hdfs-site.xmlConfiguration conf = new Configuration();conf.set("fs.defaultFS", "hdfs://hdp-node01:9000");/*** 参数优先级: 1、客户端代码中设置的值 2、classpath下的用户自定义配置文件 3、然后是服务器的默认配置*/// 获取一个hdfs的访问客户端,根据参数,这个实例应该是DistributedFileSystem的实例// fs = FileSystem.get(conf);// 如果这样去获取,那conf里面就可以不要配"fs.defaultFS"参数,而且,这个客户端的身份标识已经是hadoop用户// fs = FileSystem.get(new URI("hdfs://hdp-node01:9000"), conf, "hadoop");}/*** 往hdfs上传文件** @throws Exception*/@Testpublic void testAddFileToHdfs() throws Exception {// 要上传的文件所在的本地路径Path src = new Path("g:/redis-recommend.zip");// 要上传到hdfs的目标路径Path dst = new Path("/aaa");fs.copyFromLocalFile(src, dst);fs.close();}/*** 从hdfs中复制文件到本地文件系统** @throws IOException* @throws IllegalArgumentException*/@Testpublic void testDownloadFileToLocal() throws IllegalArgumentException, IOException {fs.copyToLocalFile(new Path("/jdk-7u65-linux-i586.tar.gz"), new Path("d:/"));fs.close();}@Testpublic void testMkdirAndDeleteAndRename() throws IllegalArgumentException, IOException {// 创建目录fs.mkdirs(new Path("/a1/b1/c1"));// 删除文件夹 ,如果是非空文件夹,参数2必须给值truefs.delete(new Path("/aaa"), true);// 重命名文件或文件夹fs.rename(new Path("/a1"), new Path("/a2"));}/*** 查看目录信息,只显示文件** @throws IOException* @throws IllegalArgumentException* @throws FileNotFoundException*/@Testpublic void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException {RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);while (listFiles.hasNext()) {LocatedFileStatus fileStatus = listFiles.next();System.out.println(fileStatus.getPath().getName());System.out.println(fileStatus.getBlockSize());System.out.println(fileStatus.getPermission());System.out.println(fileStatus.getLen());BlockLocation[] blockLocations = fileStatus.getBlockLocations();for (BlockLocation bl : blockLocations) {System.out.println("block-length:" + bl.getLength() + "--" + "block-offset:" + bl.getOffset());String[] hosts = bl.getHosts();for (String host : hosts) {System.out.println(host);}}System.out.println("--------------为angelababy打印的分割线--------------");}}/*** 查看文件及文件夹信息** @throws IOException* @throws IllegalArgumentException* @throws FileNotFoundException*/@Testpublic void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException {FileStatus[] listStatus = fs.listStatus(new Path("/"));String flag = "d--             ";for (FileStatus fstatus : listStatus) {if (fstatus.isFile())  flag = "f--         ";System.out.println(flag + fstatus.getPath().getName());}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/456759.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

shell脚本执行方式,更方便更快捷。

在进行linux测试时编写脚本是必不可少的。最近经常使用Linux&#xff0c;感觉太频繁地敲击键盘有些累了&#xff0c;于是想到了Shell脚本。可以把太多的命令写成一个脚本&#xff0c;这样每次执行一遍 shell文件&#xff0c;就可以省去了敲击键盘的时间。于是在网上搜了一些有…

行为科学统计第1章

行为科学统计 Statistics for the Behavioral Sciences 一周只学习一次不如每周学习比较多的几次高效噢&#xff5e;&#xff3b;一开始&#xff0c;你并不知道这是一个会写着画风突变的读书笔记?…&#xff3d; 第I部分 简述与描述性统计 第1章 统计学入门 这本书我就是觉得这…

闭包---在函数内部再定义一个函数

什么是闭包 # 定义一个函数 def test(number):# 在函数内部再定义一个函数&#xff0c;并且这个函数用到了外边函数的变量&#xff0c;那么将这个函数以及用到的一些变量称之为闭包def test_in(number_in):print("in test_in 函数, number_in is %d" % number_in)re…

慕课网_《Java实现对称加密》学习总结

时间&#xff1a;2017年4月11日星期二说明&#xff1a;本文部分内容均来自慕课网。慕课网&#xff1a;http://www.imooc.com教学示例源码&#xff1a;https://github.com/zccodere/s...个人学习源码&#xff1a;https://github.com/zccodere/s... 第一章&#xff1a;对称加密算…

大数据之MapReduce详解(MR的运行机制及配合WordCount实例来说明运行机制)

目录前言&#xff1a;1、MapReduce原理2、mapreduce实践&#xff08;WordCount实例&#xff09; 目录 今天先总体说下MapReduce的相关知识&#xff0c;后续将会详细说明对应的shuffle、mr与yarn的联系、以及mr的join操作的等知识。以下内容全是个人学习后的见解&#xff0c;如…

生动形象的理解什么是装饰器!

装饰器 装饰器是程序开发中经常会用到的一个功能&#xff0c;用好了装饰器&#xff0c;开发效率如虎添翼&#xff0c;所以这也是Python面试中必问的问题&#xff0c;但对于好多初次接触这个知识的人来讲&#xff0c;这个功能有点绕&#xff0c;自学时直接绕过去了&#xff0c;…

PLSQL 申明和游标

--从键盘输入一个数 accept b prompt 请输入一个大于零的数字; declareanum number : &b; beginwhile anum>0loopdbms_output.put_line(anum);anum:anum-1;end loop; end;declarev_num number; begin -- 从stsu表中选出id最大的值&#xff0c;并根据该值打印次数select …

20155222 2016-2017-2 《Java程序设计》第8周学习总结

20155222 2016-2017-2 《Java程序设计》第8周学习总结 教材学习内容总结 Java NIO(New IO)是一个可以替代标准Java IO API的IO API&#xff08;从Java 1.4开始)&#xff0c;Java NIO提供了与标准IO不同的IO工作方式。 Java NIO: Channels and Buffers&#xff08;通道和缓冲区&…

BAT经典面试题精简版(基础知识附答案)

文章目录目录J2SE基础JVM操作系统TCP/IP数据结构与算法目录 J2SE基础 九种基本数据类型的大小&#xff0c;以及他们的封装类。 原始类型封装类 booleanBoolean charCharacter byteByte shortShort intInteger longLong floatFloat doubleDouble Switch能否用string做参数&…

使用2to3.py 转换 python2.x 代码 到python3

1.使用Windows 命令提示符&#xff08;cmd&#xff09;cd到2to3.py 脚本所在位置&#xff0c;如下图&#xff1a; 找不到的2 to 3.py的去 pycharm中双击shift搜索一下 2.紧接着运行 2to3.py 脚本&#xff08;可省略&#xff09; 3.执行你想要转换的文件 python 2to3.py -w H:…

iis6.0与asp.net的运行原理

这几天上网翻阅了不少前辈们的关于iis和asp.net运行原理的博客&#xff0c;学的有点零零散散&#xff0c;花了好长时间做了一个小结&#xff08;虽然文字不多&#xff0c;但也花了不少时间呢&#xff09;&#xff0c;鄙人不才&#xff0c;难免有理解不道的地方&#xff0c;还望…

元类--用不上的先了解

元类 1. 类也是对象 在大多数编程语言中&#xff0c;类就是一组用来描述如何生成一个对象的代码段。在Python中这一点仍然成立&#xff1a; >>> class ObjectCreator(object): … pass … >>> my_object ObjectCreator() >>> print(my_ob…

Android学习笔记进阶十之Matrix错切变换

刚开始我也不懂啥叫错切变换&#xff0c;一看效果图你就恍然大悟。 对图像的错切变换做个总结&#xff1a; x x0 b*y0; y d*x0 y0; 与之对应的方法是&#xff1a; [java] view plaincopyMatrix matrix new Matrix(); matrix.setSkew(0.0f, 0.5f);

SQL数据库实战(含建表数据和查询案例)

Oracle数据库安装的时候会自带一个练习用数据库&#xff08;其中包含employee表&#xff0c;后来版本中此表改名为emp&#xff09;&#xff1b; 首先在安装过程中应该有个选项“是否安装实例表”&#xff08;完全安装模式下默认是选择的&#xff09;&#xff0c;需要选择才有此…

Django中的核心思想ORM---元类实现ORM

1. ORM是什么 ORM 是 python编程语言后端web框架 Django的核心思想&#xff0c;“Object Relational Mapping”&#xff0c;即对象-关系映射&#xff0c;简称ORM。 一个句话理解就是&#xff1a;创建一个实例对象&#xff0c;用创建它的类名当做数据表名&#xff0c;用创建它…

移动互联网广告 - 第十更 - 广告投放运营 DashBoard - 2016/12/10

广告投放运营 DashBoard设计 移动互联网互联网广告投放&#xff0c;数据监控DashBoard&#xff0c;基础样例示意&#xff0c;下图仅供参考&#xff08;来自于互联网&#xff09;。 转载于:https://www.cnblogs.com/pythonMLer/p/6154700.html

微信小程序中使用emoji表情相关说明

2019独角兽企业重金招聘Python工程师标准>>> 本帖将聚合一些跟emoji表情有关的知识&#xff1b;相关文章&#xff1a;“i爱记账” 小程序后端开发小结 第7条经验前端传过来的昵称和备注信息一定要经过严格的正则表达式过滤&#xff0c;放置出现XSS等攻击&#xff0c…

java.lang.IllegalArgumentException: Does not contain a valid host:port authority: ignorethis

执行Hive语句运行MapReduce程序时突然出现这样的异常&#xff1a; Total MapReduce jobs 1 Launching Job 1 out of 1 Number of reduce tasks not specified. Estimated from input data size: 1 In order to change the average load for a reducer (in bytes):set hive.ex…

Oracle基础语句

1、创建表create table IT_EMPLOYEES(ENPLOYEES_ID NUMBER(6) NOT NULL UNIQUE,FIRST_NAME VARCHAR2(20),LAST_NAME VARCHAR2(25) NOT NULL,EMAIL VARCHAR2(25),PHONE_NUMBER VARCHAR2(20),JOB_ID VARCHAR2(10),SALARY NUMBER(8,2),MANAGER_ID NUMBER(6));2、--创建索引&#x…

Linux三剑客之grep 与 egrep

grep&#xff1a;Linux上文本处理三剑客1 grep&#xff1a;文本过滤(模式&#xff1a;pattern)工具; *&#xff08;grep, egrep, fgrep&#xff09; 2 sed&#xff1a;stream editor&#xff0c;文本编辑工具&#xff1b; 3 awk&#xff1a;Linux上的实现gawk&#xff0c;文本报…