Hadoop API 学习笔记

2019-03-28 13:45|来源: 网络

一、从Hadoop URL 中读取数据
使用java.net.URL对象打开一个数据流
InputStream in = new URL("hdfs://host/path").openStream();

二、FileSystem 对象
取得FileSystem实例有两种静态方法:
(1)public static FileSystem get(Configuration conf)
//Configuration对象封装了一个客户端或服务器的配置,这是用类路径读取而来的
//返回默认文件系统(在conf/core-site.xml中设置,如果没有设置过,则是默认的本地文件系统)
(2)public static FileSystem get (URI uri,Configuration conf)
//参数URI指定URI方案及决定所用文件系统的权限,如果没有指定方案,则退回默认的文件系统

三、open()方法
public FSDataInputStream open(path f)
//该方法默认使用4kb的缓冲大小
public abstract FSDataInputStream open(Path f, int bufferSize)
//第二个参数指定缓冲大小
//open方法实际返回的是一个FSDataInputStream,这个类是java.io.DataInputStream的一个子类,支持随机访问,能从流中任意位置对其数据。

四、FSDataInputStream类实现了Seekable接口
Seekable接口允许在文件中定位seek()方法,提供一个查询方法,用于查询当前位置相对于文件开始处的偏移量getPos()。
seekToNewSource(long targetPos)在应用程序中并不常用,此方法用来切换到数据的另一个副本并在新的副本中找寻targetPos指定的位置。HDFS内部就采用这样的方法在数据节点故障时为客户端提供可靠的数据输入流。

五、FSDataInputStream类实现了PositionedReadable接口
public int read(long position,byte[] buffer,int offset,int length)
//read()方法指定position读取指定长度的字节放入缓冲区buffer的指定偏移量offset,返回值是读到的字节数。
public int readFully(long position,byte[] buffer,int offset,int length)
//该方法读出字节length指定的数据到buffer。
public int readFully(long position,byte[] buffer)
//只接受buffer字节数组的版本中,再读取buffer.length字节。
所有这些方法会保留文件当前位置并且是线程安全的,因此它们提供了在读取文件(可能是元数据)的主要部分时访问其他部分的便利方法。
注意,seek()是相对高开销的操作,需要慎重使用。

六、创建文件的方法
(1)public FSDataOutputStream create(Path f)
//该方法如果没有文件,就会自动创建文件路径,所以最好用exists()检查父目录是否存在。
hadoop.util中有个Progressable的接口中,有个progress()方法,可以被告知数据写入数据节点的进度。
public FSDataOutputStream append(Path f)
//该append()方法允许一个写入者打开已有文件并在其末尾写入数据。HDFS支持,但S3不支持。

七、创建目录
public boolean mkdirs(Path f)

八、文件元数据:Filestatus
(1)FileStatus类封装了文件系统镇南关文件的目录和元数据,包括文件长度、块大小、副本、修改时间、所有者以及许可信息。
(2)getFileStatus()提供了一个获取一个文件或目录的状态对象的方法。大家可以通过看源代码看看它的信息参数。
(3)listSatus()能够列出目录的内容。
(4)globStatus(Path pathPattern,PathFilter filter)使用通配符在一个表达式中核对多个文件。
(5)PathFilter对象 ,通配格式不是总能描述我们想要访问的文件集合。listStatus()和globStatus()方法提供了可选PathFilter对象,使我们可以通过编程方式控制匹配。
(6)delete(Path f,boolean recursive)永久性删除文件或目录。

更多Hadoop相关信息见Hadoop 专题页面 http://www.linuxidc.com/topicnews.aspx?tid=13

相关问答

更多
  • 要有java语言基础,和 linux系统命令基础。 hadoop是运行的系统要求是 linux。 hadoop 用 java写的分布式 ,处理大数据的框架。 只要思想是 分组合并 思想 分组:比如 有一个大型数据,那么他就会将这个数据按照算法分成多份,每份存储在 奴隶主机上,并且在奴隶主机上进行计算。 合并:将每个机器上的计算结果合并起来 再在一台机器上计算,得到最终结果。 就是mapreduce 算法。
  • 一楼很给力啊 关于看英文文档四级就够了 不过也不是说英语不好就不能学 只要有毅力就OK 。 最好是有Java基础,因为hadoop是用java编写的,所以懂java能够帮助理解hadoop原理,当然Hadoop也提供了其他语言的api。 不过看楼主是从事javaee的,所以完全没问题,至于Linux只要会基本的cd,ll就差不多了,会安装文件,也就是解压软件,不过不会也没关系,网上多了去了。 其实最主要就是能够坚持学下去,因为这东西不是很简单,资料也不是太多,学起来有一定难度。
  • 我不是高手,但我可以告诉你我怎么学习。①选择一个Hadoop的版本,然后阅读文档了解Hadoop:What's Hadoop, Why Hadoop exists;②安装Hadoop,三种方式都试下;③在Hadoop文档里面有Hadoop Command的资料,I.hdfs command,II.job command,尽量试试这两方面的命令;④Hadoop Files,看看Hadoop文件的概念,关注它的分布式特点,然后看看Reduce函数输出的文件;⑤自己写WordCount与Advanced Word ...
  • 1.jpg 下面以hadoop2.4.0为例:路径的位置都是一样的我们解压之后会有hadoop2.4.0文件夹,我们进入如下路径:hadoop2.4.0->share->doc->hadoop->API,然后找到Index.html。我们会看到图8所示。这样我们就找到了相关API。 图7
  • Hadoop 是一个大数据处理平台,由google 开发,Hadoop 是当前相较于其他大数据平台而言,优点明显,应对当下数据挖掘的首选平台
  • 我不是高手,但我可以告诉你我怎么学习。①选择一个Hadoop的版本,然后阅读文档了解Hadoop:What's Hadoop, Why Hadoop exists;②安装Hadoop,三种方式都试下;③在Hadoop文档里面有Hadoop Command的资料,I.hdfs command,II.job command,尽量试试这两方面的命令;④Hadoop Files,看看Hadoop文件的概念,关注它的分布式特点,然后看看Reduce函数输出的文件;⑤自己写WordCount与Advanced Word ...
  • 英语要好 只要有毅力就OK 。最好是有Java基础,因为hadoop是用java编写的,所以懂java能够帮助理解hadoop原理,当然Hadoop也提供了其他语言的api。不过看楼主是从事javaee的,所以完全没问题,至于Linux只要会基本的cd,ll就差不多了,会安装文件,也就是解压软件,不过不会也没关系,网上多了去了。其实最主要就是能够坚持
  • 第一我建议你先学linux, 最起码 linux的常用命令 熟悉 第二 javaee方面不出要精通,但最好有一定的java基础肯定有好处, 而且要看你打算研究 hadoop的那一块 hadoop是一个生态体系,里面许多东西
  • 我认为这会帮助你更好地理解Spark和Haddop之间的关系: Hadoop本质上是一个分布式数据基础架构:它在大量商品服务器中的多个节点上分发海量数据集合,这意味着您不需要购买和维护昂贵的定制硬件。 它还对这些数据进行索引和跟踪,使大数据处理和分析能够比以前更有效。 另一方面,Spark是一种数据处理工具,可以对这些分布式数据集进行操作; 它不会做分布式存储。 欲了解更多信息,请阅读。 I think this will help you understand better the relation be ...
  • 假设zipIn是java.util.zip.ZipInputStream ,你不应该迭代地调用getNextEntry而不是读取字节吗? I resolved this issue after doing some changes in my code. In the first part of code, I was trying to unzip all the zip files whereas I should have access the spilts. Hadoop basic, which ...