精华内容
下载资源
问答
  • hadoop的分布式文件系统通常在Linux系统下运行,但是基于HDFS文件系统开发相关代码工作可以在windows系统下进行,但是要进行相关配置。(hadoop.dll/winutils.exe/msvcr100.dll 等)
  • import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; import java.net.URL; import org.apache.commons.io.IOUtils; import org.apache.hadoop.fs.F...
    package hadoop;
    
    import java.io.BufferedReader;
    import java.io.InputStream;
    import java.io.InputStreamReader;
    import java.net.URL;
    
    import org.apache.commons.io.IOUtils;
    import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
    
    public class Hellohdfs {
        
        private static final String PATH="hdfs://192.168.199.132:9000/test.txt";
    
        public static void main(String[] args) throws Exception {
            //设定开启HDFS协议
            URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
    
            //开启URL
            InputStream in =  new URL(PATH).openStream();
    
            //读取文件
            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
            String line = null;
            while((line =reader.readLine())!= null){
                System.out.println(line.toString());
            }
    
           
    //      org.apache.hadoop.io.IOUtils.copyBytes(in, System.out, 1024,true);
        }
    }
    
    

    此时会出现connected refused问题这时候按以下步骤修改

    把core-site.xml中的localhost 改为本机的ip地址

    然后修改/etc/hosts文件

    把localhost改为自己的ip地址

    并添加

    0.0.0.0  192.168.199.132(自己的ip地址)

    展开全文
  • 项目中需要把消息写到hdfs文件系统中去,所以看了一下如何通过java来操作hdfs文件,这里记录一下.不过效果不是很满意.需要优化的地方还很多,希望博客大神能指导一下.下面是基本操作工具类package testHbase2.common....

    项目中需要把消息写到hdfs文件系统中去,所以看了一下如何通过java来操作hdfs文件,这里记录一下.

    不过效果不是很满意.需要优化的地方还很多,希望博客大神能指导一下.


    下面是基本操作工具类

    package testHbase2.common.util;
    
    import java.io.IOException;
    import java.net.URI;
    
    import org.apache.hadoop.conf.Configuration;
    import org.apache.hadoop.fs.FSDataInputStream;
    import org.apache.hadoop.fs.FSDataOutputStream;
    import org.apache.hadoop.fs.FileSystem;
    import org.apache.hadoop.fs.Path;
    
    /**
     * 操作hdfs文件工具
     * 
     * @author yhy
     *
     */
    public class HDFSUtils {
      public static void appendHDFS(String hdfs, String data) {
        Configuration conf = new Configuration();
        conf.setBoolean("dfs.support.append", true);//有说法是添加了这个属性,就能再hdfs问价后面追加,但没有实现.
        FileSystem fs;
        try {
          fs = FileSystem.get(URI.create(hdfs), conf);
          Path path = new Path(hdfs);
          if(!fs.exists(path)){//判断文件是否存在
            FSDataOutputStream out = fs.create(path);
            out.write(data.getBytes("UTF-8"));
            out.close();
          }else{//看网上说了很多hdfs文件最好不要追加操作,能理解缘由,但没有想到更好的办法来实现业务需求,所以用了一个很笨的办法.就是先读取,再写入,但好像有点问题.
            FSDataInputStream in = fs.open(path);
            byte[] ioBuffer = new byte[10240];
            int readLen = in.read(ioBuffer);
            while (readLen != -1) {
              readLen = in.read(ioBuffer);
            }
            in.close();
            String str = new String(ioBuffer) + "\r\n"+data;
            FSDataOutputStream out = fs.create(path);
            out.write(str.getBytes("UTF-8"));
            out.close();
          }
          fs.close();
        } catch (IOException e) {
          e.printStackTrace();
        }
      }
    }
    

    下面是调用main方法

    package testHbase2.controller;
    
    import testHbase2.common.util.HDFSUtils;
    
    
    
    public class WsController {
    
      public static void main(String[] args) {//这里的9000端口是可以在hadoop安装环境下的配置文件hdfs-site.xml中配置的.(好像是这个文件.不是的话百度一下就出来了,很简单)
        HDFSUtils.appendHDFS("hdfs://192.168.32.128:9000/usr/local/hadoop/t.txt", "测试数据222");
      }
      
    }
    



    展开全文
  • 在搭建完hadoop大数据系统(CDH5.16.1)后,如何访问hdfs文件系统上的数据呢?那当然是通过构建maven项目 使用java api接口进行文件了。为此,特别进行了hdfs文件系统java api访问的整理。
  • java访问hdfs文件时碰到的一些问题

    千次阅读 2017-09-19 17:03:51
    1.java.io.IOException:No FileSystem for scheme:hdfs 解决:在pom.xml中漏添加了依赖 。下面3个依赖必不可少 org.apache.hadoop hadoop-common 2.7.1 org.apache.hadoop hadoop-hdfs 2.7.1 ...

    1.java.io.IOException:No FileSystem for scheme:hdfs
    解决:在pom.xml中漏添加了依赖 。下面3个依赖必不可少
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-common</artifactId>
    <version>2.7.1</version>
    </dependency>

    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-hdfs</artifactId>
    <version>2.7.1</version>
    </dependency>
    <dependency>
    <groupId>org.apache.hadoop</groupId>
    <artifactId>hadoop-client</artifactId>
    </dependency>


    2.Checksum error: file:/F:/test.txt at 0 exp: 1871533573 got: 2052517348
    解决:通过java程序将文件上传到hdfs上时,hadoop的api会通过fs.FSInputChecker判断需要上传的文件是否存在.crc校验文件。
    如果存在.crc校验文件,则会进行校验。如果校验失败,则不会上传该文件。.crc校验文件和需要上传的文件在同一目录下。
    解决办法为删除该.crc文件即可。

    3.Call From kingdee-PC/192.168.56.1 to 172.20.176.134:8020 failed on connection exception: java.net
    .ConnectException: Connection refused: no further information; For more details see:
    http://wiki.apache.org/hadoop/ConnectionRefused
    解决:打开hadoop的安装目录hadoop-2.7.3/etc/hadoop下的文件core-site.xml,看到如下内容:
    <property>
    <name>fs.defaultFS</name>
    <value>hdfs://主机名:9000</value>
    </property>
    因此需要在代码中hdfs的uri中添加对应的端口号9000.

    展开全文
  • 使用Java API操作HDFS文件系统 关键点: 1)创建Configuration 2)获取FileSystem 3)…就是你的HDFS API的操作 首先创建FileSystem 构造一个访问指定HDFS系统的客户端对象 第一个参数:HDFS的URI 第二个参数:...

    使用Java API操作HDFS文件系统

    关键点:

    • 1)创建Configuration
    • 2)获取FileSystem
    • 3)…就是你的HDFS API的操作

    首先创建FileSystem

        构造一个访问指定HDFS系统的客户端对象
        第一个参数:HDFS的URI
        第二个参数:客户端指定的配置参数
        第三个参数:客户端的身份,说白了就是用户名
    

    FileSystemfileSystem = FileSystem.get(new URI(“hdfs://hadoop000:8020”), new configuration, “hadoop”);

    1.创建HDFS文件夹

    @Test
        public void mkdir() throws Exception {
            fileSystem.mkdirs(new Path("/hdfsapi/test"));
        }
    

    2.查看HDFS内容

    import org.apache.hadoop.io.IOUtils;

    @Test
        public void text()throws Exception {
            FSDataInputStream in = fileSystem.open(new Path("/cdh_version.properties"));
            IOUtils.copyBytes(in, System.out, 1024);
        }
    

    3.创建文件

     public void create()throws Exception {
    	        FSDataOutputStream out = fileSystem.create(new Path("/hdfsapi/test/b.txt"));
    	        out.writeUTF("hello DM replication 1");
    	        out.flush();
    	        out.close();
        }
    

    4.测试文件名更改

     @Test
        public void rename() throws Exception {
            Path oldPath = new Path("/hdfsapi/test/b.txt");
            Path newPath = new Path("/hdfsapi/test/c.txt");
            boolean result = fileSystem.rename(oldPath, newPath);
            System.out.println(result);
    
        }
    

    5.拷贝本地文件到HDFS文件系统(put)

    @Test
        public void copyFromLocalFile() throws Exception {
            Path src = new Path("/Users/rocky/data/hello.txt");
            Path dst = new Path("/hdfsapi/test/");
            fileSystem.copyFromLocalFile(src,dst);
        }
    

    6.拷贝HDFS文件到本地(get)

    @Test
        public void copyToLocalFile() throws Exception {
            Path src = new Path("/hdfsapi/test/hello.txt");
            Path dst = new Path("/Users/rocky/tmp/software");
            fileSystem.copyToLocalFile(src, dst);
        }
    

    7.查看目标文件夹下的所有文件

    @Test
        public void listFiles() throws Exception {
            FileStatus[] statuses = fileSystem.listStatus(new Path("/hdfsapi/test"));
    
            for(FileStatus file : statuses) {
                String isDir = file.isDirectory() ? "文件夹" : "文件";
                String permission = file.getPermission().toString();
                short replication = file.getReplication();
                long length = file.getLen();
                String path = file.getPath().toString();
    
    
                System.out.println(isDir + "\t" + permission
                        + "\t" + replication + "\t" + length
                        + "\t" + path
                );
            }
    
        }
    

    8.递归查看目标文件夹下的所有文件

    @Test
        public void listFilesRecursive() throws Exception {
    
            RemoteIterator<LocatedFileStatus> files = fileSystem.listFiles(new Path("/hdfsapi/test"), true);
    
            while (files.hasNext()) {
                LocatedFileStatus file = files.next();
                String isDir = file.isDirectory() ? "文件夹" : "文件";
                String permission = file.getPermission().toString();
                short replication = file.getReplication();
                long length = file.getLen();
                String path = file.getPath().toString();
    
    
                System.out.println(isDir + "\t" + permission
                        + "\t" + replication + "\t" + length
                        + "\t" + path
                );
            }
        }
    

    9.查看文件块信息

    @Test
        public void getFileBlockLocations() throws Exception {
    
            FileStatus fileStatus = fileSystem.getFileStatus(new Path("/hdfsapi/test/jdk.tgz"));
            BlockLocation[] blocks = fileSystem.getFileBlockLocations(fileStatus,0,fileStatus.getLen());
    
            for(BlockLocation block : blocks) {
    
                for(String name: block.getNames()) {
                    System.out.println(name +" : " + block.getOffset() + " : " + block.getLength() + " : " + block.getHosts());
                }
            }
        }
    

    10删除文件

    @Test
        public void delete() throws Exception {
            boolean result = fileSystem.delete(new Path("/hdfsapi/test/jdk.tgz"), true);
            System.out.println(result);
        }
    
    展开全文
  • Java远程操作HDFS文件系统

    千次阅读 2019-05-30 23:08:30
    目标:通过Java编程实现远程HDFS文件系统的增、删、改、查,并且解释原理。 一、准备工作 集群:搭建Hadoop集群,并且启动HDFS。详细过程可以参考:Hadoop-2.5.1安装步骤及异常处理 二、创建Maven工程 选择创建工程...
  • JavaAPI操作hdfs文件系统

    千次阅读 2018-10-16 10:04:53
    这四个文件出现的原因就是由于我之前执行了MapReduce程序,产生的日志这个日志是在hdfs文件系统的根目录下的tmp文件夹里面的,这个文件夹在网页端是没有权限访问的,得在Linux系统上访问hdfs文件系统 /** * ...
  • 1. 会在Linux环境下编写读写HDFS文件的代码; 2. 会使用jar命令打包代码; 3. 会在master服务器上运行HDFS读写程序; 4. 会在Windows上安装Eclipse Hadoop插件; 5. 会在Eclipse环境编写读写HDFS文件的代码...
  • 阐述了如何利用利用javaAPI访问HDFS文件
  • 一 LIB HDFS接口简介 hadoop filesystem apis是JAVA ...但HDFS提供了基于C调用接口LIBHDFS,为C语言访问HDFS提供了很大的便利 头文件:hdfs.h --- ${HADOOP_HOME}/include 库文件:libhdfs.so --{HADOOP_HOME...
  • 前提:Linux系统已部署完成Hadoop集群并已启动,在Windows系统可以通过IP:50070查看HDFS文件系统配置过程:1. Windows系统下安装JDK并配置环境变量2. Windows系统配置Hadoop环境变量配置HADOOP_HOME 配置Path 配置...
  • Hadoop的能提供高吞吐量的数据访问,是集群式服务器的上的数据操作利器,这里就来为大家分享Java访问Hadoop分布式文件系统HDFS的配置说明:
  • Java 访问 HDFS操作

    千次阅读 2016-07-26 23:25:57
    Java 可以通过API访问HDFS, 主要用到几个类 下面是代码 package com.shidai.hadoop.hdfs01; import java.io.File; import java.io.IOException; import java.net.URI; import java.text.ParseException; import ...
  • 关闭系统防火墙 查看防火墙状态 service iptables status 永久关闭防火墙 chkconfig iptables off 临时关闭防火墙 service iptables stop 配置:hadoop-env.sh 将JAVA_HOME写成绝对路径 export JAVA_HOME=/opt/...
  • java访问HDFS笔记

    千次阅读 2019-04-22 00:10:32
    对hadoop中hdfs有个初步认识,接下来开始学习如何利用JavaAPI访问,实现读写等简单操作。之前是利用hadoop自带的shell命令对文件进行读写。   由于是本地练习,这次采用的是伪分布的部署,在部署完成后遇到1个问题...
  • java 读取hdfs文件,注意事项

    千次阅读 2019-06-18 14:06:46
    昨天在写java读取hdfs文件的时候一直报错 java.io.IOException: No FileSystem for scheme: hdfs ,这个问题纠结了很长时间(尝试添加core-site.xml,hdfs-site.xml,map-site.xml.等等)都尝试了,还是失败,最终...
  • JAVA 进行hdfs 文件操作

    千次阅读 2018-05-07 15:49:21
    1 文件上传2 文件下载3 新建文件夹4查看文件 “listFiles“列出的是hdfs上所有文件的路径,不包括文件夹。根据你的设置,支持递归查找。 ”listStatus“列出的是所有的文件和文件夹,不支持递归查找。如许递归,...
  • 访问Hadoop的HDFS文件系统Java实现

    千次阅读 2013-12-15 17:15:10
    Hadoop版本  Hadoop-0.19.1-core.jar 1、创建HDFS对象 Configuration config = new ...config.set("fs.default.name","hdfs://127.0.0.1:9000/"); FileSystem dfs = FileSystem.get(config); 2、新建目录
  • 先把上节未完成的部分补全,再剖析一下HDFS读写文件的内部原理 列举文件 FileSystem(org.apache.hadoop.fs.FileSystem)的listStatus()方法可以列出一个目录下的内容。 public FileStatus[] listStatus(Path...
  • Java访问kerberos认证的HDFS文件

    千次阅读 2020-01-15 15:12:06
    具体HADOOP的访问HDFS使用Kerberos的作用和原理请自己查阅相关文档。 之前做项目时第一次使用Kbs访问HDFS,当时不了解,翻阅资料搞了好久,也入了不少坑,现分享出来,方便大家。 下面代码在项目亲测过,可用 代码...
  • java操作hdfs文件、文件夹

    万次阅读 2016-10-01 14:55:39
    代码参考网上其他博文,在其基础上作部分优化。...java工程需添加hadoop根目录下/share/hadoop/下所有jar包到编译路径中。 工具类HdfsUtils.java,及测试用例代码如下: HdfsUtils.java package com.xy6
  • 原因:文件夹和文件名都是存放在 NameNode 上的,本地可以通过公网访问 NameNode,所以创建文件夹和文件都可以,但是当写数据的时候,NameNode 和DataNode 是通过内网通信的,NameNode 会返回给 DataNode 的内网 IP...
  • HDFS文件系统

    千次阅读 2019-01-18 16:31:59
    前面Hadoop的分布式环境已经搭建完成了,接下来说说如何使用Hadoop的HDFS文件系统: HDFS(Hadoop Distributed File System)Hadoop 分布式文件系统: 基于流数据模式访问  就是可以字节序列化的数据,java.io....
  • Java 读写 hdfs文件或者目录

    千次阅读 2018-11-22 13:24:31
    1.读取单个文件     [java] view plain copy Date date = DateUtil.getSpecifiedDayBefore();  String yesterday = DateUtil.dateToStr(date, "yyyy-MM-dd");  String path = "...
  • window 系统 linux 系统 hdfs 文件系统 相互转移 eclipse 安装插件成功后: 会出现如下 可以user-》右键 upload window 本地一个文件, 但是像这种要执行的jar 包 直接在hdfs 文件系统上 使用 hadoop jar...
  • java代码取访问hdfs的时候,默认不是以hdfs系统所属用户的身份访问的,要想以主用户身份访问,有两种方式。  1、  配置连接hadoop的时候,加入如下代码。  //客户端用户与文件所属者用户 名称是否一样  ...
  • Hadoop HDFS (3) JAVA访问HDFS

    千次阅读 2014-09-28 23:34:19
    虽然我们这里主要是针对HDFS,但是我们还是应该让我们的代码只使用抽象类FileSystem,这样我们的代码就可以跟任何一个Hadoop的文件系统交互了。在写测试代码时,我们可以用本地文件系统测试,部署时使用HDFS,只需...
  • 本篇文章主要介绍在idea下使用java API操作HDFS分布式文件系统,分别用配置文件方式和直接使用URL的方式演示   一、通过URL的方式操作HDFS分布式文件系统 ①、代码 package com.hdfs; import org.apache....

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 54,531
精华内容 21,812
关键字:

java访问hdfs文件系统

java 订阅