【大数据系列】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方式安 ...
随机推荐
- Android 输入法遮挡问题
在Android系统中,由于手机屏幕大小的限制,一般需要字符输入的时候,弹出的输入法面板往往会占据大半个屏幕,如果输入框正好在下方,那经常会出现被输入法面板遮挡的尴尬,给使用者带来不小的困扰,用户体验 ...
- mongodb 学习1
基本概念 MongoDB是一个高性能,开源,无模式的文档型数据库,是当前NoSql数据库中比较热门的一种.它在许多场景下可用于替代传统的关系型数据库或键/值存储方式( 文件存储格式为BSON(一种JS ...
- Linq中string转int的方法
Linq中string转int的方法 在做批量删除时,需把一串id值所对应的数据删除,调试出现问题: Linq语句中如果使用ToString()进行类型转换,编译时不会报错,但执行时会出现如下错误 ...
- php 多页面间共享变量
1. 保存session的页面session1.php <? echo "hi, let's try session<br/>"; session_start() ...
- php 字符串 以 开头 以结尾 startWith endWith
From: http://www.shipingzhong.cn/node/1217 //第一个是原串,第二个是 部份串function startWith($str, $needle) { retu ...
- Linux-centos6.8下关闭防火墙
一.临时关闭防火墙 1. 查看防火墙的状态 [root@vpnSS ~]# /etc/init.d/iptables status Table: filter Chain INPUT (policy ...
- Making ARC and non-ARC files play nice together
From Codeography If you want to exclude a file from being compiled with ARC you can do so by setting ...
- Logback中文文档(三):配置
在第一部分,我们将介绍配置 logback 的各种方法,给出了很多配置脚本例子.在第二部分,我们将介绍 Joran,它是一个通用配置框架,你可以在自己的项目里使用 Joran. Logback里的配置 ...
- Macbook pro安装MacOS系统
在app store 下载系统sierra; 打开磁盘工具,选择优盘,抹掉: 日志式,GUID分区: http://www.cnblogs.com/xiaobo-Linux/ 终端输入命令, sudo ...
- 单例模式简介以及C++版本的实现
本篇博文主要内容参考 C++的单例模式一文,在此,为原作者耐心细致的分析讲解,表示感谢.本文将结合此篇文章,给出自己做实验后的理解以及代码,作为今天学习的小结. 单例模式,它的意图是保 ...