您的位置:首页 > 运维架构

Hadoop IO & HDFS manipulation 简介

2017-11-27 16:29 337 查看
HDFS的默认目录在 /user/username

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

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

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

hadoop fs -copyFromLocal
hadoop fs -copyToLocal
hadoop fs -mkdir
hadoop fs -ls
hadoop fs -getmerge /folder ~/folder/mergered_filegetmerge这是一个很有用的命令可以把一个文件夹下多个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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: