- 浏览: 246004 次
-
文章分类
最新评论
引自http://blog.csdn.net/lmc_wy/article/details/6060746
Hadoop HDFS 编程
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
发表评论
-
大数据方面的文章
2013-07-29 17:01 868http://bbs.e-works.net.cn/forum ... -
Apache Pig中文教程(进阶)
2013-05-13 17:18 1768引自http://www.codelast.com/?p=42 ... -
hadoop视频
2013-05-10 09:35 804http://pan.baidu.com/share/li ... -
Apache Pig的一些基础概念及用法总结(1
2013-05-08 16:01 1107引自http://www.codelast.com/?p=3 ... -
hadoop动态增加删除节点
2013-04-28 09:54 1192在master的conf/hdfs-site.xml中加入 ... -
hadoop 比较好的博客
2013-04-27 17:35 733http://dongxicheng.org 好的书 h ... -
Hadoop错误一的解决猜测
2013-04-26 10:29 844如果出现:java.lang.NullPointerExc ... -
Reduce作业运行时错误:Too many fetch-failures
2013-04-24 21:19 5794root@ubuntu:/usr/local/hadoop# ... -
MultipleOutputFormat和MultipleOutputs
2013-01-04 17:26 991引自http://www.cnblogs.com/liangz ... -
hadoop各种输入方法(InputFormat)汇总
2013-01-04 17:02 1425引自http://www.blogjava.net/shenh ... -
Hadoop运行报错: java.lang.ClassNotFoundException解决方法
2012-12-27 16:44 12812在创建自定义的Mapper时候,编译正确,但上传到集群执 ... -
hadoop-1.1.0 rpm + centos 6.3 64 + JDK7 搭建全分布式集群的方法
2012-12-22 20:45 1257引自 http://blog.csdn.net/ireland ... -
HADOOP中DATANODE无法启动
2012-12-22 20:43 963摘要:该文档解决了多次格式化文件系统后,datanode ... -
HDFS之SequenceFile和MapFile
2012-12-17 11:37 956引自http://blog.csdn.net/javam ... -
Hadoop -【IO专题-序列化机制】
2012-12-17 10:32 1096引自http://blog.sina.com.cn/s/ ... -
hadoop问题Type mismatch in value from map解决方法
2012-12-13 10:49 874hadoop问题Type mismatch in ... -
hadoop hbase svn site
2012-12-13 10:49 1001hadoop hbase svn site ... -
hadoop项目svn地址
2012-12-11 18:11 1060http://svn.apache.org/repos/asf ... -
在Eclipse中导入hadoop
2012-12-11 18:03 12430. 准备 (1) 需要有gcc、autoconf、 ... -
Hadoop实例WordCount程序一步一步运行
2012-12-11 16:32 1010虽说现在用Eclipse下开发Hadoop程序很方便了,但是命 ...
相关推荐
在Java编程环境中,结合Hadoop HDFS(Hadoop Distributed File System)进行大数据处理是一种常见的实践。本项目聚焦于从HDFS读取数据,执行GROUP BY操作,并将统计结果以条形图的形式展示出来,提供了直观的数据...
首先,Java是编写应用程序的通用编程语言,它提供了丰富的库和框架来支持各种任务,包括与Spring框架的集成和对Hadoop HDFS的访问。 Spring是一个开源的应用程序框架,它主要用于简化Java企业级应用的开发。它提供...
而Python作为一种灵活易用的编程语言,常常被用来与Hadoop HDFS进行交互,实现数据的读取、写入和下载操作。本篇文章将深入探讨如何使用Python来操作Hadoop HDFS。 首先,我们需要一个Python库,如`hdfs`或`pyarrow...
### 大数据、Hadoop与HDFS详解 随着信息技术的快速发展和互联网的普及,数据量呈爆炸性增长态势。传统的数据处理工具和技术已无法满足如此大规模数据的存储、管理和分析需求。为此,Apache Hadoop应运而生,它提供...
该项目是一个大数据课程的期末项目,主要利用了Spark、Hadoop HDFS和MongoDB等技术,通过Scala编程语言来实现电影推荐系统。这个系统是基于大数据处理的,因此涉及到的知识点非常广泛,涵盖了分布式计算、数据存储、...
### 大数据实验二-HDFS编程实践 #### 实验内容概览 本次实验的主要目标是通过对HDFS(Hadoop Distributed File System)的操作实践,加深学生对HDFS在Hadoop架构中的作用及其基本操作的理解。实验内容包括两大部分...
高灵活性:Hadoop 支持多种编程语言,包括 Java、Python、Scala 等,满足不同用户的需求。 Hadoop HDFS 架构概述推荐系统框架图 Hadoop 是一个分布式系统基础架构,解决海量数据的存储和分析计算问题。 Hadoop 的...
该套源码是个人学习Hadoop HDFS和MapReduce技术的实践案例集合,采用Java语言编写,包含45个文件,涵盖34个Java源文件、4个XML配置文件、3个偏好设置文件以及1个Git忽略文件等。内容涵盖HDFS的JAVA API操作,如文件...
在大数据处理领域,Hadoop是不可或缺的开源框架,它的核心组件包括HDFS(Hadoop Distributed File System)和MapReduce。本篇文章将详细讲解Hadoop HDFS文件操作、MapReduce(MR)示例以及如何实现TopN问题。 首先...
在Windows平台上,利用...这个过程中涉及到了Hadoop的MapReduce编程模型、中文分词库的使用以及数据的分布式处理和结果的聚合。通过这个实例,开发者可以进一步理解大数据处理的流程,为更复杂的文本分析任务打下基础。
接下来,Hadoop是HDFS的基础框架,它不仅包括HDFS,还包括MapReduce编程模型,用于并行处理数据。MapReduce将大型任务分解为小的Map任务和Reduce任务,在集群中的不同节点上并行执行,极大地提高了处理效率。开发者...
本文将深入探讨“Hadoop高级编程——构建与实现大数据解决方案”这一主题,旨在帮助读者掌握如何利用Hadoop构建实际的大数据项目。 首先,我们要理解Hadoop的基础架构。Hadoop由两个主要组件构成:Hadoop ...
综上所述,Hadoop HDFS应用的知识点涵盖了HDFS的分布式文件系统概念、支持的多种文件系统类型及URI模式、权限及用户体系、命令行操作接口以及JAVA编程接口等。掌握这些知识点对于实现高效的大数据处理和分析具有重要...
Hadoop是一个开源的分布式计算框架,它允许用户通过简单易用的编程模型处理大型数据集,而HDFS(Hadoop Distributed File System)是其核心组件,用于存储和处理大数据。 首先,Hadoop是一个由Apache软件基金会开发...
四、HDFS编程接口 除了命令行工具,还可以通过Hadoop的Java API在程序中操作HDFS。例如,`FileSystem`类提供了与HDFS交互的方法,如打开文件、写入数据、读取文件等。以下是一个简单的示例: ```java import org....
文档详细的讲述了Hadoop中HDFS文件操作命令和HDFS编程
实验内容包括编程实现HDFS操作以及使用Hadoop的Shell命令来完成相同任务。 首先,我们需要理解HDFS的基本操作,如上传文件、追加内容和覆盖文件。这些操作在大数据处理场景中至关重要,因为它们允许我们高效地管理...
这些JAR包包含了Hadoop的相关API和实现,使得用户可以通过编程方式操作HDFS。 标题"hadop之hdfs中所依赖jar"指出的关键点是,为了成功地进行HDFS操作,必须确保正确地引入了必要的JAR包。这里提到的"Hadoop之上传...
本主题将深入探讨“Hadoop高级编程之构建与实现大数据解决方案”,旨在为开发者提供全面而深入的理解,如何利用Hadoop高效地处理海量数据。 首先,Hadoop是由Apache软件基金会开发的一个开源框架,主要用于存储和...
实验项目名为“实战 HDFS”,旨在深入理解和熟练运用Hadoop分布式文件系统(HDFS)。HDFS是Apache Hadoop的核心组件,它为大数据处理提供高容错性、高吞吐量的存储解决方案。实验目的是通过一系列操作,让学生全面...