(Hadoop)HDFS常用操作

目录:

注意1、使用前启动hadoop

注意2、三种使用文件系统的shell命令方式

注意3、配置环境

注意4、第一次使用HDFS时

一、hdfs dfs 命令的常用操作(先启动Hadoop)

二、通过Java API操作HDFS (先启动Hadoop)

三、基本类似于Linux的常用操作命令

注意:

1、先我们需要启动Hadoop。转到hadoop目录下,启动hadoop

 cd /usr/local/hadoop

./sbin/start-dfs.sh

2、命令是以”./bin/hadoop dfs”开头的Shell命令方式,实际上有三种shell命令方式(如果配置好环境变量,可以用下边的第三条命令替换掉本句开头的加粗部分)。

hadoop fs           #适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统

hadoop dfs          #只能适用于HDFS文件系统

hdfs dfs            #跟hadoop dfs的命令作用一样,也只能适用于HDFS文件系统

3、配置环境 (注意:hadoop的安装目录为/usr/local下)

vim  ~/.bashrc          #进入编辑,在最前面加入如下单独一行

export  PATH=$PATH:/usr/local/hadoop/sbin:/usr/local/hadoop/bin

source  ~/.bashrc       #使设置生效,现在可以在任意目录中直接使用 hdfs 等命令了

4、第一次使用HDFS时

Hadoop系统安装好以后,第一次使用HDFS时,需要首先在HDFS中创建用户目录 : 

hdfs dfs -mkdir -p /user/hadoop     #由于采用的是hadoop用户登录,所以在HDFS中创建一个“/user/hadoop”用户目录,本地上传的文件都会被保存在/user/hadoop下。

一、hdfs dfs命令的常用操作(提前启动hadoop并配置好PATH环境变量

1、显示帮助

./bin/hadoop fs                                                        #显示fs支持的所有命令   

./bin/hadoop fs -help put                                         #查看put命令如何使用

2、创建目录——  -mkdir

hdfs dfs -mkdir test                                                 #在用户目录(/user/hadoop)下创建一个test目录

hdfs dfs -mkdir /test                                                #在HDFS的给目录(/)下创建一个test目录

hdfs dfs -mkdir -p /test1/test2                                 #创建多级目录,加入参数“-p”

3、显示文件相关信息—— -ls

hdfs dfs -ls                                                             #列出HDFS上的所有目录

hdfs dfs -ls .                                                           #显示HDFS中与当前用户对应的用户目录下的内容

hdfs dfs -ls ./test                                                    #显示HDFS中./test(指定文件)的信息

4、显示文件内容—— -cat

hdfs dfs -cat ./test.txt                                             #显示文件内容 

5、文件上传到HDFS中—— -put / -appendToFile / -copyFromLocal

hdfs  dfs  -put  /home/hadoop/下载/file  ./                                 #将本地/home/hadoop/下载/file 文件目录下的file上传到HDFS中的./(即user/hadoop)目录下                                           

hdfs  dfs  -appendToFile  /home/hadoop/下载/file  ./                #若文件存在,则追加到file文件末尾

hdfs  dfs  -copyFromLocal  /home/hadoop/下载/file  ./             #若HDFS中文件已存在,则覆盖file原有文件

 6、下载HDFS中的文件—— -get / -copyToLocal

 hdfs  dfs  -get  ./file  /home/hadoop/下载                                 #HDFS中的file文件下载到本地的 下载 目录下  

hdfs  dfs  -copyToLocal  ./file  /home/hadoop/下载/file1           #若本地存在该文件,对文件重命名

7、在HDFS中移动文件—— -mv

hdfs  dfs  -mv  ./file  ./test                              #将file移动到test文件夹下

8、删除HDFS中的指定文件—— -rm

hdfs  dfs  -rm  ./file                                         #删除file文件

hdfs  dfs  -rm  -r  ./test                                   #删除test目录

二、通过Java API操作HDFS

1、写入到HDFS(会自动在HDFS中创建一个文件)

import java.io.IOException;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class Write
{
public static void main(String[] args)
{
Configuration conf =new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:9000");
conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
String filename="test";//要写入的文件名
byte[] buff="hello World!hh\n".getBytes();//要写入的内容
try
{
FileSystem fs=FileSystem.get(conf);
FSDataOutputStream os=fs.create(new Path(filename));
os.write(buff, 0, buff.length);
System.out.println("内容成功写入到"+filename);
os.close();
fs.close();
} catch (IOException e)
{
e.printStackTrace();
}
}
}

2、读取HDFS中的文件内容

import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FSDataInputStream;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;

public class Read
{
public static void main(String[] args)
{
Configuration conf =new Configuration();
conf.set("fs.defaultFS", "hdfs://localhost:9000");
conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
Path filename=new Path("test");//要读取的文件名
try
{
FileSystem fs=FileSystem.get(conf);
FSDataInputStream getIt=fs.open(filename);
BufferedReader r=new BufferedReader(new InputStreamReader(getIt));
String content=null;
while((content=r.readLine())!=null)//一行一行的读,直到为空
{
System.out.println(content);
}
r.close();//关闭文件
fs.close();//关闭HDFS
}catch(Exception e)
{
e.printStackTrace();
System.out.println(filename+"文件不存在");
}
}
}

 
 

 

本博客参考了:

第三章 分布式文件系统HDFS 学习指南 (林子雨)   http://dblab.xmu.edu.cn/blog/290-2/

常用的HDFS操作      https://www.cnblogs.com/ZJdiem/p/11306567.html

posted @ 2020-02-16 09:09  细胞何  阅读(2442)  评论(0编辑  收藏  举报