在windows下的hdfs客户端编写
在windows下的hdfs客户端编写
新建一个工程,右键 properties -> java build path -> libraries 和之前一样的操作,这次 new 一个 user libiary 把整个 hadoop3.0.0 的jar包全部导入
upload()运行成功,运行download()的时候出现报错
HADOOP_HOME and hadoop.home.dir are unset.
解决方案:
- 从linux上把解压的hadoop-3.0.0文件夹下载到本地
- 下载hadoop3.0.0的 winutils,替换掉bin目录
- 将hadoop.dll 拷贝至C:\windows\system32\
- 配置环境变量
HADOOP_HOME,并且在系统变量的path中附加%HADOOP_HOME%/bin
成功运行代码:
package cn.thousfeet.hadoop.hdfs;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.net.URI;
import org.apache.hadoop.conf.Configuration;
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 HdfsUtils {
FileSystem fs = null;
@Before
public void init() throws Exception {
// 读取classpath下的xxx-site.xml配置文件,解析内容封装到conf对象中
Configuration conf = new Configuration();
// 可以手动设置conf的配置信息(覆盖原配置文件中的值)
conf.set("fs.defaultFS", "hdfs://node01:9000/");
// 获取文件系统的客户端操作实例对象。设置username为之前上传文件的linux用户信息,以防没有读写权限
fs = FileSystem.get(new URI("hdfs://node01:9000/"), conf, "thousfeet");
}
/**
* 上传文件
* @throws Exception
* @throws IllegalArgumentException
*/
@Test
public void upload() throws IllegalArgumentException, Exception {
fs.copyFromLocalFile(new Path("D:/eclipse-workspace/test.txt"), new Path("hdfs://node01:9000/a/b/c/test.txt"));
}
/**
* 下载文件
* @throws Exception
* @throws IllegalArgumentException
*/
@Test
public void download() throws IllegalArgumentException, Exception {
fs.copyToLocalFile(new Path("hdfs://node01:9000/aa/test.txt"), new Path("D:/eclipse-workspace/test2.txt"));
}
/**
* 查看文件信息
* @throws Exception
* @throws IllegalArgumentException
* @throws FileNotFoundException
*/
@Test
public void listFiles() throws FileNotFoundException, IllegalArgumentException, Exception {
// listFile() 列出的是文件信息,并且提供递归遍历(参数为true时 能递归查看文件夹内的文件)
RemoteIterator<LocatedFileStatus> files = fs.listFiles(new Path("/"), true);
while(files.hasNext())
{
LocatedFileStatus file = files.next();
Path filePath = file.getPath();
String fileName = filePath.getName();
System.out.println(fileName);
}
/**打印结果
* test.txt
* core-site.xml
* hadoop-core-1.2.1.jar
* jdk-8u161-linux-x64.tar.gz
*/
System.out.println("-----------------------");
// listStatus() 列出文件和文件夹的信息,但是不提供递归遍历(需要自行去做递归)
FileStatus[] listStatus = fs.listStatus(new Path("/"));
for(FileStatus status : listStatus)
{
String name = status.getPath().getName();
System.out.println(name + (status.isDirectory() ? " - is a dir": " - is a file"));
}
/**
* 打印结果
* a - is a dir
* core-site.xml - is a file
* input - is a dir
* jdk-8u161-linux-x64.tar.gz - is a file
*/
}
/**
* 创建文件夹
* @throws Exception
* @throws IllegalArgumentException
*/
@Test
public void mkdir() throws IllegalArgumentException, Exception {
fs.mkdirs(new Path("/a/b/c"));
}
/**
* 删除文件或文件夹
* @throws Exception
* @throws IllegalArgumentException
*/
@Test
public void deleteFiles() throws IllegalArgumentException, Exception {
fs.delete(new Path("hdfs://node01:9000/aa"), true);
}
}
所以说还是windows的eclipse用的舒服啊!(
关于win下调试hadoop的参考资料:
- https://blog.csdn.net/nightwizard2030/article/details/53142069
- https://blog.csdn.net/darkdragonking/article/details/72636917
附:eclipse使用的一些小技巧快捷键
Alt + /提示补全信息(设置全字符补全:https://www.cnblogs.com/firstcsharp/p/4025689.html)
Ctrl + 2 松手 Lnew一个对象,前面接收的对象信息快速补全
在windows下的hdfs客户端编写的更多相关文章
- windows下的mysql客户端mysqlworkbench链接虚拟机上CentOS的mysql服务器
本人在虚拟机上CentOS的Linux环境下安装了mysql服务器,在本地Windows下安装了mysql的客户端mysqlworkbench ,所以就想让windows下的mysql客户端mysql ...
- Windows下安装Redis客户端
Redis是有名的NoSql数据库,一般Linux都会默认支持.但在Windows环境中,可能需要手动安装设置才能有效使用.这里就简单介绍一下Windows下Redis服务的安装方法,希望能够帮到你. ...
- windows 下使用github客户端报错:Failed to publish this branch
在windows系统下使用github客户端同步的时候报错“Failed to publish this branch”,查找原因,发现结果是安装vscode的时候没有检查到git,然后安装git后库 ...
- windows下安装oracle客户端和php扩展
先来抱怨下 ,按这玩楞费了我大半天的时间,一路的坑! 我的电脑是win7 64位的 第一步 打开php.ini 把 extension=php_oci8_12c.dll extension=php ...
- Mqtt开发笔记:windows下C++ ActiveMQ客户端介绍、编译和使用
前话 项目需求,需要使用到mqtt协议,之前编译QtMqtt库,不支持队列模式queue(点对点),只支持订阅/发布者模式.,所以使用C++ ActiveMQ实现. MQTT协议 简介 M ...
- windows下注册表脚本编写
Reg文件就是我今天所说的注册表脚本文件,双击可将其中的数据写入注册表.利用注册表脚本文件可以对注册表进行关于键值的任何操作,而且还不受注册表被禁用的限制. 我们平常对注册表的修改大体上可以分 ...
- windows下使用eclipse远程编写hadoop配置
1.按照一般方法配置好hadoop伪分布式,注意core-site.xml和mapred-site.xml用IP,不要用localhost 2.格式化hdfs文件系统hadoop namenode - ...
- Windows 下的SSH客户端
在日常Linux系统管理中,会使用SSH工具连接服务器,之所以SSH连接主要是为了安全,传统的telnet连接方式是以明文传输,很不安全,网络中如果又热窃听抓包,密码将要泄露.在众多SSH连接中,Pu ...
- 推荐Windows下SVN服务器端和客户端工具软件
相信很多人使用过Windows下的SVN客户端软件TortoiseSVN或者也有过Linux下.MAC下的SVN命令行使用经验,另外MAC下还有以一款就做Vesions的SVN客户端软件,不过个人感觉 ...
随机推荐
- vue-router参数传递
1.在vue-router中,有两大对象被挂载到了实例this2.$route(只读.具备信息的对象).$router(具备函数功能)3.查询字符串方式传递参数 1).去哪里 <router-l ...
- 区别js中name与id的简单方法
举个简单的例子: <form name="form1"> 用户名:<input type=text name="username" id=&q ...
- [javaSE] 位运算符(&|^)
位运算是直接对二进制进行计算 左移 << 右移 >> 先把整数换成四个8bit 0000-0000 0000-0000 0000-0000 0000-0000 这个二进制左右移 ...
- Java中使用json时java.lang.NoClassDefFoundError: net/sf/ezmorph/Morpher问题解决
下面代码: public static void main(String[] args) { JSONObject obj = new JSONObject(); obj.put("msg& ...
- java中对JVM的深度解析、调优工具、垃圾回收
jdk自带的JVM调优工具 jvm监控分析工具一般分为两类,一种是jdk自带的工具,一种是第三方的分析工具.jdk自带工具一般在jdk bin目录下面,以exe的形式直接点击就可以使用,其中包含分析工 ...
- 百度AI人脸识别的学习总结
本文主要分以下几个模块进行总结分析 项目要求:运用百度AI(人脸识别)通过本地与外网之间的信息交互(MQService),从而通过刷脸实现登陆.签字.会议签到等: 1.准备工作: 内网:单击事件按钮— ...
- git 回退远端提交的三种方法
git push -f origin XXX(远程分支名) 重新提交一个新的提交.(优先使用这个方式) revert 手动revert 删掉远程分支,再推一个本地分支上去.
- K:单词查找树(Trie)
单词查找树,又称前缀树或字典树,是一种有序树,用于保存关联数组,其中的键通常是字符串.Trie可以看作是一个确定有限状态自动机(DFA).与二叉查找树不同,键不是直接保存在节点中,而是由节点在树中 ...
- win10完美去除小箭头
1.去掉小箭头 reg add /d "%systemroot%\system32\imageres.dll,197" /t reg_sz /f taskkill /f /im e ...
- ctcms Nginx 伪静态
location /whole { rewrite ^/whole/(.+).html$ /index.php?c=whole&key=$1; } location /show { rewri ...