主页 > 开源代码  > 

Hadoop之HDFS的使用

Hadoop之HDFS的使用

HDFS是什么:HDFS是一个分布式的文件系统,是个网盘,HDFS是一种适合大文件存储的分布式文件系统

HDFS的Shell操作

1、查看hdfs根目录下的内容 - ls

hdfs dfs -ls hdfs://hadoop01:9000/

url 在 使 用 时 默 认 是 可 以 省 略 的 , 因 为 hdfs 在 执 行 的 时 候 会 根 据HDOOP_HOME自动识别配置文件中的fs.defaultFS属性

可以写成:hdfs dfs -ls /

还有一版旧版写法

hadoop fs -ls /

想要递归显示所有目录的信息,可以在ls后面添加-R参数 

[root@bigdata01 hadoop-3.2.0]# hdfs dfs -ls -R / 

2、从本地上传文件 - put

[root@bigdata01 hadoop-3.2.0]# hdfs dfs -put README.txt /

3、查看HDFS文件内容 - cat

[root@bigdata01 hadoop-3.2.0]# hdfs dfs -cat /README.txt

 4、下载文件到本地 - get

// 防止当前目录中已经有这个文件了,要么换到其它目录,要么给文件重命名

[root@bigdata01 hadoop-3.2.0]# hdfs dfs -get /README.txt README.txt.bak

5、[创建文件夹 - mkdir

[root@bigdata01 hadoop-3.2.0]# hdfs dfs -mkdir /test

// 如果要递归创建多级目录,还需要再指定-p参数

[root@bigdata01 hadoop-3.2.0]# hdfs dfs -mkdir -p /abc/xyz

6、 删除文件/文件夹  - rm

[root@bigdata01 hadoop-3.2.0]# hdfs dfs -rm /README.txt

// 删除目录需要指定-r参数

[root@bigdata01 hadoop-3.2.0]# hdfs dfs -rm -r /test

7、统计根目录下文件的个数

[root@bigdata01 hadoop-3.2.0]# hdfs dfs -ls / |grep /| wc -l  

 8、hdfs dfs 可以配置简写

// 临时配置

alias hls="hdfs dfs -ls"

// 永久配置

nano ~/.bashrc

alias hls="hdfs dfs -ls"

source ~/.bashrc

// 验证

hls /

9、Java 操作 HDFS

import org.apache.hadoop.conf.Configuration; import org.apache.hadoop.fs.FSDataOutputStream; import org.apache.hadoop.fs.FileSystem; import org.apache.hadoop.fs.Path; import org.apache.hadoop.io.IOUtils; import java.io.FileInputStream; import java.io.IOException; import java.net.URI; /** * Java代码操作HDFS * 文件操作:上传文件、下载文件、删除文件 * Created by xuwei */ public class HdfsOp { public static void main(String[] args) throws Exception{ //创建一个配置对象 Configuration conf = new Configuration(); //指定HDFS的地址 conf.set("fs.defaultFS","hdfs://bigdata01:9000"); //获取操作HDFS的对象 FileSystem fileSystem = FileSystem.get(conf); put(fileSystem); } /** * 文件上传 * @param fileSystem * @throws IOException */ private static void put(FileSystem fileSystem) throws IOException { //获取HDFS文件系统的输出流 FSDataOutputStream fos = fileSystem.create(new Path("/user.txt")); //获取本地文件的输入流 FileInputStream fis = new FileInputStream("D:\\user.txt"); //上传文件:通过工具类把输入流拷贝到输出流里面,实现本地文件上传到HDFS IOUtils.copyBytes(fis,fos,1024,true); } } /** * 下载文件 * @param fileSystem * @throws IOException */ private static void get(FileSystem fileSystem) throws IOException{ //获取HDFS文件系统的输入流 FSDataInputStream fis = fileSystem.open(new Path("/README.txt")); //获取本地文件的输出流 FileOutputStream fos = new FileOutputStream("D:\\README.txt"); //下载文件 IOUtils.copyBytes(fis,fos,1024,true); } /** * 删除文件 * @param fileSystem * @throws IOException */ private static void delete(FileSystem fileSystem) throws IOException{ //删除文件,目录也可以删除 //如果要递归删除目录,则第二个参数需要设置为true //如果是删除文件或者空目录,第二个参数会被忽略 boolean flag = fileSystem.delete(new Path("/LICENSE.txt"),true); if(flag){ System.out.println("删除成功!"); }else{ System.out.println("删除失败!"); } }

标签:

Hadoop之HDFS的使用由讯客互联开源代码栏目发布,感谢您对讯客互联的认可,以及对我们原创作品以及文章的青睐,非常欢迎各位朋友分享到个人网站或者朋友圈,但转载请说明文章出处“Hadoop之HDFS的使用