HDFS --访问(一)
Hdfs的访问方式有两种,第一:类似linux命令,hadoop shell。第二:java API方式。
先看第一种。
FS Shell
cat
chgrp
chmod
chown
copyFromLocal
copyToLocal
cp
du
dus
expunge
get
getmerge
ls
lsr
mkdir
movefromLocal
mv
put
rm
rmr
setrep
stat
tail
test
text
touchz
调用文件系统(FS)Shell命令应使用 bin/hadoop fs <args>的形式。 所有的的FS shell命令使用URI路径作为参数。URI格式是scheme://authority/path。对HDFS文件系统,scheme是hdfs,对本地文件系统,scheme是file。其中scheme和authority参数都是可选的,如果未加指定,就会使用配置中指定的默认scheme。一个HDFS文件或目录比如/parent/child可以表示成hdfs://namenode:namenodeport/parent/child,或者更简单的/parent/child(假设你配置文件中的默认值是namenode:namenodeport)。大多数FS Shell命令的行为和对应的Unix Shell命令类似,不同之处会在下面介绍各命令使用详情时指出。出错信息会输出到stderr,其他信息输出到stdout。
hdfs://inc-dw-hadoop-151-7:9000/user/hadoop/wmg/copyfromlocal.txt
使用方法:hadoopfs -cat URI [URI …]
将路径指定文件的内容输出到stdout。
示例:
hadoop fs -cat hdfs://host1:port1/file1 hdfs://host2:port2/file2
hadoop fs -cat file:///file3 /user/hadoop/file4
返回值:
成功返回0,失败返回-1。
使用方法:hadoopfs -chgrp [-R] GROUP URI [URI …] Change groupassociation of files. With -R, make the change recursively through the directory structure. The usermust be the owner of files, or else a super-user. Additional information is inthe Permissions User Guide. -->
改变文件所属的组。使用-R将使改变在目录结构下递归进行。命令的使用者必须是文件的所有者或者超级用户。更多的信息请参见HDFS权限用户指南。
使用方法:hadoopfs -chmod [-R] <MODE[,MODE]... | OCTALMODE> URI [URI …]
改变文件的权限。使用-R将使改变在目录结构下递归进行。命令的使用者必须是文件的所有者或者超级用户。更多的信息请参见HDFS权限用户指南。
使用方法:hadoopfs -chown [-R] [OWNER][:[GROUP]] URI [URI ]
改变文件的拥有者。使用-R将使改变在目录结构下递归进行。命令的使用者必须是超级用户。更多的信息请参见HDFS权限用户指南。
使用方法:hadoopfs -copyFromLocal <localsrc> URI
除了限定源路径是一个本地文件外,和put命令相似。
hadoop fs-copyFromLocal wmg/copyfromlocal.txt/user/hadoop/wmg
前面是本地路径参数,后面是hdfs路径
使用方法:hadoopfs -copyToLocal [-ignorecrc] [-crc] URI <localdst>
除了限定目标路径是一个本地文件外,和get命令类似。
get
使用方法:hadoopfs -get [-ignorecrc] [-crc] <src> <localdst>
复制文件到本地文件系统。可用-ignorecrc选项复制CRC校验失败的文件。使用-crc选项复制文件以及CRC信息。
示例:
hadoop fs -get /user/hadoop/file localfile
hadoop fs -get hdfs://host:port/user/hadoop/file localfile
返回值:
成功返回0,失败返回-1。
put
使用方法:hadoopfs -put <localsrc> ... <dst>
从本地文件系统中复制单个或多个源路径到目标文件系统。也支持从标准输入中读取输入写入目标文件系统。
hadoop fs -put localfile /user/hadoop/hadoopfile
hadoop fs -put localfile1 localfile2 /user/hadoop/hadoopdir
hadoop fs -put localfile hdfs://host:port/hadoop/hadoopfile
hadoop fs -put - hdfs://host:port/hadoop/hadoopfile
从标准输入中读取输入。
返回值:
成功返回0,失败返回-1。
getmerge
使用方法:hadoopfs -getmerge <src><localdst> [addnl]
接受一个源目录和一个目标文件作为输入,并且将源目录中所有的文件连接成本地目标文件。addnl是可选的,用于指定在每个文件结尾添加一个换行符。
hadoop fs -getmerge/user/hadoop/wmg/ wmg/merge.txt addnl
前提是merge的本地文件不存在。
使用方法:hadoopfs -cp URI [URI …] <dest>
将文件从源路径复制到目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。
示例:
hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2
hadoop fs -cp /user/hadoop/file1 /user/hadoop/file2 /user/hadoop/dir
返回值:
成功返回0,失败返回-1。
使用方法:hadoopfs -du URI [URI …]
显示目录中所有文件的大小,或者当只指定一个文件时,显示此文件的大小。
示例:
hadoop fs -du /user/hadoop/dir1/user/hadoop/file1 hdfs://host:port/user/hadoop/dir1
返回值:
成功返回0,失败返回-1。
使用方法:hadoopfs -dus <args>
显示文件的大小。
显示文件的总的大小,指定文件夹就是文件夹下的总的大小。
使用方法:hadoopfs -expunge
清空回收站。请参考HDFS设计文档以获取更多关于回收站特性的信息。
使用方法:hadoopfs -ls <args>
如果是文件,则按照如下格式返回文件信息:
文件名 <副本数> 文件大小 修改日期 修改时间 权限 用户ID 组ID
如果是目录,则返回它直接子文件的一个列表,就像在Unix中一样。目录返回列表的信息如下:
目录名 <dir> 修改日期 修改时间 权限 用户ID 组ID
示例:
hadoop fs -ls /user/hadoop/file1/user/hadoop/file2 hdfs://host:port/user/hadoop/dir1 /nonexistentfile
返回值:
成功返回0,失败返回-1。
使用方法:hadoopfs -lsr <args>
ls命令的递归版本。类似于Unix中的ls-R。
使用方法:hadoopfs -mkdir <paths>
接受路径指定的uri作为参数,创建这些目录。其行为类似于Unix的mkdir -p,它会创建路径中的各级父目录。
示例:
hadoop fs -mkdir /user/hadoop/dir1 /user/hadoop/dir2
hadoop fs -mkdir hdfs://host1:port1/user/hadoop/dir hdfs://host2:port2/user/hadoop/dir
返回值:
成功返回0,失败返回-1。
使用方法:dfs-moveFromLocal <src> <dst>
输出一个”not implemented“信息。
使用方法:hadoopfs -mv URI [URI …] <dest>
将文件从源路径移动到目标路径。这个命令允许有多个源路径,此时目标路径必须是一个目录。不允许在不同的文件系统间移动文件。
示例:
hadoop fs -mv /user/hadoop/file1 /user/hadoop/file2
hadoop fs -mv hdfs://host:port/file1 hdfs://host:port/file2 hdfs://host:port/file3 hdfs://host:port/dir1
返回值:
成功返回0,失败返回-1。
使用方法:hadoopfs -rm URI [URI …]
删除指定的文件。只删除非空目录和文件。请参考rmr命令了解递归删除。
示例:
hadoop fs -rm hdfs://host:port/file /user/hadoop/emptydir
返回值:
成功返回0,失败返回-1。
使用方法:hadoopfs -rmr URI [URI …]
delete的递归版本。
示例:
hadoop fs -rmr /user/hadoop/dir
hadoop fs -rmr hdfs://host:port/user/hadoop/dir
返回值:
成功返回0,失败返回-1。
使用方法:hadoopfs -setrep [-R] <path>
改变一个文件的副本系数。-R选项用于递归改变目录下所有文件的副本系数。
示例:
hadoop fs -setrep -w 3 -R /user/hadoop/dir1
返回值:
成功返回0,失败返回-1。
使用方法:hadoopfs -stat URI [URI …]
返回指定路径的统计信息。
示例:
hadoop fs -stat path
返回值:
成功返回0,失败返回-1。
使用方法:hadoopfs -tail [-f] URI
将文件尾部1K字节的内容输出到stdout。支持-f选项,行为和Unix中一致。
示例:
hadoop fs -tail pathname
返回值:
成功返回0,失败返回-1。
使用方法:hadoopfs -test -[ezd] URI
选项:
-e 检查文件是否存在。如果存在则返回0。
-z 检查文件是否是0字节。如果是则返回0。
-d 如果路径是个目录,则返回1,否则返回0。
示例:
hadoop fs -test -e filename
使用方法:hadoopfs -text <src>
将源文件输出为文本格式。允许的格式是zip和TextRecordInputStream。
使用方法:hadoopfs -touchz URI [URI …]
创建一个0字节的空文件。
示例:
hadoop -touchz pathname
返回值:
成功返回0,失败返回-1。
HDFS --访问(二)
Hdfs的访问方式有两种,第一:类似linux命令,hadoop shell。第二:java API方式。
来看第二种。第二种和第一种完成的功能是一样的,直接上代码,里面一些注释的,在测试时自行打开测试即可。
package com.wmg.data.join2; import java.io.IOException; import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataInputStream; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.hdfs.DistributedFileSystem; public class HDFSAcess { /** * @param args * @throws IOException */ public static void main(String[] args) { byte[] buffer = new byte[4096]; try { // create a distributed file system instance Configuration conf = new Configuration(); // 配置文件信息在conf/core-site..xml中配置,namenode的地址端口信息 conf.set("fs.default.name", "hdfs://10.20.151.7:9000"); // 初始化文件系统,两种方式 /* * DistributedFileSystem fs1 = new DistributedFileSystem(); * fs1.initialize(FileSystem.getDefaultUri(conf), conf); */ FileSystem fs = FileSystem.get(conf); String dir = "/user/hadoop/wmg"; String dir1 = "/user/hadoop/wmg"; Path dirPath = new Path(dir); Path dirPath1 = new Path(dir1); // 创建目录,两种方式均可 // fs1.mkdirs(dirPath); fs.mkdirs(dirPath1); // hdfs.mkdirs(dirPath); // 创建文件 String dst = "/user/hadoop/wmg/wmg.txt"; String dst1 = "/user/hadoop/wmg/outputwmg.txt"; Path dstPath = new Path(dst); Path dstPath1 = new Path(dst1); byte[] content = "aaaa".getBytes(); FSDataOutputStream outputStream = fs.create(dstPath); outputStream.write(content); outputStream = fs.create(dstPath1); outputStream.close(); System.out.println("success, create a new file in HDFS: " + dst); /* * rename a file in HDFS * */ String src = "/user/hadoop/wmg/newwmg.txt"; Path srcPath = new Path(src); fs.rename(dstPath, srcPath); System.out.println("ok, file: " + dst + " renamed to: " + src); /* * delete a hdfs file * * */ /* * fs.delete(srcPath, false); * System.out.println("ok, delete file: "+srcPath); */ // read data from file FSDataInputStream is = fs.open(new Path( "/user/hadoop/wmg/newwmg.txt")); is.read(buffer); // overwrite hdfs file FSDataOutputStream os_w = fs.create(new Path( "/user/hadoop/wmg/outputwmg.txt"), true); os_w.write(buffer); // append data to hdfs file // FSDataOutputStream os_a = fs.append(new Path("/fs_t02")); // os_a.write(buffer); /* * upload the file from local system to HDFS * */ String localsrc = "/home/hadoop/minggang.wumg/localwmg.txt"; String dfst = "/user/hadoop/wmg"; Path localsrcPath = new Path(localsrc); Path dfstPath = new Path(dfst); fs.copyFromLocalFile(localsrcPath, dfstPath); System.out.println("Upload to " + conf.get("fs.default.name")); // flush & close stream os_w.flush(); os_w.close(); // os_a.flush(); // os_a.close(); is.close(); fs.close(); System.out.println(new String(buffer, "US-ASCII")); } catch (IOException e) { System.err.print(e.toString()); } } } |
基本的文件、目录的操作都全了~~