`

Hadoop HDFS 编程

 
阅读更多

引自http://blog.csdn.net/lmc_wy/article/details/6060746

Hadoop HDFS 编程

 2102人阅读 评论(0) 收藏 举报

 

HDFS是一个分布式文件系统,然而对于程序员来说,HDFS就是一个普通文件系统,Hadoop进行的底层封装,程序员按照相应的API来对HDFS上的文件操作,和对本地磁盘文件操作没有太多区别。但是最初接触时可能还是会碰到这样那样的问题。

 

例如:获取FileSystem实例时会出现

java.lang.NullPointerException
    at org.apache.hadoop.conf.Configuration.get(Configuration.java:382)
    at org.apache.hadoop.conf.Configuration.getBoolean(Configuration.java:570)
    at org.apache.hadoop.fs.FileSystem.get(FileSystem.java:192)
    at hadoop.test.URLCat.copyFileToAnotherFile(URLCat.java:38) //这个是我写的一个方法,报错了
    at hadoop.test.URLCat.main(URLCat.java:83)

 

代码:

package hadoop.test;

import java.io.BufferedInputStream;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.MalformedURLException;
import java.net.URI;
import java.net.URL;

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.conf.Configured;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.hdfs.DistributedFileSystem;
import org.apache.hadoop.io.IOUtils;
import org.apache.hadoop.util.Progressable;

public class URLCat extends Configured {
    
    /×static{
        Configuration.addDefaultResource("hdfs-default.xml");
        Configuration.addDefaultResource("hdfs-site.xml");
        Configuration.addDefaultResource("mapred-default.xml");
        Configuration.addDefaultResource("mapred-site.xml");
    }
 
×/没有这个static块时就会报上面对错误


    public  void copyFileToAnotherFile(String[] args)
    {
        InputStream in = null;
        OutputStream out = null;
        try {
            String sourceFile = args[0];
            String targetFile = args[1];
            in = new BufferedInputStream(new FileInputStream(sourceFile));
            
            Configuration conf = new Configuration();
            System.out.println(conf);
            System.out.println(URI.create(targetFile)==null);
            System.out.println(conf==null);
            System.out.println(FileSystem.get(URI.create(targetFile),conf)==null);
            
            FileSystem fs = DistributedFileSystem.get(URI.create(targetFile),conf);
            System.out.println(fs);
            out = fs.create(new Path(targetFile),new Progressable(){
                public void progress(){System.out.print(".");}
            });
            IOUtils.copyBytes(in, out, 4096,true);
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }finally
        {
            IOUtils.closeStream(in);
            IOUtils.closeStream(out);
        }
    }
    
    static {
        URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());
    }

    public static void displayFile(String[] args)
    {
         InputStream in = null;
            try {
                in = new URL(args[0]).openStream();
                IOUtils.copyBytes(in, System.out, 4096,false);
            } catch (MalformedURLException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }finally
            {
                IOUtils.closeStream(in);
            }
    }
    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        new URLCat().copyFileToAnotherFile(args);
        //URLCat.displayFile(args);
        //
    }

}

 

原因:Configuration似乎只会加载基本的两个文件,所以需要将其它配置文件手动导入

 Configuration类:   defaultResources.add("hadoop-default.xml");
                                finalResources.add("hadoop-site.xml");

 

 

下面把整个代码到执行过程叙述一下,希望对刚接触hadoop编程的人有帮助:

 

1.需要配置好java环境主要是JAVA_HOME和CLASS_PATH,两个必须要设置

export JAVA_HOME=/usr/lib/jvm/java-6-sun
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:/usr/lib/jvm/java-6-sun/lib

 

2在本地编写代码,当然可以用Eclipse工具

 

3设置HADOOP_CLASSPATH

 HADOOP_CLASSPATH指向class文件的根目录,例如包hadoop.test的根目录上/home/hadoop/EclipseWorkspace/TestProject/bin

 

4执行命令hadoop hadoop.test.URLCat /home/hadoop/Documents/test.txt hdfs://192.186.54.1:8020/user/hadoop/test.txt

又出错了:java.lang.IllegalArgumentException: Wrong FS: hdfs://192.186.54.1:8020/user/hadoop/test.txt, expected: hdfs://hadoop1
    at org.apache.hadoop.fs.FileSystem.checkPath(FileSystem.java:310)
    at org.apache.hadoop.hdfs.DistributedFileSystem.checkPath(DistributedFileSystem.java:99)
    at org.apache.hadoop.hdfs.DistributedFileSystem.getPathName(DistributedFileSystem.java:155)
    at org.apache.hadoop.hdfs.DistributedFileSystem.create(DistributedFileSystem.java:195)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:484)
    at org.apache.hadoop.fs.FileSystem.create(FileSystem.java:384)
    at hadoop.test.URLCat.copyFileToAnotherFile(URLCat.java:46)
    at hadoop.test.URLCat.main(URLCat.java:86)
 原因,命令hdfs不能说IP,需要hostname,执行以下命令

 

 hadoop hadoop.test.URLCat /home/hadoop/Documents/test.txt hdfs://hadoop1:8020/user/hadoop/test.txt

 一切OK。

 

我的配置文件是ip,而不是hostname,因为没有DNS server帮助解析,但是执行命令仍然得用hostname。

 

综上:2个地方需要注意。Configuration和hdfs://hostname:port/user/pathtofile/file

分享到:
评论

相关推荐

    java 从hadoop hdfs读取文件 进行groupby并显示为条形图

    在Java编程环境中,结合Hadoop HDFS(Hadoop Distributed File System)进行大数据处理是一种常见的实践。本项目聚焦于从HDFS读取数据,执行GROUP BY操作,并将统计结果以条形图的形式展示出来,提供了直观的数据...

    java整合spring和hadoop HDFS全部jar

    首先,Java是编写应用程序的通用编程语言,它提供了丰富的库和框架来支持各种任务,包括与Spring框架的集成和对Hadoop HDFS的访问。 Spring是一个开源的应用程序框架,它主要用于简化Java企业级应用的开发。它提供...

    python 操作 Hadoop hdfs

    而Python作为一种灵活易用的编程语言,常常被用来与Hadoop HDFS进行交互,实现数据的读取、写入和下载操作。本篇文章将深入探讨如何使用Python来操作Hadoop HDFS。 首先,我们需要一个Python库,如`hdfs`或`pyarrow...

    大数据--Hadoop HDFS

    ### 大数据、Hadoop与HDFS详解 随着信息技术的快速发展和互联网的普及,数据量呈爆炸性增长态势。传统的数据处理工具和技术已无法满足如此大规模数据的存储、管理和分析需求。为此,Apache Hadoop应运而生,它提供...

    大数据课程的期末项目,基于spark、hadoop hdfs、mongodb,使用scala,进行电影推荐.zip

    该项目是一个大数据课程的期末项目,主要利用了Spark、Hadoop HDFS和MongoDB等技术,通过Scala编程语言来实现电影推荐系统。这个系统是基于大数据处理的,因此涉及到的知识点非常广泛,涵盖了分布式计算、数据存储、...

    大数据实验二-HDFS编程实践

    ### 大数据实验二-HDFS编程实践 #### 实验内容概览 本次实验的主要目标是通过对HDFS(Hadoop Distributed File System)的操作实践,加深学生对HDFS在Hadoop架构中的作用及其基本操作的理解。实验内容包括两大部分...

    HadoopHDFS架构概述推荐系统框架图

    高灵活性:Hadoop 支持多种编程语言,包括 Java、Python、Scala 等,满足不同用户的需求。 Hadoop HDFS 架构概述推荐系统框架图 Hadoop 是一个分布式系统基础架构,解决海量数据的存储和分析计算问题。 Hadoop 的...

    基于Java的Hadoop HDFS和MapReduce实践案例设计源码

    该套源码是个人学习Hadoop HDFS和MapReduce技术的实践案例集合,采用Java语言编写,包含45个文件,涵盖34个Java源文件、4个XML配置文件、3个偏好设置文件以及1个Git忽略文件等。内容涵盖HDFS的JAVA API操作,如文件...

    Hadoop hdfs文件操作,mr demo,topN demo

    在大数据处理领域,Hadoop是不可或缺的开源框架,它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。本篇文章将详细讲解Hadoop HDFS文件操作、MapReduce(MR)示例以及如何实现TopN问题。 首先...

    windows平台使用hadoop hdfs文件进行中文分词的示例代码

    在Windows平台上,利用...这个过程中涉及到了Hadoop的MapReduce编程模型、中文分词库的使用以及数据的分布式处理和结果的聚合。通过这个实例,开发者可以进一步理解大数据处理的流程,为更复杂的文本分析任务打下基础。

    大数据 hdfs hadoop hbase jmeter

    接下来,Hadoop是HDFS的基础框架,它不仅包括HDFS,还包括MapReduce编程模型,用于并行处理数据。MapReduce将大型任务分解为小的Map任务和Reduce任务,在集群中的不同节点上并行执行,极大地提高了处理效率。开发者...

    Hadoop高级编程- 构建与实现大数据解决方案

    本文将深入探讨“Hadoop高级编程——构建与实现大数据解决方案”这一主题,旨在帮助读者掌握如何利用Hadoop构建实际的大数据项目。 首先,我们要理解Hadoop的基础架构。Hadoop由两个主要组件构成:Hadoop ...

    Hadoop HDFS应用

    综上所述,Hadoop HDFS应用的知识点涵盖了HDFS的分布式文件系统概念、支持的多种文件系统类型及URI模式、权限及用户体系、命令行操作接口以及JAVA编程接口等。掌握这些知识点对于实现高效的大数据处理和分析具有重要...

    Hadoop-HDFS-实践教程

    Hadoop是一个开源的分布式计算框架,它允许用户通过简单易用的编程模型处理大型数据集,而HDFS(Hadoop Distributed File System)是其核心组件,用于存储和处理大数据。 首先,Hadoop是一个由Apache软件基金会开发...

    HDFS.zip_Hadoop 平台_hadoop_hdfs

    四、HDFS编程接口 除了命令行工具,还可以通过Hadoop的Java API在程序中操作HDFS。例如,`FileSystem`类提供了与HDFS交互的方法,如打开文件、写入数据、读取文件等。以下是一个简单的示例: ```java import org....

    HDFS文件操作命令与HDFS编程

    文档详细的讲述了Hadoop中HDFS文件操作命令和HDFS编程

    数据科学导论实验报告 实验2:熟悉常用的HDFS操作

    实验内容包括编程实现HDFS操作以及使用Hadoop的Shell命令来完成相同任务。 首先,我们需要理解HDFS的基本操作,如上传文件、追加内容和覆盖文件。这些操作在大数据处理场景中至关重要,因为它们允许我们高效地管理...

    hadoop之hdfs中所依赖jar

    这些JAR包包含了Hadoop的相关API和实现,使得用户可以通过编程方式操作HDFS。 标题"hadop之hdfs中所依赖jar"指出的关键点是,为了成功地进行HDFS操作,必须确保正确地引入了必要的JAR包。这里提到的"Hadoop之上传...

    Hadoop高级编程之构建与实现大数据解决方案

    本主题将深入探讨“Hadoop高级编程之构建与实现大数据解决方案”,旨在为开发者提供全面而深入的理解,如何利用Hadoop高效地处理海量数据。 首先,Hadoop是由Apache软件基金会开发的一个开源框架,主要用于存储和...

    实验项目 实战 HDFS 实验报告

    实验项目名为“实战 HDFS”,旨在深入理解和熟练运用Hadoop分布式文件系统(HDFS)。HDFS是Apache Hadoop的核心组件,它为大数据处理提供高容错性、高吞吐量的存储解决方案。实验目的是通过一系列操作,让学生全面...

Global site tag (gtag.js) - Google Analytics