欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

HDFS安装使用详解

程序员文章站 2024-03-22 13:51:58
...

HDFS

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

HDFS安装使用详解
HDFS安装使用详解
启动hadoop
在学习HDFS编程实践前,我们需要启动Hadoop。执行如下命令:

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

HDFS安装使用详解

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

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

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

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

HDFS安装使用详解

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

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

HDFS安装使用详解

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         

HDFS安装使用详解

(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                    #创建并编辑文件

HDFS安装使用详解

(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文件内容

HDFS安装使用详解
(3)下载文件

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

HDFS安装使用详解

(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内容
 

HDFS安装使用详解

2. 利用Web界面管理HDFS

打开浏览器,点击如下链接的HDFS的Web界面,即可看到HDFS的Web管理界面。
http://localhost:9870
HDFS安装使用详解

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

1.为项目添加需要用到的JAR包
HDFS安装使用详解

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

HDFS安装使用详解
需要在这个界面中加载该Java工程所需要用到的JAR包,这些JAR包中包含了可以访问 HDFS 的 Java API。这些 JAR 包都位于Linux系统的Hadoop 安装目录下,就是在:“/usr/local/hadoop/share/hadoop”目录下。
HDFS安装使用详解
在该界面中,上面的一排目录按钮(即“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包。

HDFS安装使用详解
HDFS安装使用详解

4.编写Java应用程序代码

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

HDFS安装使用详解

然后输入如下命令:

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)
HDFS安装使用详解

5. 应用程序部署

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

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

HDFS安装使用详解
HDFS安装使用详解
在下边界面中,选择“Runnable JAR file”,然后,点击“Next>”按钮
HDFS安装使用详解

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

HDFS安装使用详解

HDFS安装使用详解
至此,已经顺利把HDFS工程打包生成了HDFSExample.jar。可以到Linux 系统中查看一下生成的HDFSExample.jar文件,可以在Linux的终端中执行如下命令:

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

HDFS安装使用详解

命令执行结束后,会在屏幕上显示执行结果“文件不存在”。至此,检测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();
}
}
}

HDFS安装使用详解

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();
}
}
}

HDFS安装使用详解

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();
}
}
}

HDFS安装使用详解