Hadoop IO 以及 HDFS manipulation 简介 有用的命令行

HDFS的默认目录在 /user/username

HDFS的开放端口在core-site.xml这个配置文件中指定, 一般为9000或8020, data node 的数据存放本地目录也在该文件中, hadoop.tmp.dir配置项中

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

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

 

Hadoop fs命令:

hadoop fs -copyFromLocal
hadoop fs -copyToLocal
hadoop fs -mkdir
hadoop fs -ls
hadoop fs -getmerge /folder ~/folder/mergered_file

getmerge这是一个很有用的命令可以把一个文件夹下多个reducer产生的结果part,合并为一个文件, 输出到本机的目录

 

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 URLStreamHandler
import java.io.InputStream;
import java.net.URL;

import org.apache.hadoop.fs.FsUrlStreamHandlerFactory;
import org.apache.hadoop.io.IOUtils;

// vv URLCat
public 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

显示某个文件属性:

hadoop fs -stat "%o %r" /somefile.csv

 

%b:打印文件大小(目录为0)

%n:打印文件名

%o:打印block size (我们要的值)

%r:打印备份数

%y:打印UTC日期 yyyy-MM-dd HH:mm:ss

%Y:打印自1970年1月1日以来的UTC微秒数

%F:目录打印directory, 文件打印regular file

当使用-stat选项但不指定format时候,只打印文件创建日期,相当于%y

 

 

hdfs 命令:

hdfs getconf -confKey dfs.blocksize  //获取配置参数
hdfs fsck /somefile.csv  //列出文件详细信息
hdfs groups username
hdfs dfs -chown newownername:newgroup /dir

 

 

 

 

posted @ 2017-11-27 16:29  爱知菜  阅读(17)  评论(0编辑  收藏  举报