大数据基础HDFS入门
目的
-
理解HDFS在Hadoop体系结构中的角色;
-
熟练使用HDFS操作常用的Shell命令;
-
熟悉HDFS操作常用的Java API。
平台
操作系统:Linux
Hadoop版本:2.6.0或以上版本
JDK版本:1.6或以上版本
Java IDE:Eclipse
内容和要求
HDFS理解
含义:
HDFS是hadoop项目的核心子项目,是分布式计算中数据存储管理的基础。是基于流数据模式访问和处理超大文件的需求而开发的, 可以运行于廉价的商用服务器上。
它所具有的高容错、 高可靠性、 高可扩展性、 高获得性、 高吞吐率等特征为海量数据提供了不怕故障的存储, 为超大数据集的应用处理带来了很多便利。
HDFS是开源的,存储着Hadoop应用将要处理的数据,类似于普通的Unix和linux文件系统,不同的是它是实现了google的GFS文件系统的思想,是适用于大规模分布式数据处理相关应用的、可扩展的分布式文件系统。
HDFS的关键元素:
Block:将一个文件进行分块,通常是64M,可配置。若文件大小不到64MB ,则单独存成一个block。Block大小和副本数通过Client端上传文件时设置,文件上传成功后副本数可以变更,Block Size不可变更。
NameNode:保存整个文件系统的目录信息、文件信息及分块信息,这是由唯一一台主机专门保存,当然这台主机如果出错,NameNode就失效了。在Hadoop2.*开始支持activity-standy模式----如果主NameNode失效,启动备用主机运行NameNode。
DataNode:分布在廉价的计算机上,用于存储Block块文件。
HDFS编程练习
1. 利用 Hadoop 提供的 Shell 命令完成
向HDFS中上传任意文本文件,如果指定的文件在HDFS中已经存在,由用户指定是追加到原有文件末尾还是覆盖原有的文件;
从HDFS中下载指定文件,如果本地文件与要下载的文件名称相同,则自动对下载的文件重命名;
将HDFS中指定文件的内容输出到终端中;
显示HDFS中指定的文件的读写权限、大小、创建时间、路径等信息;
给定HDFS中某一个目录,输出该目录下的所有文件的读写权限、大小、创建时间、路径等信息,如果该文件是目录,则递归输出该目录下所有文件相关信息;
利用JAVA API 编程实现
编写一个Java程序,判断HDFS上是否存在某个文件?
代码如下:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
public class a1{
public static void main(String[] args){
try{
String fileName = "/user/hadoop/123.txt";
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(fileName + " 文件存在");
}else{
System.out.println(fileName + " 文件不存在");
}
}catch (Exception e){
e.printStackTrace();
}
}
}
结果如下:
在其中我遇到了以下错误:
Hadoop启动HDFS进程的时候报错,提示权限不够
错误:
错误原因:
因为切换了用户无法正常使用
解决办法:
复制导入公钥就可以了,SSH链接需要使用公钥认证:
切换到ssh目录:cd ~/.ssh/
再次启动HDFS就可以了。
- 点赞
- 收藏
- 关注作者
评论(0)