Ubuntu16.04的Hadoop2.7.3之分布式文件系统HDFS学习指南

x33g5p2x  于2020-09-08 发布在 Hadoop  
字(3.9k)|赞(0)|评价(0)|浏览(1143)

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

下面介绍Linux操作系统中关于HDFS文件操作的常用shell命令,利用web界面查看和管理Hadoop文件系统,以及利用Hadoop提供的Java API进行基本的文件操作。

一、启动Hadoop

在学习HDFS编程实现,需要启动Hadoop,执行如下命令:

cd /usr/local/hadoop
./sbin/start-dfs.sh

二、HDFS编程

1.利用shell命令操作

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

实际上有三种shell命名方式。
1.hadoop fs
2.hadoop dfs
3.hdfs dfs

hadoop fs 适用于任何不同的文件系统,比如本地文件系统和HDFS文件系统
hadoop dfs 只能适用于HDFS文件系统
hdfs dfs 跟hadoop dfs的命名作用一样,也只能适用于HDFS文件系统

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

hadoop fs

在终端输入如下命令,可以查看具体哪个命令怎么用

例如,查看put命令如何使用,可以输入如下的命令

hadoop fs -help put

(2)利用HDFS的web界面管理

打开Linux浏览器,输入 http://localhost:50070,即可看到HDFS的Web管理界面

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

Hadoop不同的文件系统通过调用java API进行交互,上面介绍的shell命令,本质上是Java API的应用。下面提供了Hadoop官方的Hadoop API文档,想要深入学习Hadoop,可以访问如下网址:

http://hadoop.apache.org/docs/stable/api/

利用Java API进行交互,需要安装软件Eclipse(安装教程不综述)

在Eclipse中创建项目
第一次打开Eclipse,需要填写workspace(工作空间),用来保存程序所在的位置,这里按照默认,不需要改动,如下如:

点击OK按钮,进入Eclipse软件。开始创建项目,选择顶部菜单File->New->Java Project

输入项目名称,本教程输入的项目名称"Dblab",其他不用改写,点击"Finish"按钮即可。

项目加载所需要的jar包

如何获取Java API

API所在的jar包都在已经安装好的hadoop文件夹里,路径:/usr/local/hadoop/share/hadoop 如果你安装的hadoop不在此目录下,请找到jar包

  • 加载上面路径common文件夹下:

  • lib所有的jar包和hadoop-common-2.7.3.jar

  • 加载上面路径hdfs文件夹下:

  • lib所有的jar包和hadoop-hdfs-2.7.3.jar

  • 在所有项目中加载jar包,具体操作如下:在所选的Eclipse项目(Dblab)上右键点击-->弹出菜单中选择Properties-->java Build Path-->Libraries-->Add External JARS

  • 实例:利用hadoop的java api检测伪分布式文件系统HDFS上是否存在某个文件,写入文件,读取文件。

第一个编写程序,判断文件是否存在:

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;


public class File_exists {
	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("file exists.");
			}else {
				System.out.println("file not exists.");
			}
			fs.close();
		} catch(Exception e) {
			e.printStackTrace();
		}
	}
}

程序运行之后

可以看到文件不存在。

第二个编程序写入文件

import org.apache.hadoop.conf.Configuration;  
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FSDataOutputStream;
import org.apache.hadoop.fs.Path;
 
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);
                        byte[] buff = "Hello world".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();  
                }  
        }  
}

第三个程序编写读取文件

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

导出jar包运行

1.点击Eclipse顶部菜单选项"File",选择"export"

2.选择"Runnable JAR File",然后下一步next

3.在终端输入命令:

java jar File_Read.jar

作者:秦景坤
GitHub:https://github.com/Roc-J
CSDN博客:http://blog.csdn.net/qjk19940101

相关文章