IDEA中新建Maven工程,添加POM依赖, 在IDE的提示中, 点击 Import Changes 等待自动下载完成相关的依赖包。

  1. <?xml version="1.0" encoding="UTF-8"?>
  2. <project xmlns="http://maven.apache.org/POM/4.0.0"
  3. xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  4. xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  5. <modelVersion>4.0.0</modelVersion>
  6.  
  7. <groupId>cn.itcast</groupId>
  8. <artifactId>example-hdfs</artifactId>
  9. <version>1.0-SNAPSHOT</version>
  10. <dependencies>
  11. <dependency>
  12. <groupId>org.apache.hadoop</groupId>
  13. <artifactId>hadoop-common</artifactId>
  14. <version>2.7.5</version>
  15. </dependency>
  16. <dependency>
  17. <groupId>org.apache.hadoop</groupId>
  18. <artifactId>hadoop-hdfs</artifactId>
  19. <version>2.7.5</version>
  20. </dependency>
  21. <dependency>
  22. <groupId>org.apache.hadoop</groupId>
  23. <artifactId>hadoop-client</artifactId>
  24. <version>2.7.5</version>
  25. </dependency>
  26. <dependency>
  27. <groupId>junit</groupId>
  28. <artifactId>junit</artifactId>
  29. <version>RELEASE</version>
  30. </dependency>
  31. </dependencies>
  32.  
  33. </project>

启动hadoop后, 在IDEA中测试mkdir, put, get  创建文件夹,上传,下载

  1. package cn.lshm.hdfs;
  2.  
  3. import org.apache.commons.io.IOUtils;
  4. import org.apache.hadoop.conf.Configuration;
  5. import org.apache.hadoop.fs.FSDataOutputStream;
  6. import org.apache.hadoop.fs.FileSystem;
  7. import org.apache.hadoop.fs.Path;
  8.  
  9. import java.io.FileInputStream;
  10.  
  11. public class TestHDFSClient {
  12. public static void main(String[] args) throws Exception {
  13.  
  14. Configuration conf = new Configuration();
  15.  
  16. //这里指定使用的是 hdfs文件系统
  17. conf.set("fs.defaultFS", "hdfs://master:9000");
  18.  
  19. //通过这种方式设置java客户端身份
  20. System.setProperty("HADOOP_USER_NAME", "root");
  21. FileSystem fs = FileSystem.get(conf);
  22. //或者使用下面的方式设置客户端身份
  23. //FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"),conf,"root");
  24.  
  25. // fs.create(new Path("/helloByJava")); //创建一个目录
  26.  
  27. //文件下载到本地 如果出现0644错误或找不到winutils.exe,则需要设置windows环境和相关文件.
  28. //fs.copyToLocalFile(new Path("/zookeeper.out"), new Path("D:\\test\\examplehdfs"));
  29.  
  30. //使用Stream的形式操作HDFS,这是更底层的方式
  31. FSDataOutputStream outputStream = fs.create(new Path("/2.txt"), true); //输出流到HDFS
  32. FileInputStream inputStream = new FileInputStream("D:/test/examplehdfs/1.txt"); //从本地输入流。
  33. IOUtils.copy(inputStream, outputStream); //完成从本地上传文件到hdfs
  34.  
  35. fs.close();
  36. }
  37. }

Run之后,没有报错,到hdfs上查看,是否有对应的结果。

最后,老师创建了一个类,方便调用。

  1. package cn.lshm.hdfs;
  2.  
  3. import java.io.FileNotFoundException;
  4. import java.io.IOException;
  5. import java.net.URI;
  6.  
  7. import org.apache.hadoop.conf.Configuration;
  8. import org.apache.hadoop.fs.BlockLocation;
  9. import org.apache.hadoop.fs.FileStatus;
  10. import org.apache.hadoop.fs.FileSystem;
  11. import org.apache.hadoop.fs.LocatedFileStatus;
  12. import org.apache.hadoop.fs.Path;
  13. import org.apache.hadoop.fs.RemoteIterator;
  14. import org.junit.Before;
  15. import org.junit.Test;
  16.  
  17. public class HdfsClient {
  18.  
  19. FileSystem fs = null;
  20.  
  21. @Before
  22. public void init() throws Exception {
  23.  
  24. Configuration conf = new Configuration();
  25. // conf.set("fs.defaultFS", "hdfs://node-1:9000");
  26. /**
  27. * 参数优先级: 1、客户端代码中设置的值 2、classpath下的用户自定义配置文件 3、然后是jar中默认配置
  28. */
  29. // 获取一个hdfs的访问客户端
  30. fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root");
  31.  
  32. }
  33.  
  34. /**
  35. * 往hdfs上传文件
  36. *
  37. * @throws Exception
  38. */
  39. @Test
  40. public void testAddFileToHdfs() throws Exception {
  41.  
  42. // 要上传的文件所在的本地路径
  43.  
  44. // 要上传到hdfs的目标路径*/
  45. Path src = new Path("d:/GameLog.txt");
  46. Path dst = new Path("/");
  47. fs.copyFromLocalFile(src, dst);
  48.  
  49. fs.close();
  50. }
  51.  
  52. /**
  53. * 从hdfs中复制文件到本地文件系统
  54. *
  55. * @throws IOException
  56. * @throws IllegalArgumentException
  57. */
  58. @Test
  59. public void testDownloadFileToLocal() throws IllegalArgumentException, IOException {
  60.  
  61. // fs.copyToLocalFile(new Path("/mysql-connector-java-5.1.28.jar"), new
  62. // Path("d:/"));
  63. fs.copyToLocalFile(false, new Path("/install.log.syslog"), new Path("e:/"), true);
  64. fs.close();
  65.  
  66. }
  67.  
  68. /**
  69. * 目录操作
  70. *
  71. * @throws IllegalArgumentException
  72. * @throws IOException
  73. */
  74. @Test
  75. public void testMkdirAndDeleteAndRename() throws IllegalArgumentException, IOException {
  76.  
  77. // 创建目录
  78. fs.mkdirs(new Path("/a1/b1/c1"));
  79.  
  80. // 删除文件夹 ,如果是非空文件夹,参数2必须给值true ,删除所有子文件夹
  81. fs.delete(new Path("/aaa"), true);
  82.  
  83. // 重命名文件或文件夹
  84. fs.rename(new Path("/a1"), new Path("/a2"));
  85.  
  86. }
  87.  
  88. /**
  89. * 查看目录信息,只显示文件
  90. *
  91. * @throws IOException
  92. * @throws IllegalArgumentException
  93. * @throws FileNotFoundException
  94. */
  95. @Test
  96. public void testListFiles() throws FileNotFoundException, IllegalArgumentException, IOException {
  97.  
  98. RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
  99.  
  100. while (listFiles.hasNext()) {
  101.  
  102. LocatedFileStatus fileStatus = listFiles.next();
  103.  
  104. System.out.println(fileStatus.getPath().getName());
  105. System.out.println(fileStatus.getBlockSize());
  106. System.out.println(fileStatus.getPermission());
  107. System.out.println(fileStatus.getLen());
  108. BlockLocation[] blockLocations = fileStatus.getBlockLocations();
  109. for (BlockLocation bl : blockLocations) {
  110. System.out.println("block-length:" + bl.getLength() + "--" + "block-offset:" + bl.getOffset());
  111. String[] hosts = bl.getHosts();
  112. for (String host : hosts) {
  113. System.out.println(host);
  114. }
  115.  
  116. }
  117.  
  118. System.out.println("--------------打印的分割线--------------");
  119.  
  120. }
  121.  
  122. }
  123.  
  124. /**
  125. * 查看文件及文件夹信息
  126. *
  127. * @throws IOException
  128. * @throws IllegalArgumentException
  129. * @throws FileNotFoundException
  130. */
  131. @Test
  132. public void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException {
  133. //可以右击方法名,Run 测试一下。
  134. FileStatus[] listStatus = fs.listStatus(new Path("/"));
  135.  
  136. String flag = "";
  137. for (FileStatus fstatus : listStatus) {
  138.  
  139. if (fstatus.isFile()) {
  140. flag = "f-- ";
  141. } else {
  142. flag = "d-- ";
  143. }
  144. System.out.println(flag + fstatus.getPath().getName());
  145. System.out.println(fstatus.getPermission());
  146.  
  147. }
  148.  
  149. }
  150.  
  151. }

文章转载至:https://www.cnblogs.com/frx9527/p/java2hdfs.html

使用Java方式连接HDFS的更多相关文章

  1. JAVA API连接HDFS HA集群

    使用JAVA API连接HDFS时我们需要使用NameNode的地址,开启HA后,两个NameNode可能会主备切换,如果连接的那台主机NameNode挂掉了,连接就会失败. HDFS提供了names ...

  2. 使用Java API方式连接HDFS Client测试

    IDEA中新建Maven工程,添加POM依赖, 在IDE的提示中, 点击 Import Changes 等待自动下载完成相关的依赖包. <?xml version="1.0" ...

  3. java方式连接数据操作数据库

    package com.bdqn.dao.impl; import java.io.IOException;import java.io.InputStream;import java.io.Seri ...

  4. Java笔记4:JDBC纯驱动方式连接Oracle

    JDBC纯驱动方式连接Oracle 1 下载Oracle提供的驱动程序包 下载地址: http://www.oracle.com/technetwork/database/enterprise-edi ...

  5. java thin方式连接oracle数据库

    本文主要描述通过thin方式连接oracle数据库 1.创建web project ,将D:\oracle\product\10.2.0\db_1\jdbc\lib(oracle安装目录)下的ojdb ...

  6. Java Mysql连接池配置和案例分析--超时异常和处理

    前言: 最近在开发服务的时候, 发现服务只要一段时间不用, 下次首次访问总是失败. 该问题影响虽不大, 但终究影响用户体验. 观察日志后发现, mysql连接因长时间空闲而被关闭, 使用时没有死链检测 ...

  7. 异步消息总线hornetq学习-03客户端连接hornet进行jms消息的收发-非jndi方式连接

    在上节中介绍了通过jndi方式连接到hornetq服务器上,有时候由于某些原因,我们不希望通过jndi方式连接,hornetq也支持这种方式进行 以第2章节的例子为模板,我们编写了另一个获取Conne ...

  8. Java网络连接之HttpURLConnection、HttpsURLConnection

    工具类包含两个方法: http请求.https请求 直接看代码: package com.jtools; import java.io.BufferedReader; import java.io.I ...

  9. EBS中使用JAVA方式发送HTML格式邮件

    转自huan.gu专栏:http://blog.csdn.net/gh320/article/details/17174769 EBS中使用JAVA方式发送HTML格式邮件 一.开发工具:JDevel ...

随机推荐

  1. 父进程结束,其子进程不会结束,会挂到init进程下

    结论:一个父进程产生子进程,父进程结束(kill),子进程不会结束,子进程被init进程托管 下面是过程: d.sh脚本是一个ping命令,执行d.sh 目前,103310 进程为父进程,103344 ...

  2. Crypto加密解密

    crypto 模块提供了加密功能,包含对 OpenSSL 的哈希.HMAC.加密.解密.签名.以及验证功能的一整套封装.我们这里讲crypto AES算法加密 一.使用步骤 1.引入Crypto 1. ...

  3. Centos6 iptables 防火墙设置【转】

    1.指令 vi /etc/sysconfig/iptables 添加以下内容和要开放的端口 # Firewall configuration written by system-config-fire ...

  4. Yii2的Gridview应用技巧补充

    Yii2框架下的Gridview通常用来展示一张DB表中的数据,十分方便.这里只说一下经常要用到的一些小技巧,其实大多数官方文档都是有的,只是有可能需要在多个文档里. 自动创建的gridview示例. ...

  5. CF765F Souvenirs

    CF765F Souvenirs [CF765F]Souvenirs 主席树 - CQzhangyu - 博客园 其实不用主席树 感觉像是离线问题 但是不能支持差分.分治又处理不了 考虑按照右端点排序 ...

  6. react-native命令行打包APK报错

    我是根据react-native官网进行的react-native打包APK 我的步骤为 第一步就是生成密钥 第二步就是将密钥拷入 第三步:在\android\gradle.properties写入 ...

  7. linux basic ------ dd 和 cp 的区别

    问:看了一些关于dd和cp的命令,但是我始终无法明白dd和cp之间有什么不同?不是都可以看成是备份的作用么?还有什么区别呢?答:1.dd是对块进行操作的,cp是对文件操作的. 2.比如有两块硬盘,要将 ...

  8. vue---mixins的用法

    相信大家都用过less.sass等预编译器.它们中也有mixins,用法也很简单,例如Less中: .box{ border:1px solid red; padding:10px; } .mixin ...

  9. SQL server 统计数据库表数量和列出所有表名称

    统计表数量 SELECT count(*) FROM sys.objects WHERE type='U' 列出表名称  SELECT NAME  FROM sys.objects WHERE typ ...

  10. 网页三剑客之HTML

    Web服务本质 import socket def handle_request(client): request_data = client.recv(1024) print(request_dat ...