Hadoop IO & HDFS manipulation 简介

来源:互联网 发布:ipad看tvb软件 编辑:程序博客网 时间:2024/06/13 01:30

HDFS的默认目录在 /user/username

HDFS的开放端口在core-site.xml这个配置文件中指定, 一般为9000或8020

当你执行命令时不指定目录时, 一般命令都会在这个目录下执行

所以在HDFS里没有 cd 和 pwd 这样的命令.

hadoop fs -copyFromLocalhadoop fs -copyToLocalhadoop fs -mkdirhadoop fs -ls

Hadoop Filesystems 有多种虚拟的文件系统, HDFS只是其中之一

hadoop fs -ls file:///hadoop fs -ls hdfs:///

第一条命令会显示node所在服务器的本地文件信息

第二条命令则显示分布式文件系统的信息


对于HDFS的一些复杂操作可以自己来写java然后打包成jar文件, 通过命令行来执行

为了方便期间, 可以先定义好HADOOP_CLASSPATH这个环境变量:

export HADOOP_CLASSPATH=/usr/local/hadoop-2.7.0/share/myjar/*
注意最后一定要指定好jar的名字或者通配符*

然后我们只要把编写好的jar文件放到这个目录里去就能够用bin目录下的hadoop来执行了

比如:

./hadoop URLCat hdfs:localhost:9000/user/root/input/sample.txt
URLCat类的代码如下
// cc URLCat Displays files from a Hadoop filesystem on standard output using a URLStreamHandlerimport java.io.InputStream;import java.net.URL;import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;import org.apache.hadoop.io.IOUtils;// vv URLCatpublic class URLCat {  static {    URL.setURLStreamHandlerFactory(new FsUrlStreamHandlerFactory());  }    public static void main(String[] args) throws Exception {    InputStream in = null;    try {      in = new URL(args[0]).openStream();      IOUtils.copyBytes(in, System.out, 4096, false);    } finally {      IOUtils.closeStream(in);    }  }}// ^^ URLCat


HDFS存在一个Coherency Model, 在文件从client写入datanode的时候, 有三个函数对应三种情况:

flush:  写入的数据不一定可见

hflush: 写入的数据可见, 但是可能只是写入了datanode的内存中 (close默认调用hflush)

sync: 写入的数据可见, 而且是写到了磁盘中去.


这其中有个trade-off, sync能确保数据写入磁盘, 但会阻塞程序较久, flush不会阻塞, 但数据可能还没有准备好被读取.


hadoop还有一个并行文件传输命令:

hadoop distcp dir1 dir2
可以直接对拷目录.

hadoop fs -checksum filename #获取文件CRC




原创粉丝点击