前言

搭建完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进行基本操作的更多相关文章

  1. 【大数据系列】win10上安装hadoop开发环境

    为了方便采用了Cygwin模拟linux环境的方法 一.安装JDK以及下载hadoop hadoop官网下载hadoop http://hadoop.apache.org/releases.html  ...

  2. 在win10环境下搭建 solr 开发环境

    在win10环境下搭建 solr 开发环境 2017年05月30日 09:19:32 SegaChen0130 阅读数:1050   在win10环境下搭建 solr 开发环境 安装环境  Windo ...

  3. Centos7.4环境下搭建Python开发环境(虚拟机安装+python安装+pycharm安装)

    目录 一.安装 Centos7.4虚拟机 二.安装 python3.6.7 三.安装 pycharm 一般情况下,大家都是在 Windows平台下进行 Python开发,软件安装和环境搭建都非常&qu ...

  4. 在Eclipse下搭建Hadoop开发环境

    在前面的博文中博主展示了如何在虚拟机中搭建Hadoop的单节点伪分布集群,今天给大家介绍一下如何在Eclipse环境中搭建Hadoop的管理和开发环境,话不多说,下面我们就进入正题吧! 1.JDK安装 ...

  5. Linux下搭建hadoop开发环境-超详细

    先决条件:开发机器需要联网 已安装java 已安装Desktop组 1.上传安装软件到linux上: 2.安装maven,用于管理项目依赖包:以hadoop用户安装apache-maven-3.0.5 ...

  6. Linux环境下搭建Android开发环境

    最近在折腾linux.因为咱是搞安卓开发的,所以少不了需要搭建Android开发环境,就此小记,希望能给向我一样的开发者一点帮助!开干! 1.安装JDK 下载JDK包,得到的是类似于jdk-8u65- ...

  7. windows环境下搭建ffmpeg开发环境

           ffmpeg是一个开源.跨平台的程序库,能够使用在windows.linux等平台下,本文将简单解说windows环境下ffmpeg开发环境搭建过程,本人使用的操作系统为windows ...

  8. windows环境下搭建Cocos2d-X开发环境

    最近终于有时间可心搞搞自己的东西了,呵呵,那就开始做个手机小游戏给孩子玩吧. 首先必须选定开发的框架,移动终端开源的游戏框架貌似不多,找来找去也就这个了,名字简单Cocos2d-X,是Cocos2d国 ...

  9. Linux环境下搭建php开发环境的操作步骤

    本文主要记载了通过编译方式进行软件/开发环境的安装过程,其他安装方式忽略! 文章背景: 因为php和Apache等采用编译安装方式进行安装,然而编译安装方式,需要c,c++编译环境, 通过apt方式安 ...

随机推荐

  1. Linux Shell的 & 、&& 、 ||

    Linux Shell的 & .&& . || 收藏 hanzhankang 发表于 3年前 阅读 18472 收藏 20 点赞 4 评论 0 开程序员的淘宝店!寻找开源技术服 ...

  2. org.in2bits.MyXls.XlsDocument 生成excel文件 ; 如果想读取模板再另外生成的话,试试 NPOI

    优点:不依赖Microsoft组件,在内存中操作excel,读写速度快.   缺点:无法读取模板,只能生成新的excel (我亲自测试是在读取完模板后,不能保存,也不能另存,并且其他人说这个读取还会有 ...

  3. TargetScan 数据库简介

    TargetScan 是一个miRNA 靶基因预测的网站, 包括了 人, 小鼠,果蝇 , 线虫, 斑马鱼 共5个物种的miRNA 靶基因结果, 人 : TargetScanHuman 小鼠 :Targ ...

  4. Java项目性能持续优化中……

     尽量使用StringBuilder和StringBuffer进行字符串连接, 参考链接: Java编程中“为了性能”尽量要做到的一些地方

  5. #AOS应用基础平台# 实现了在用户权限范围内自己定义的快捷菜单的导航展示

    from=501" style="color:rgb(255,131,115); padding:0px; margin:0px; font-family:微软雅黑,Verdana ...

  6. sp_replication_agent_checkup

    Transact-SQL 参考sp_replication_agent_checkup 检查每个分发数据库的复制代理程序,这些复制代理程序正在运行但在指定的心跳信号间隔内没有历史记录.此存储过程在分发 ...

  7. 调整iRedmail之Roundcube webmail服务不可不知的几件事

    iRedMail集成了roundcube webmail,极大的方便了安装维护工作,但是需求是千遍万化的,总有需要深入调整的地方.下面就是我调整roundcube时遇到的几点问题: 一.修改网页标题p ...

  8. 【Postgresql】use

    http://www.jianshu.com/p/0ed65e630fd0 http://www.linuxidc.com/Linux/2013-12/94354.htm tag 是一个Array字段 ...

  9. RancherOS(ROS)如何安装到硬盘? 并设置为用户自动登录到系统? -a rancher.autologin=tty1

    RancherOS 安装到硬盘,一般都是通过ssh_authorized_keys 方式. ------------------------------------------- 从第一次认识到这个方 ...

  10. 【转】Java中的多线程学习大总结

    多线程作为Java中很重要的一个知识点,在此还是有必要总结一下的. 一.线程的生命周期及五种基本状态 关于Java中线程的生命周期,首先看一下下面这张较为经典的图: 上图中基本上囊括了Java中多线程 ...