使用Java方式连接HDFS
IDEA中新建Maven工程,添加POM依赖, 在IDE的提示中, 点击 Import Changes 等待自动下载完成相关的依赖包。
- <?xml version="1.0" encoding="UTF-8"?>
- <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>cn.itcast</groupId>
- <artifactId>example-hdfs</artifactId>
- <version>1.0-SNAPSHOT</version>
- <dependencies>
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-common</artifactId>
- <version>2.7.5</version>
- </dependency>
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-hdfs</artifactId>
- <version>2.7.5</version>
- </dependency>
- <dependency>
- <groupId>org.apache.hadoop</groupId>
- <artifactId>hadoop-client</artifactId>
- <version>2.7.5</version>
- </dependency>
- <dependency>
- <groupId>junit</groupId>
- <artifactId>junit</artifactId>
- <version>RELEASE</version>
- </dependency>
- </dependencies>
- </project>
启动hadoop后, 在IDEA中测试mkdir, put, get 创建文件夹,上传,下载
- package cn.lshm.hdfs;
- 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;
- public class TestHDFSClient {
- public static void main(String[] args) throws Exception {
- Configuration conf = new Configuration();
- //这里指定使用的是 hdfs文件系统
- conf.set("fs.defaultFS", "hdfs://master:9000");
- //通过这种方式设置java客户端身份
- System.setProperty("HADOOP_USER_NAME", "root");
- FileSystem fs = FileSystem.get(conf);
- //或者使用下面的方式设置客户端身份
- //FileSystem fs = FileSystem.get(new URI("hdfs://master:9000"),conf,"root");
- // fs.create(new Path("/helloByJava")); //创建一个目录
- //文件下载到本地 如果出现0644错误或找不到winutils.exe,则需要设置windows环境和相关文件.
- //fs.copyToLocalFile(new Path("/zookeeper.out"), new Path("D:\\test\\examplehdfs"));
- //使用Stream的形式操作HDFS,这是更底层的方式
- FSDataOutputStream outputStream = fs.create(new Path("/2.txt"), true); //输出流到HDFS
- FileInputStream inputStream = new FileInputStream("D:/test/examplehdfs/1.txt"); //从本地输入流。
- IOUtils.copy(inputStream, outputStream); //完成从本地上传文件到hdfs
- fs.close();
- }
- }
Run之后,没有报错,到hdfs上查看,是否有对应的结果。
最后,老师创建了一个类,方便调用。
- package cn.lshm.hdfs;
- import java.io.FileNotFoundException;
- import java.io.IOException;
- import java.net.URI;
- import org.apache.hadoop.conf.Configuration;
- import org.apache.hadoop.fs.BlockLocation;
- 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;
- public class HdfsClient {
- FileSystem fs = null;
- @Before
- public void init() throws Exception {
- Configuration conf = new Configuration();
- // conf.set("fs.defaultFS", "hdfs://node-1:9000");
- /**
- * 参数优先级: 1、客户端代码中设置的值 2、classpath下的用户自定义配置文件 3、然后是jar中默认配置
- */
- // 获取一个hdfs的访问客户端
- fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "root");
- }
- /**
- * 往hdfs上传文件
- *
- * @throws Exception
- */
- @Test
- public void testAddFileToHdfs() throws Exception {
- // 要上传的文件所在的本地路径
- // 要上传到hdfs的目标路径*/
- Path src = new Path("d:/GameLog.txt");
- Path dst = new Path("/");
- fs.copyFromLocalFile(src, dst);
- fs.close();
- }
- /**
- * 从hdfs中复制文件到本地文件系统
- *
- * @throws IOException
- * @throws IllegalArgumentException
- */
- @Test
- public void testDownloadFileToLocal() throws IllegalArgumentException, IOException {
- // fs.copyToLocalFile(new Path("/mysql-connector-java-5.1.28.jar"), new
- // Path("d:/"));
- fs.copyToLocalFile(false, new Path("/install.log.syslog"), new Path("e:/"), true);
- fs.close();
- }
- /**
- * 目录操作
- *
- * @throws IllegalArgumentException
- * @throws IOException
- */
- @Test
- public void testMkdirAndDeleteAndRename() throws IllegalArgumentException, IOException {
- // 创建目录
- fs.mkdirs(new Path("/a1/b1/c1"));
- // 删除文件夹 ,如果是非空文件夹,参数2必须给值true ,删除所有子文件夹
- fs.delete(new Path("/aaa"), true);
- // 重命名文件或文件夹
- fs.rename(new Path("/a1"), new Path("/a2"));
- }
- /**
- * 查看目录信息,只显示文件
- *
- * @throws IOException
- * @throws IllegalArgumentException
- * @throws FileNotFoundException
- */
- @Test
- public 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("--------------打印的分割线--------------");
- }
- }
- /**
- * 查看文件及文件夹信息
- *
- * @throws IOException
- * @throws IllegalArgumentException
- * @throws FileNotFoundException
- */
- @Test
- public void testListAll() throws FileNotFoundException, IllegalArgumentException, IOException {
- //可以右击方法名,Run 测试一下。
- FileStatus[] listStatus = fs.listStatus(new Path("/"));
- String flag = "";
- for (FileStatus fstatus : listStatus) {
- if (fstatus.isFile()) {
- flag = "f-- ";
- } else {
- flag = "d-- ";
- }
- System.out.println(flag + fstatus.getPath().getName());
- System.out.println(fstatus.getPermission());
- }
- }
- }
文章转载至:https://www.cnblogs.com/frx9527/p/java2hdfs.html
使用Java方式连接HDFS的更多相关文章
- JAVA API连接HDFS HA集群
使用JAVA API连接HDFS时我们需要使用NameNode的地址,开启HA后,两个NameNode可能会主备切换,如果连接的那台主机NameNode挂掉了,连接就会失败. HDFS提供了names ...
- 使用Java API方式连接HDFS Client测试
IDEA中新建Maven工程,添加POM依赖, 在IDE的提示中, 点击 Import Changes 等待自动下载完成相关的依赖包. <?xml version="1.0" ...
- java方式连接数据操作数据库
package com.bdqn.dao.impl; import java.io.IOException;import java.io.InputStream;import java.io.Seri ...
- Java笔记4:JDBC纯驱动方式连接Oracle
JDBC纯驱动方式连接Oracle 1 下载Oracle提供的驱动程序包 下载地址: http://www.oracle.com/technetwork/database/enterprise-edi ...
- java thin方式连接oracle数据库
本文主要描述通过thin方式连接oracle数据库 1.创建web project ,将D:\oracle\product\10.2.0\db_1\jdbc\lib(oracle安装目录)下的ojdb ...
- Java Mysql连接池配置和案例分析--超时异常和处理
前言: 最近在开发服务的时候, 发现服务只要一段时间不用, 下次首次访问总是失败. 该问题影响虽不大, 但终究影响用户体验. 观察日志后发现, mysql连接因长时间空闲而被关闭, 使用时没有死链检测 ...
- 异步消息总线hornetq学习-03客户端连接hornet进行jms消息的收发-非jndi方式连接
在上节中介绍了通过jndi方式连接到hornetq服务器上,有时候由于某些原因,我们不希望通过jndi方式连接,hornetq也支持这种方式进行 以第2章节的例子为模板,我们编写了另一个获取Conne ...
- Java网络连接之HttpURLConnection、HttpsURLConnection
工具类包含两个方法: http请求.https请求 直接看代码: package com.jtools; import java.io.BufferedReader; import java.io.I ...
- EBS中使用JAVA方式发送HTML格式邮件
转自huan.gu专栏:http://blog.csdn.net/gh320/article/details/17174769 EBS中使用JAVA方式发送HTML格式邮件 一.开发工具:JDevel ...
随机推荐
- 父进程结束,其子进程不会结束,会挂到init进程下
结论:一个父进程产生子进程,父进程结束(kill),子进程不会结束,子进程被init进程托管 下面是过程: d.sh脚本是一个ping命令,执行d.sh 目前,103310 进程为父进程,103344 ...
- Crypto加密解密
crypto 模块提供了加密功能,包含对 OpenSSL 的哈希.HMAC.加密.解密.签名.以及验证功能的一整套封装.我们这里讲crypto AES算法加密 一.使用步骤 1.引入Crypto 1. ...
- Centos6 iptables 防火墙设置【转】
1.指令 vi /etc/sysconfig/iptables 添加以下内容和要开放的端口 # Firewall configuration written by system-config-fire ...
- Yii2的Gridview应用技巧补充
Yii2框架下的Gridview通常用来展示一张DB表中的数据,十分方便.这里只说一下经常要用到的一些小技巧,其实大多数官方文档都是有的,只是有可能需要在多个文档里. 自动创建的gridview示例. ...
- CF765F Souvenirs
CF765F Souvenirs [CF765F]Souvenirs 主席树 - CQzhangyu - 博客园 其实不用主席树 感觉像是离线问题 但是不能支持差分.分治又处理不了 考虑按照右端点排序 ...
- react-native命令行打包APK报错
我是根据react-native官网进行的react-native打包APK 我的步骤为 第一步就是生成密钥 第二步就是将密钥拷入 第三步:在\android\gradle.properties写入 ...
- linux basic ------ dd 和 cp 的区别
问:看了一些关于dd和cp的命令,但是我始终无法明白dd和cp之间有什么不同?不是都可以看成是备份的作用么?还有什么区别呢?答:1.dd是对块进行操作的,cp是对文件操作的. 2.比如有两块硬盘,要将 ...
- vue---mixins的用法
相信大家都用过less.sass等预编译器.它们中也有mixins,用法也很简单,例如Less中: .box{ border:1px solid red; padding:10px; } .mixin ...
- SQL server 统计数据库表数量和列出所有表名称
统计表数量 SELECT count(*) FROM sys.objects WHERE type='U' 列出表名称 SELECT NAME FROM sys.objects WHERE typ ...
- 网页三剑客之HTML
Web服务本质 import socket def handle_request(client): request_data = client.recv(1024) print(request_dat ...