大数据平台复习一. HDFS

什么是文件系统
操作系统的一部分
是一个软件程序
在用户和计算机的存储设备之间建立桥梁

主要职责
建立了一个硬盘等存储设备中存储内容的目录结构
一般采用树形结构,表示存储内容的不同层次
目录中的每个组成项称为一个文件,目录的树形结构也存储了文件之间的关系
提供了相应的命令和接口来便于用户对存储设备的读写操作

当面临海量的数据时……
单台计算机的文件系统可能无法存储所有的数据!利用网络将大量的计算节点互联,向下将各个节点中的存储容量进行集中管理,向上为用户提供透明化服务,人们在使用分布式文件系统时,就像使用本地文件系统一样,无需关心数据是存储在哪个节点上、或者是从哪个节点从获取的

Hadoop Distributed File System,Hadoop分布式文件系统
在这里插入图片描述
硬件故障容错
HDFS被设计成可运行于由成千上万廉价的普通PC或者商用服务器组成的集群上,集群的每个组成部分都可能在运行时发生故障
HDFS会自动将数据保存多个副本
流式数据访问
面向大数据处理,采用的数据访问模式是一次写入、多次读取
适合批量处理,而不适合于与用户交互的应用
面向大数据集
支持大文件处理,不适合于小文件的处理
典型的HDFS文件大小达到GB到TB量级
大量的小文件将大量占用HDFS中NameNode节点用来存储文件系统文件目录等信息的空间
简化的一致性模型
一个文件一旦被创建和数据写入之后,除了增加之外便不能修改
当文件上传到Hadoop集群后,会进行文件切块、分发和复制等操作,如果文件被修改会导致重新触发这个过程

移动计算比移动数据更经济
HDFS提供接口支持代码向数据迁移
避免了大量数据的传输,消除了网络的拥堵
跨异构软硬件平台的可移植性
基于JAVA语言进行开发
易于从一个平台移植到另一个平台
文件分块
将大文件按照固定大小拆分成一个个数据块,然后将数据块发送到集群的不同节点进行存储
在初期数据块默认大小为64M,在Hadoop2.0之后数据块默认大小为128MB
不关心文件内容,仅根据内容在文件的偏移量(相对于文件头的偏移)来进行分割
可能会导致逻辑上的一个完整内容,在分割之后被分别存储于不同的数据块中

多副本机制
HDFS为每个数据块在集群中提供多个备份
默认的是同节点和同机架并行、三副本存储的模式
一个副本存储在用户所使用的机器节点
第二个副本存放在集群中与第一个副本处于不同的机架的机器节点上
第三个副本存放在与第二个副本同一个机架不同的机器节点上


在这里插入图片描述

在这里插入图片描述
命令格式
(1)列举一个目录的所有文件
hadoop fs –ls 目录的路径
(2)创建文件夹
hadoop fs –mkdir 文件夹的路径和名称
在这里插入图片描述
(3)将本地文件上传至HDFS
hadoop fs –put 本地文件路径 目标路径
在这里插入图片描述
(4)将文件从HDFS下载到本地文件系统
hadoop fs –get HDFS文件路径 本地存放路径
在这里插入图片描述
(5)查看文件的内容
hadoop fs –text(cat) HDFS文件的路径
在这里插入图片描述
(6)删除文件或者文件夹
hadoop fs –rm(rmr) HDFS中文件或者文件夹的路径

删除文件和空目录用rm命令,而删除文件夹则用rmr命令!!

在这里插入图片描述
Maven的pom.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
 
<!-- 如下的groupID、artifactID、version标签都是建立maven项目时所要填写的信息。这些信息需要针对自己所建立的maven项目进行修改 -->
<groupId>com.liu</groupId>
<artifactId>HDFSapp</artifactId>
<version>1.0-SNAPSHOT</version>
 
<!-- 示例所依赖的jar包都通过如下的标签给出 -->
<dependencies>
   <dependency>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-common</artifactId>
       <version>2.10.0</version>
   </dependency>
   <dependency>
       <groupId>org.apache.hadoop</groupId>
       <artifactId>hadoop-hdfs</artifactId>
       <version>2.10.0</version>
   </dependency>
</dependencies>
</project>

配置host.xml文件
在hdfs-site.xml文件中添加如下信息,并重启HDFS

<property>
  <name>dfs.permissions</name>
  <value>false</value>
</property>

java操作

IDEA+maven编写

import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.*;
import java.net.URI;

public class HDFSapp {
//指定默认的HDFS的路径
String hdfsURL = "hdfs://localhost:9000";
 
FileSystem fs=null;
Configuration configuration=null;
 
//构造函数
public HDFSapp(){
try{
configuration=new Configuration();
fs = FileSystem.get(URI.create(hdfsURL), configuration);
}catch (Exception e){
System.out.println("a exception");
}
}
//main函数
public static void main(String[] args) {
    HDFSapp hdfsclient = new HDFSapp();
    hdfsclient.mkdir();
    hdfsclient.create();
    hdfsclient.put();
    hdfsclient.get();
    hdfsclient.detele();
}
//在HDFS根目录下的dataset目录下创建一个test子目录
public void mkdir() {
    try {
       boolean maked=fs.mkdirs(new Path("/dataset/test"));
       System.out.println("a dir is created!");
       }catch (Exception e){
            System.out.println("a exception");
    }
}
//在HDFS根目录下的dataset目录下test子目录中创建一个文件
public void create() {
    try {
       FSDataOutputStream output=fs.create(new Path("/dataset/test/example.txt"));
       output.write("nihao".getBytes());
       output.flush();
       output.close();
       System.out.println("a file is created!");
    }catch (Exception e){
       System.out.println("a exception");
    }
}
//将本地“/home/hadoop/”路径下的文件example.txt上传到HDFS
//的“/dataset/test”路径下
public void put() {
    try {
       fs.copyFromLocalFile(new Path("/home/hadoop/example.txt"),
new Path("/dataset/test/"));
       System.out.println("a file is put to HDFS!");
       }catch (Exception e){
            System.out.println("a exception");
    }
}
//将HDFS“/dataset/test”路径下的example.txt文件下载到
//本地“/home/hadoop/”路径下
public void get() {
    try {
       fs.copyToLocalFile(new Path("/dataset/test/example.txt"),
new Path("/home/hadoop/"));
       System.out.println("a file is got from HDFS!");
       }catch (Exception e){
            System.out.println("a exception");
    }
}
 
//将HDFS“/dataset/test”路径下的example.txt文件删除
public void detele() {
    try {
       boolean delete = fs.delete(new Path("/dataset/test/example.txt"), true);
       System.out.println("a file is deleted!");
       }catch (Exception e){
            System.out.println("a exception");
    }
}


}
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值