Hadoop Java API操作HDFS文件系统(Mac)
2、关联jar包
在eclipse中新建项目中,建lib文件夹,把要用的jar包拷贝进来,jar包在解压好的 hadoop-2.9.1/share/hadoop中
我们这里不拷贝,选择关联你所存放在电脑上的路径
在项目上右键选择 Bulid Path > Add Libraries > User Library > ok > new > 命名 > ok > Add External JARs > 选择jar包


然后会看到项目下多了个包

3、开始写代码
package bigdata.hdfs; import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.net.URI;
import java.util.Iterator;
import java.util.Map.Entry; import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.BlockLocation;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FSDataOutputStream;
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; /* 客户端操作hdfs时,需要一个用户身份,
* 默认情况下,hdfs客户端会从jvm中获取一个参数来作为自己的用户身份:-DHADOOP_USER_NAME=hadoop,
* 解决方法方法有两种:
* 1、设置外部参数;
* 2、在代码中写明,用get方法时,选择三个参数的,将用户名传进去;
*/
public class HdfsClientDemo {
FileSystem fs = null; @Before
public void init() throws Exception {
Configuration conf = new Configuration();
//这里要识别master的话,需要修改本机hosts文件
conf.set("fs.defaultFS", "hdfs://master:9000");
//拿到一个文件操作系统的客户端实例对象
fs = FileSystem.get(new URI("hdfs://master:9000"), conf, "wang");
} // 上传
@Test
public void testUpload() throws Exception {
fs.copyFromLocalFile(new Path("/Users/wang/Desktop/upload.jpg"),new Path("/upload_copy.jpg"));
fs.close();
} //下载
@Test
public void testDownload() throws Exception {
fs.copyToLocalFile(new Path("/upload_copy.jpg"), new Path("/Users/wang/Desktop/download.jpg"));
fs.close();
} @Test
public void testUpload2() throws Exception {
//以流的方式上传
FSDataOutputStream outputStream = fs.create(new Path("/liu.txt"));
FileInputStream inputStream = new FileInputStream("/Users/wang/Desktop/");
org.apache.commons.io.IOUtils.copy(inputStream, outputStream);
} @Test
public void testDownload2() throws Exception {
//以流的方式下载
FSDataInputStream InputStream= fs.open(new Path("/a.txt"));
//指定读取文件的指针的起始位置
InputStream.seek(12);
FileOutputStream OutputStream = new FileOutputStream("/Users/wang/Desktop/a.txt");
org.apache.commons.io.IOUtils.copy(InputStream, OutputStream);
} //打印参数
@Test
public void testConf() {
Configuration conf = new Configuration();
Iterator<Entry<String, String>> it = conf.iterator();
while(it.hasNext()) {
Entry<String, String> en = it.next();
System.out.println(en.getKey()+':'+en.getValue());
}
} @Test
public void testLs() throws Exception{
//递归列出所有文件,返回一个迭代器对象
RemoteIterator<LocatedFileStatus> listFiles = fs.listFiles(new Path("/"), true);
while (listFiles.hasNext()) {
LocatedFileStatus fileStatus = listFiles.next();
System.out.println("blocksize:"+fileStatus.getBlockSize());
System.out.println("owner:"+fileStatus.getOwner());
System.out.println("Replication:"+fileStatus.getReplication());
System.out.println("Permission:"+fileStatus.getPermission());
System.out.println("Name:"+fileStatus.getPath().getName());
BlockLocation[] blockLocations = fileStatus.getBlockLocations();
for(BlockLocation b:blockLocations) {
System.out.println("块起始偏移量"+b.getOffset());
System.out.println("块长度"+b.getLength());
String[] hosts = b.getHosts();
//块所在的datanode节点
for(String host:hosts) {
System.out.println("datanode:"+host);
}
}
System.out.println("--------------------");
}
} @Test
public void testLs2() throws Exception {
//只列出一个层级
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for(FileStatus file:listStatus) {
System.out.print("name:"+file.getPath().getName()+",");
System.out.println((file.isFile()?"file":"directory"));
}
}
}
Hadoop Java API操作HDFS文件系统(Mac)的更多相关文章
- 使用Java API操作HDFS文件系统
使用Junit封装HFDS import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.*; import org ...
- 使用Java Api 操作HDFS
如题 我就是一个标题党 就是使用JavaApi操作HDFS,使用的是MAVEN,操作的环境是Linux 首先要配置好Maven环境,我使用的是已经有的仓库,如果你下载的jar包 速度慢,可以改变Ma ...
- hadoop学习笔记(五):java api 操作hdfs
HDFS的Java访问接口 1)org.apache.hadoop.fs.FileSystem 是一个通用的文件系统API,提供了不同文件系统的统一访问方式. 2)org.apache.hadoop. ...
- Hadoop Java API 操作 hdfs--1
Hadoop文件系统是一个抽象的概念,hdfs仅仅是Hadoop文件系统的其中之一. 就hdfs而言,访问该文件系统有两种方式:(1)利用hdfs自带的命令行方式,此方法类似linux下面的shell ...
- 使用java api操作HDFS文件
实现的代码如下: import java.io.IOException; import java.net.URI; import java.net.URISyntaxException; import ...
- Hadoop之HDFS(三)HDFS的JAVA API操作
HDFS的JAVA API操作 HDFS 在生产应用中主要是客户端的开发,其核心步骤是从 HDFS 提供的 api中构造一个 HDFS 的访问客户端对象,然后通过该客户端对象操作(增删改查)HDFS ...
- HDFS 05 - HDFS 常用的 Java API 操作
目录 0 - 配置 Hadoop 环境(Windows系统) 1 - 导入 Maven 依赖 2 - 常用类介绍 3 - 常见 API 操作 3.1 获取文件系统(重要) 3.2 创建目录.写入文件 ...
- JAVA API 实现hdfs文件操作
java api 实现hdfs 文件操作会出现错误提示: Permission denied: user=hp, access=WRITE, inode="/":hdfs:supe ...
- 大数据-09-Intellij idea 开发java程序操作HDFS
主要摘自 http://dblab.xmu.edu.cn/blog/290-2/ 简介 本指南介绍Hadoop分布式文件系统HDFS,并详细指引读者对HDFS文件系统的操作实践.Hadoop分布式文件 ...
随机推荐
- zabbix安装源
使用zabbix安装源可以避免版本不同的问题,自己根据自己的需求选择对应的版本即可 http://repo.zabbix.com/zabbix/
- 剑指offer 4.树 重建二叉树
题目描述 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树.假设输入的前序遍历和中序遍历的结果中都不含重复的数字.例如输入前序遍历序列{1,2,4,7,3,5,6,8}和中序遍历序列{4,7, ...
- 带宽怎么算---Gbit/s
带宽怎么算---Gbit/s 信息来源: 计算方法: 带宽的实际应用:
- 基于java webRct webSocket 实现点对点视频 (需要源码的请加支付宝好友)
打开支付宝首页搜“555176706”领红包,即可加好友 <%@ page language="java" pageEncoding="UTF-8"%&g ...
- Session小结
session小结1.session是什么Session是服务器为每个访问这个服务器的客户端用户创建的一个容器.这个容器中存储的数据能够在多个request之间实现共享.而且,这个容器只属于当前这个用 ...
- 洛谷P1040 加分二叉树(树形dp)
加分二叉树 时间限制: 1 Sec 内存限制: 125 MB提交: 11 解决: 7 题目描述 设一个n个节点的二叉树tree的中序遍历为(l,2,3,...,n),其中数字1,2,3,...,n ...
- [UE4]计算箭头方向:正切、SetRelativeRotation、RotationFromXVector、Get MotionController Thumbstick X
正切 正弦函数 sinθ=y/r 余弦函数 cosθ=x/r 正切函数 tanθ=y/x 余切函数 cotθ=x/y 正割函数 secθ=r/x 余割函数 cscθ=r/y 已知y和x,求角度θ: ...
- 在chrome console中添加jQuery
由于现有seajs等封装,jQuery等已不在全局暴露,即使网站中已使用jQuery,在console也使用不了. 在chrome中可以用以下代码加入jQuery: fetch('http://cod ...
- jquery操作select下拉框的各种方法,获取选中项的值或文本,根据指定的值或文本选中select的option项等
简介jquery里对select进行各种操作的方法,如联动.取值.根据值或文本来选中指定的select下拉框指定的option选项,读取select选中项的值和文本等. 这一章,站长总结一下jquer ...
- uniapp仿h5+fire自定义事件触发监听
仿h5+fire自定义事件触发监听 uni-app调用 event.js 源码记录(点击查看) 1.js下载地址 [event.js](https://ext.dcloud.net.cn/plugin ...