设为首页 收藏本站
查看: 827|回复: 0

[经验分享] hadoop API 学习小结(一)

[复制链接]

尚未签到

发表于 2016-12-8 08:04:03 | 显示全部楼层 |阅读模式
  一、从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)永久性删除文件或目录。
  

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-311136-1-1.html 上篇帖子: 转-》hadoop 性能因素 下篇帖子: HDP-Hadoop管理平台部署
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表