【大数据系列】windows环境下搭建hadoop开发环境使用api进行基本操作
前言
搭建完hadoop集群之后在windows环境下搭建java项目进行测试 操作hdfs中的文件
版本一
package com.slp.hadoop274.hdfs; import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection; import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.junit.Test; /**
*
* @author sangliping
*完成hdfs操作
*/
public class TestHDFS { /**
* 读取hdfs文件
* @throws IOException
*/
@Test
public void readFile() throws IOException{
URL url = new URL("hdfs://192.168.181.201:8020/user/sanglp/hadoop/copyFromLocal");
URLConnection con = url.openConnection();
InputStream is = con.getInputStream();
byte[] buf = new byte[is.available()];
is.read(buf);
is.close();
String str = new String(buf,"UTF-8");
System.out.println(str);
}
}
以上运行测试的时候会报错,原因是URL无法识别hdfs协议。
版本二、
package com.slp.hadoop274.hdfs; import java.io.IOException;
import java.io.InputStream;
import java.net.URL;
import java.net.URLConnection; import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.junit.Test; /**
*
* @author sangliping
*完成hdfs操作
*/
public class TestHDFS { static{
//注册hdfs协议否则URL无法识别该协议
URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
}
/**
* 读取hdfs文件
* @throws IOException
*/
@Test
public void readFile() throws IOException{
URL url = new URL("hdfs://192.168.181.201:8020/user/sanglp/hadoop/copyFromLocal");
URLConnection con = url.openConnection();
InputStream is = con.getInputStream();
byte[] buf = new byte[is.available()];
is.read(buf);
is.close();
String str = new String(buf,"UTF-8");
System.out.println(str);
}
}
这个时候就可以正确的打印出hdfs文件copyFromLocal的文件内容。
附:可以将hadoop解压文件下etc中的log4j.properties文件放到项目文件src文件下使控制台打印更友好。
版本三
/**
* 通过hadoop api读取文件
* @throws IOException
* java.lang.IllegalArgumentException: Wrong FS: hdfs://192.168.181.201:8020/user/sanglp/hadoop/copyFromLocal, expected: file:///
* at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:649)
*/
@Test
public void readFileByApiWrong() throws IOException{
Configuration con = new Configuration();
FileSystem fs = FileSystem.get(con);
Path p = new Path("hdfs://192.168.181.201:8020/user/sanglp/hadoop/copyFromLocal");
FSDataInputStream fis = fs.open(p);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte [] buf = new byte[1024];
int len = -1;
while((len=fis.read(buf))!=-1){
baos.write(buf,0,len);
}
fis.close();
baos.close();
System.out.println(new String(baos.toByteArray(),"UTF-8"));
}
此版本错误,因为未指定namenode
版本四
/**
* 使用API用传统流读取hadoop文件
* @throws IOException
*/
@Test
public void readFileByApi() throws IOException{
Configuration con = new Configuration();
con.set("fs.defaultFS", "hdfs://192.168.181.201:8020");
FileSystem fs = FileSystem.get(con);
//以下两种设置path的方法都可以
//Path p = new Path("hdfs://192.168.181.201:8020/user/sanglp/hadoop/copyFromLocal");
Path p = new Path("/user/sanglp/hadoop/copyFromLocal"); FSDataInputStream fis = fs.open(p);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
byte [] buf = new byte[1024];
int len = -1;
while((len=fis.read(buf))!=-1){
baos.write(buf,0,len);
}
fis.close();
baos.close(); System.out.println(new String(baos.toByteArray(),"UTF-8"));
}
版本五
/**
* 使用API并用hadoop提供的IO工具读取hadoop文件
* @throws IOException
*/
@Test
public void readFileByApiUsUtils() throws IOException{
Configuration con = new Configuration();
con.set("fs.defaultFS", "hdfs://192.168.181.201:8020");
FileSystem fs = FileSystem.get(con);
//以下两种设置path的方法都可以
//Path p = new Path("hdfs://192.168.181.201:8020/user/sanglp/hadoop/copyFromLocal");
Path p = new Path("/user/sanglp/hadoop/copyFromLocal"); FSDataInputStream fis = fs.open(p);
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int buf = 1024;
IOUtils.copyBytes(fis, baos, buf);
System.out.println(new String(baos.toByteArray(),"UTF-8"));
}
版本六
/**
* 使用API创建文件夹
* @throws IOException
* org.apache.hadoop.security.AccessControlException: Permission denied: user=hadoop, access=WRITE, inode="/user/sanglp":sanglp:supergroup:drwxr-xr-x
* Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): Permission denied: user=hadoop, access=WRITE, inode="/user/sanglp":sanglp:supergroup:drwxr-xr-x
*/
@Test
public void makeDir() throws IOException{
Configuration con = new Configuration();
con.set("fs.defaultFS", "hdfs://192.168.181.201:8020");
FileSystem fs = FileSystem.get(con);
fs.mkdirs(new Path("/user/sanglp/myhadoop"));
}
直接使用上诉API会出现没有权限的问题,需要修改权限
hadoop fs -chmod 777 /user/sanglp
版本七
/**
* 使用API创建文件
* @throws IOException
*/
@Test
public void putFile() throws IOException{
Configuration con = new Configuration();
con.set("fs.defaultFS", "hdfs://192.168.181.201:8020");
FileSystem fs = FileSystem.get(con);
FSDataOutputStream out = fs.create(new Path("/user/sanglp/myhadoop/a.txt"));
out.write("test put file on myhadoop ".getBytes());
out.close();
}
【大数据系列】windows环境下搭建hadoop开发环境使用api进行基本操作的更多相关文章
- 【大数据系列】win10上安装hadoop开发环境
为了方便采用了Cygwin模拟linux环境的方法 一.安装JDK以及下载hadoop hadoop官网下载hadoop http://hadoop.apache.org/releases.html ...
- 在win10环境下搭建 solr 开发环境
在win10环境下搭建 solr 开发环境 2017年05月30日 09:19:32 SegaChen0130 阅读数:1050 在win10环境下搭建 solr 开发环境 安装环境 Windo ...
- Centos7.4环境下搭建Python开发环境(虚拟机安装+python安装+pycharm安装)
目录 一.安装 Centos7.4虚拟机 二.安装 python3.6.7 三.安装 pycharm 一般情况下,大家都是在 Windows平台下进行 Python开发,软件安装和环境搭建都非常&qu ...
- 在Eclipse下搭建Hadoop开发环境
在前面的博文中博主展示了如何在虚拟机中搭建Hadoop的单节点伪分布集群,今天给大家介绍一下如何在Eclipse环境中搭建Hadoop的管理和开发环境,话不多说,下面我们就进入正题吧! 1.JDK安装 ...
- Linux下搭建hadoop开发环境-超详细
先决条件:开发机器需要联网 已安装java 已安装Desktop组 1.上传安装软件到linux上: 2.安装maven,用于管理项目依赖包:以hadoop用户安装apache-maven-3.0.5 ...
- Linux环境下搭建Android开发环境
最近在折腾linux.因为咱是搞安卓开发的,所以少不了需要搭建Android开发环境,就此小记,希望能给向我一样的开发者一点帮助!开干! 1.安装JDK 下载JDK包,得到的是类似于jdk-8u65- ...
- windows环境下搭建ffmpeg开发环境
ffmpeg是一个开源.跨平台的程序库,能够使用在windows.linux等平台下,本文将简单解说windows环境下ffmpeg开发环境搭建过程,本人使用的操作系统为windows ...
- windows环境下搭建Cocos2d-X开发环境
最近终于有时间可心搞搞自己的东西了,呵呵,那就开始做个手机小游戏给孩子玩吧. 首先必须选定开发的框架,移动终端开源的游戏框架貌似不多,找来找去也就这个了,名字简单Cocos2d-X,是Cocos2d国 ...
- Linux环境下搭建php开发环境的操作步骤
本文主要记载了通过编译方式进行软件/开发环境的安装过程,其他安装方式忽略! 文章背景: 因为php和Apache等采用编译安装方式进行安装,然而编译安装方式,需要c,c++编译环境, 通过apt方式安 ...
随机推荐
- (转)MP4文件两种格式AVC1和H264的区别及利用FFMPEG demux为h264码流事项
出自:http://www.mworkbox.com/wp/work/314.html 2013-05-04 MP4的视频H264封装有2种格式:h264和avc1,对于这个细节,很容易被忽略.笔者也 ...
- MongoDB 3.X JAVA基本操作
对Collection的操作 import java.util.ArrayList; import java.util.Iterator; import java.util.List; import ...
- 如何允许你的应用移动到SD卡?(转至http://blog.csdn.net/feng88724/article/details/6946670)
我们在使用Android手机时发现,有的程序允许被移动到SD卡,而有的不行?这是为什么呢? 因为在Android 2.2版之后, Android应用才被允许移动到SD卡中.而在此之前开发的应用,全部没 ...
- 转载:erlang实现安卓和IOS的推送。
erlang-百度云推送Android服务端功能实现-erlang erlang -- ios apns provider -- erlang 实现 转自:http://www.cnblogs.com ...
- linux stat命令参数及用法详解
功能说明:显示inode内容.语 法:stat [文件或目录]补充说明:stat以文字的格式来显示inode的内容. ls 命令及其许多参数提供了一些非常有用的文件信息.另一个不太为人所熟知的命令 s ...
- 【转】Spring Boot干货系列:(二)配置文件解析
转自:Spring Boot干货系列:(二)配置文件解析 前言 上一篇介绍了Spring Boot的入门,知道了Spring Boot使用"习惯优于配置"(项目中存在大量的配置,此 ...
- 通过expect免自动输入密码登陆远程服务器
通过expect免自动输入密码登陆远程服务器 1.前提必须已经安装expect 2.新建login.sh,文件内容如下 #!/usr/bin/expect -f spawn ssh root@140. ...
- Android学习之——切换应用主题实现日间和夜间效果的更换
前言 智能手机的迅速普及,大大的丰富了我们的娱乐生活.现在大家都喜欢晚上睡觉前玩会儿手机,但是应用的日间模式往往亮度太大,对眼睛有较为严重的伤害. 因此,如今的应用往往开发了日间和夜间两种模式供用户切 ...
- Android学习之——单击ActionBar实现ListView返回顶部
不知道大家在刷微博时,有没有遇到过,刷新太多,想返回顶部看之前的微博的情况.其实,单击顶部的ActionBar能返回顶部.而不用一直向下拉. 废话不多说,讲讲Android中怎么实现这一功能. 首先, ...
- VBscript实现开机自动启动,自动复制原件后启动
set fso = createobject("scripting.filesystemobject") set ws = createobject("wscript.s ...