Hadoop利用FileSystem API 执行hadoop文件读写操作

因为HDFS不同于一般的文件系统,所以Hadoop提供了强大的FileSystem API来操作HDFS.

核心类是FSDataInputStream和FSDataOutputStream

读操作:

我们用FSDataInputStream来读取HDFS中的指定文件(第一个实验),另外我们还演示了这个类的定位文件位置的能力,然后从指定位置开始读取文件(第二个实验)。

代码如下:

/*
 */
package com.charles.hadoop.fs; 

import java.net.URI; 

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.io.IOUtils; 

/**
 *
 * Description: 查看Hadoop文件系统中的文件,利用hadoop FileSystem接口中的FSDataInputStream
 * FSDataInputStream还具有流定位的能力,可以从文件的任意位置开始读取
 *
 * @author charles.wang
 * @created May 26, 2012 12:28:49 PM
 *
 */
public class ReadFromHadoopFileSystem { 

    /**
     * @param args
     */
    public static void main(String[] args) throws Exception{
        // TODO Auto-generated method stub 

        //第一个参数传递进来的是hadoop文件系统中的某个文件的URI,以hdfs://ip 的theme开头
        String uri = args[0];
        //读取hadoop文件系统的配置
        Configuration conf = new Configuration();
        conf.set("hadoop.job.ugi", "hadoop-user,hadoop-user"); 

        //FileSystem是用户操作HDFS的核心类,它获得URI对应的HDFS文件系统
        FileSystem fs = FileSystem.get(URI.create(uri),conf);
        FSDataInputStream in = null;
        try{
            //实验一:输出全部文件内容
            System.out.println("实验一:输出全部文件内容");
            //让FileSystem打开一个uri对应的FSDataInputStream文件输入流,读取这个文件
            in = fs.open( new Path(uri) );
            //用Hadoop的IOUtils工具方法来让这个文件的指定字节复制到标准输出流上
            IOUtils.copyBytes(in, System.out,50,false);
            System.out.println(); 

            //实验二:展示FSDataInputStream文件输入流的流定位能力,用seek进行定位
            System.out.println("实验二:展示FSDataInputStream文件输入流的流定位能力,用seek进行定位"); 

            //假如我们要吧文件输出3次
            //第一次输入全部内容,第二次输入从第20个字符开始的内容,第3次输出从第40个字符开始的内容
            for (int i=1;i<=3;i++){
                in.seek(0+20*(i-1));
                System.out.println("流定位第 "+i+" 次:" );
                IOUtils.copyBytes(in, System.out,4096,false);
            }
        }finally{
            IOUtils.closeStream(in);
        } 

    } 

}

我们传入的命令行参数为我们要读的HDFS文件系统中某文件的URI:

hdfs://192.168.129.35:9000/user/hadoop-user/textfile.txt

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索hadoop
, 文件
, hadoop 视频点播
, ambari hadoop
, 定位
, import
, 实验
, fs.open方法
filesystem
hadoop filesystem、hadoop filesystem类、hadoop.fs.filesystem、filesystem api、hdfs filesystem api,以便于您获取更多的相关知识。

时间: 2024-11-02 08:31:34

Hadoop利用FileSystem API 执行hadoop文件读写操作的相关文章

python文件读写操作与linux shell变量命令交互执行的方法_python

本文实例讲述了python文件读写操作与linux shell变量命令交互执行的方法.分享给大家供大家参考.具体如下: python对文件的读写还是挺方便的,与linux shell的交互变量需要转换一下才能用,这比较头疼. 代码如下: 复制代码 代码如下: #coding=utf-8 #!/usr/bin/python import os import time #python执行linux命令 os.system(':>./aa.py') #人机交互输入 S = raw_input("

c语言文件读写操作的详细使用方法

c语言文件读写操作的详细使用方法 C文件操作遇到的状况 1.将一个文件读到另一个文件,用"(ch = getc(fp)) != EOF"来判断文件是否结束,如果 文件是全英文文本的话绝对没问题,新文件的大小和原文件大小一样:但是如果是一些有中 文字符或者是二进制文件,原文件没读完就结束. 2.将一个文件读到另一个文件,用"!feof(fp)"判断文件是否结束,不管原文件是什么类型 的都可以将原文件全部读完才结束,但是新文件的大小比原文件多了一个字节. 问题:在C里如

PHP文件读写操作之文件写入教程

在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发中还是时有使用,今天和大家分享如何利用PHP技术实现文件读写之文件写入操作教程,也算是对PHP文件读写操作的入门学习. 将数据写入文件的操作主要涉及三个步骤及部分文件操作函数如下: 1.打开文件(文件操作函数:fopen) 2.写入文件(文件操作函数:fwrite等) 3.关闭文件(文件操作函数:f

PHP文件读写操作之文件写入代码_php技巧

在PHP网站开发中,存储数据通常有两种方式,一种以文本文件方式存储,比如txt文件,一种是以数据库方式存储,比如Mysql,相对于数据库存储,文件存储并没有什么优势,但是文件读写操作在基本的PHP开发中还是时有使用,今天和大家分享如何利用PHP技术实现文件读写之文件写入操作教程,也算是对PHP文件读写操作的入门学习. 将数据写入文件的操作主要涉及三个步骤及部分文件操作函数如下: 1.打开文件(文件操作函数:fopen) 2.写入文件(文件操作函数:fwrite等) 3.关闭文件(文件操作函数:f

2009-11-13 08:37 实现文件读写操作的几种方法

实现文件读写操作的几种方法 下面为实现文件读取数据的代码: //以下为用C语言读取文件 FILE *pfile=fopen("2.txt","r");        char *pbuf;        fseek(pfile,0,SEEK_END);        long len=ftell(pfile);        pbuf=new char[len+1];        pbuf[len]=0;        rewind(pfile);       

c语言文件读写操作的问题

问题描述 c语言文件读写操作的问题 文件读写函数可以读写什么样类型的文件,有什么具体的实际的用途?它可以访问任意文件吗 解决方案 是的,可以访问任何文件,除非权限不足的文件无法访问.另外16bit环境下的C库函数(turbo c)不能访问2GB以上的大文件. 对于二进制文件,读取和解析是两个不同的概念.好比你只要视力没问题,你可以看任何语言写的书,但是显然外语的书你不一定看得懂. 你可以读取一个word文档文件,用C,得到一串字节,但是要想知道这个word文档中的文章.表格是什么,就复杂的多.

Android编程之在SD卡上进行文件读写操作实例详解_Android

本文实例讲述了Android编程之在SD卡上进行文件读写操作的方法.分享给大家供大家参考,具体如下: 很多知识只有真正理解掌握之后才能运用自如,举一反三.对Java中的文件操作和android系统SD卡里面的文件操作,你觉得有区别吗,显然没有本质区别,如果勉强说有,那也是不足为道滴,但我们在实际运用中却要注意如下几点,不然问题会缠上你. 1.首先想要对android系统SD卡里文件操作需要添加使用权限: android系统是不会让外来程序随意动自己内存的,如果没有许可证,不好意思,不准你动我地盘

求mfc大神解答关于文件读写操作问题

问题描述 求mfc大神解答关于文件读写操作问题 iter = g_listPath.begin();//list.begin()回指向第一个元素while (iter != g_listPath.end()){ CNode curpos = *iter; CString str; CString strFileName=""mytest.txt""; CFile file; SYSTEMTIME st; GetLocalTime(&st); str.Form

PHP文件读写操作之文件读取方法详解_php技巧

PHP文件读取操作相对于文件写入操作涉及更多的PHP文件操作函数,在代码实例中会详细介绍这些函数. 读取文本文件中存储数据的方式主要涉及的三个步骤及部分文件操作函数如下: 1.打开文件(文件操作函数:fopen) 2.文件数据读取(文件操作函数:fgets.file.readfile.feof等) 3.关闭文件(文件操作函数:fclose) 下面仍然以PHP文件读写操作代码实例讲解文件读取方法的具体应用,在实例中,通过调用不同的PHP文件读取操作函数读取文本文件中的数据,你可以加深PHP文件读取