HDFS安装使用详解

HDFS

Hadoop 分布式文件系统(Hadoop Distributed File System,HDFS)是 Hadoop核心组件之一,如果已经安装了Hadoop,其中就已经包含了HDFS 组件,不需要另外安装。

在这里插入图片描述
在这里插入图片描述
启动hadoop
在学习HDFS编程实践前,我们需要启动Hadoop。执行如下命令:

cd /usr/local/hadoop             #切换目录
./sbin/start-dfs.sh             #启动Hadoop

在这里插入图片描述

1.利用shell命令与HDFS进行交互

Hadoop支持很多Shell命令,其中fs是HDFS最常用的命令,利用fs可以查看HDFS文件系统的目录结构、上传和下载数据、创建文件等。

可以在终端输入如下命令,查看fs总共支持哪些命令

./bin/hadoop fs          #查看fs命令

在这里插入图片描述

查看具体某个命令的作用,例如:我们查看put命令如何使用,可以输入如下命令:

./bin/hadoop fs -help put     #查看put命令  

在这里插入图片描述

1.1 目录操作

(1)创建hadoop目录
Hadoop系统安装后,第一次使用HDFS时,需要首先在HDFS中创建用户目录。因此,需要在HDFS中为hadoop用户创建一个用户目录,命令如下:

cd /usr/local/hadoop                        #切换目录
./bin/hdfs dfs -mkdir -p ./usr/hadoop       #创建用户目录

该命令中表示在HDFS中创建一个“./user/hadoop”目录
“–mkdir”是 创建目录的操作,
“-p”表示如果是多级目录,则父目录和子目录一起创建,
“./user/hadoop”就是一个多级目录,因此必须使用参数“-p”,否则会出错。
“./user/hadoop”目录就成为 hadoop用户对应的用户目录。

(2)查看hadoop目录
可以使用如下命令显示HDFS中与当前用户hadoop对应的用户目录下的内容

./bin/hdfs dfs -ls  
./bin/hdfs dfs -ls .
./bin/hdfs dfs -ls /usr/hadoop         

在这里插入图片描述

(3)创建input目录
命令:

./bin/hdfs dfs -mkdir -p ./usr/hadoop/input2
./bin/hdfs dfs -mkdir ./input4   #HDFS根目录下创建input4目录

1.2 文件操作

在实际应用中,经常需要从本地文件系统向HDFS中上传文件,或者把HDFS中的文件下载到本地文件系统中。
(1)创建实例文件MyTest.txt
使用vim创建MyTest.txt文件,里边可以随意输入一些内容。
命令:

vim MyTest.txt                    #创建并编辑文件

在这里插入图片描述

(2)上传、查看文件与文件内容

./bin/hdfs dfs -put /usr/local/hadoop/MyTest.txt ./usr/hadoop/input2  
#将MyText.txt文件上传到HDFS中的用户目录的input目录下
./bin/hdfs dfs -ls ./usr/hadoop/input2   
#查看是否上传成功
./bin/hdfs dfs -cat ./usr/hadoop/input2/MyTest.txt
#查看MyTest.txt文件内容

在这里插入图片描述
(3)下载文件

./bin/hdfs dfs -get ./usr/hadoop/input2/MyTest.txt /home/hadoop/下载
#将文件下载到“/home/hadoop/下载/”目录下
cat MyTest.txt             #查看文件

在这里插入图片描述

(4)复制文件
如何把文件从 HDFS 中的一个目录拷贝到 HDFS中的另外一个目录。
比如,如果要把HDFS 的“/user/hadoop/input2/ MyTest.txt”文件,拷贝到 HDFS的另外一个目录“/input3”中(注意,这个input3 目录位于HDFS 根目录下),可以使用如下命令:

./bin/hdfs dfs -mkdir ./input3  #创建input3目录
./bin/hdfs dfs -cp ./usr/hadoop/input2/MyTest.txt ./input3  #复制文件
./bin/hdfs dfs -ls ./input3   #查看复制结果
./bin/hdfs dfs -cat ./input3/MyTest.txt   #查看MyTest.txt内容
 

在这里插入图片描述

2. 利用Web界面管理HDFS

打开浏览器,点击如下链接的HDFS的Web界面,即可看到HDFS的Web管理界面。
http://localhost:9870
在这里插入图片描述

3. 利用 Java API(Eclipse)与 HDFS 进行交互

1.为项目添加需要用到的JAR包
在这里插入图片描述

点击界面中的“Libraries”选项卡,然后,点击界面右侧的“Add External JARs…”按钮。选择 hadoop下所有目录.

在这里插入图片描述
需要在这个界面中加载该Java工程所需要用到的JAR包,这些JAR包中包含了可以访问 HDFS 的 Java API。这些 JAR 包都位于Linux系统的Hadoop 安装目录下,就是在:“/usr/local/hadoop/share/hadoop”目录下。
在这里插入图片描述
在该界面中,上面的一排目录按钮(即“usr”、“local”、“hadoop”、“share”、“hadoop”、“mapreduce” 和“lib”),当点击某个目录按钮时,就会在下面列出该目录的内容。
为了编写一个能够与HDFS交互的Java应用程序,一般需要向Java工程中添加以下JAR包:
(1)“/usr/local/hadoop/share/hadoop/common” 目录下的所有JAR包;
(2)“/usr/local/hadoop/share/hadoop/common/lib”目录下的所有JAR包; (3)“/usr/local/hadoop/share/hadoop/hdfs” 目录下的JAR包;
(4)“/usr/local/hadoop/share/hadoop/hdfs/lib” 目录下的所有JAR包。

在这里插入图片描述
在这里插入图片描述

4.编写Java应用程序代码

该程序用来测试 HDFS 中是否存在一个文件,其中有一行代码:
String fileName = “test”
这行代码给出了需要被检测的文件名称是“test”,没有给出路径全称,表示是采用了相对路径,实际上就是测试当前登录 Linux 系统的用户 hadoop,在HDFS中对应的用户目录下是否存在test文件,也就是测试HDFS中的“/usr/hadoop”目录下是都存在test文件。

在这里插入图片描述

然后输入如下命令:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class HDFS{
public static void main(String[]args){
try{
String fileName="test";
Configuration conf=new Configuration();
conf.set("fs.defaultFS","hdfs://localhost:9000");
conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs=FileSystem.get(conf);
if(fs.exists(new Path(fileName))){
System.out.println("文件存在");
}else{
System.out.println("文件不存在");
}
}catch(Exception e){
e.printStackTrace();
}
}
}

然后运行,输出结果(在程序运行前需要启动运行Hadoop)
在这里插入图片描述

5. 应用程序部署

下面介绍如何把 Java 应用程序生成 JAR 包,部署到 Hadoop 平台上运行。首先,在 Hadoop 安装目录下新建一个名称为 myapp 的目录,用来存放我们自己编写的 Hadoop 应用程序, 可以在 Linux 的终端中执行如下命令:

cd /usr/local/hadoop     #切换目录
sudo mkdir myapp         #创建目录
sudo chmod +777 myapp    #权限设置   

在这里插入图片描述
在这里插入图片描述
在下边界面中,选择“Runnable JAR file”,然后,点击“Next>”按钮
在这里插入图片描述

在该界面中,“Launch configuration”用于设置生成的 JAR 包被部署启动运行的主类。需要在下拉列表中选择刚才配置的类“HDFS-HDFSExample”。在“Export destination”中需要设置JAR包要输出保存到哪个目录,比如,这里设置为“/usr/local/hadoop/myapp/HDFSExample.jar”。
在“Library handling”下面选择“Extract required libraries into generated JAR”。然后,点击“Finish”按钮
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
至此,已经顺利把HDFS工程打包生成了HDFSExample.jar。可以到Linux 系统中查看一下生成的HDFSExample.jar文件,可以在Linux的终端中执行如下命令:

cd myapp          #切换目录
ls                #查看
cd ..             #切换到上一层目录
java -jar ./myapp/HDFSExample.jar         #运行程序
 

在这里插入图片描述

命令执行结束后,会在屏幕上显示执行结果“文件不存在”。至此,检测HDFS 文件是否存在 的程序,就顺利部署完成了。

练习

1.写入文件

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

在这里插入图片描述

2.判断文件是否存在

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class chapter2{
public static void main(String[]args){
try{
String filename="test";
Configuration conf=new Configuration();
conf.set("fs.defaultFS","hdfs://localhost:9000");
conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs=FileSystem.get(conf);
if(fs.exists(new Path(filename))){
System.out.println("文件存在");
}else{
System.out.println("文件不存在");
}
fs.close();
}catch(Exception e){
e.printStackTrace();
}
}
}

在这里插入图片描述

3.读取文件内容

import java.io.BufferedReader;
import java.io.InputStreamReader;
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FSDataInputStream;
public class chapter3{
public static void main(String[]args){
try{
Configuration conf=new Configuration();
conf.set("fs.defaultFS","hdfs://localhost:9000");
conf.set("fs.hdfs.impl","org.apache.hadoop.hdfs.DistributedFileSystem");
FileSystem fs=FileSystem.get(conf);
Path file=new Path("test");
FSDataInputStream getIt=fs.open(file);
BufferedReader d=new BufferedReader(new
InputStreamReader(getIt));
String content=d.readLine();//读取文件一行
System.out.println(content);
d.close();//关闭文件
fs.close();//关闭hdfs
}catch(Exception e){
e.printStackTrace();
}
}
}

在这里插入图片描述

发布了22 篇原创文章 · 获赞 3 · 访问量 559

猜你喜欢

转载自blog.csdn.net/qq494370/article/details/105188450