HDFS的架构优势与基本操作

目录

  • 写在前面
  • 一、 HDFS概述
    • 1.1 HDFS简介
    • 1.2 HDFS优缺点
      • 1.2.1 优点
      • 1.2.2 缺点
    • 1.3 HDFS组成架构
    • 1.4 HDFS文件块大小
  • 二、HDFS的Shell操作(开发重点)
    • 2.1 基本语法
    • 2.2 命令大全
    • 2.3 常用命令实操
      • 2.3.1 上传
      • 2.3.2 下载
      • 2.3.3 HDFS直接操作
  • 三、HDFS的API操作
    • 3.1 配置Windows
    • 3.2 HDFS的API案例实操
      • 3.2.1 HDFS文件上传
      • 3.2.2 HDFS文件下载
      • 3.2.3 HDFS文件更名和移动
      • 3.2.4 HDFS删除文件和目录
      • 3.2.5 HDFS文件详情查看
      • 3.2.6 HDFS文件和文件夹判断
  • 写在最后

写在前面

如今,数据正以指数级增长,各行各业都在追求更多的数据存储、高效的数据处理和可靠的数据基础来驱动业务的发展。Hadoop Distributed File System(HDFS)作为Hadoop生态系统的核心组件之一,成为构建可靠的大数据基础的不二选择之一。本文将深入剖析HDFS的架构与优势。

一、 HDFS概述

1.1 HDFS简介

HDFS(Hadoop分布式文件系统)是Apache Hadoop框架的一部分,设计用于存储和处理大规模数据集的分布式文件系统。HDFS产生的背景主要是为了满足处理大规模数据的需求。

在过去,传统的文件系统难以处理大规模数据集,因为它们通常只能在单个服务器上存储和操作数据。随着大数据时代的到来,企业和组织面临着巨大的数据规模和复杂性。为了应对这个挑战,HDFS被开发出来作为一个高度可靠和高容量的分布式文件系统。

HDFS的设计目标是能够在廉价的硬件上运行,并且能够容纳上千台机器的集群。它通过将数据切分成多个块并将其分散存储在不同的计算节点上,实现了高吞吐量的数据访问和处理能力。此外,HDFS还提供了故障容错功能,能够自动处理存储节点的故障。

简而言之,HDFS是为了解决大规模数据处理问题而设计的,它提供了高可靠性、高扩展性和高吞吐量的分布式文件系统解决方案。

1.2 HDFS优缺点

1.2.1 优点

  • 高容错、高可用、高扩展
    • 数据冗余多副本、副本丢失后自动恢复
    • NameNode HA、安全模式
    • 10K节点规模,通过横向扩展来增加存储容量和处理能力。
  • 海量数据存储(高容量)
    • 典型文件大小GB~TB,百万以上文件数量,PB甚至EB以上数据规模
  • 构建成本低、安全可靠
    • 构建在廉价的商用服务器上,降低了存储成本和维护成本。
    • 通过多副本机制,提高可靠性
    • 提供了容错和恢复机制
  • 适合大规模离线批处理
    • 流式数据访问
    • 数据位置暴露给计算框架

1.2.2 缺点

  • 不适合低延迟数据访问
    • 对于实时数据访问和低延迟要求较高的场景,HDFS的性能可能不够理想
  • 不适合大量小文件存储
    • 元数据会占用NameNode大量存储空间
    • 磁盘寻道时间超过读取时间
  • 不支持并发写入
    • 一个文件同时只能有一个写,不允许多个线程同时写
  • 不支持文件随机修改
    • 仅支持数据追加

1.3 HDFS组成架构

在这里插入图片描述

  1. NameNode(nn):
    NameNode是HDFS的主节点(Master),负责管理整个文件系统的命名空间数据块的元数据信息。它维护文件系统的目录结构、文件的安全权限信息和数据块的位置信息等。NameNode还处理客户端的文件系统操作请求,如文件的读写和块的创建、复制和删除等。

  2. DataNode(dn):
    DataNode是HDFS的工作节点(Slave),负责实际存储文件数据和执行文件系统操作的任务。每个DataNode负责管理一定数量的数据块,并定期向NameNode报告数据块的存储信息。DataNode还处理来自客户端和其他DataNode的读取和写入请求,以及数据块的复制和恢复等。

  3. 客户端(Client):
    客户端是使用HDFS的应用程序。它们通过与Namenode和DataNode进行通信来读取和写入文件。客户端向NameNode请求文件的元数据信息,根据元数据信息确定所需数据块的位置,并从DataNode获取数据。客户端还负责处理文件系统的操作,如创建、删除、重命名和移动文件等。

1.4 HDFS文件块大小

HDFS中的文件在物理上是分成一个个数据块(Block)存储的,块的大小可以通过配置参数(dfs.blocksize)来规定,文件块默认大小是128M。

HDFS文件块的大小选择是根据以下考虑因素:

  • 吞吐量:较大的文件块大小在处理大文件时可以提供更高的吞吐量。这是因为较大的文件块减少了磁盘寻道和网络传输的开销,使得数据读取和写入能够更加高效。

  • 空间利用:较大的文件块可以减少存储元数据的开销。在HDFS中,每个文件块都有一条元数据记录,较小的文件块可能会导致元数据记录数量增加,增加了存储的开销。

  • 并行性:较大的文件块可以提高数据的并行处理能力。在HDFS中,数据块是独立存储和处理的,较大的文件块能够在不同的计算节点上并行处理,从而减少整个作业的执行时间。

较大的文件块适合存储大型文件和批量处理任务,但对于小型文件和实时数据处理,较小的文件块可能更加适合。

Q:为什么HDFS文件块的大小不能太大,也不能设置太小呢?
A: 文件块设置太小,会增加寻址的时间;设置太大,会导致数据处理非常慢。

HDFS文件块的大小设置取决于磁盘的传输速率

二、HDFS的Shell操作(开发重点)

2.1 基本语法

hadoop fs 具体命令 或者 hdfs dfs 具体命令

2.2 命令大全

[amo@hadoop102 hadoop-3.2.4]$ bin/hadoop fs
Usage: hadoop fs [generic options]
	[-appendToFile <localsrc> ... <dst>]
	[-cat [-ignoreCrc] <src> ...]
	[-checksum <src> ...]
	[-chgrp [-R] GROUP PATH...]
	[-chmod [-R] <MODE[,MODE]... | OCTALMODE> PATH...]
	[-chown [-R] [OWNER][:[GROUP]] PATH...]
	[-copyFromLocal [-f] [-p] [-l] [-d] [-t <thread count>] [-q <thread pool queue size>] <localsrc> ... <dst>]
	[-copyToLocal [-f] [-p] [-crc] [-ignoreCrc] [-t <thread count>] [-q <thread pool queue size>] <src> ... <localdst>]
	[-count [-q] [-h] [-v] [-t [<storage type>]] [-u] [-x] [-e] <path> ...]
	[-cp [-f] [-p | -p[topax]] [-d] [-t <thread count>] [-q <thread pool queue size>] <src> ... <dst>]
	[-createSnapshot <snapshotDir> [<snapshotName>]]
	[-deleteSnapshot <snapshotDir> <snapshotName>]
	[-df [-h] [<path> ...]]
	[-du [-s] [-h] [-v] [-x] <path> ...]
	[-expunge [-immediate]]
	[-find <path> ... <expression> ...]
	[-get [-f] [-p] [-crc] [-ignoreCrc] [-t <thread count>] [-q <thread pool queue size>] <src> ... <localdst>]
	[-getfacl [-R] <path>]
	[-getfattr [-R] {-n name | -d} [-e en] <path>]
	[-getmerge [-nl] [-skip-empty-file] <src> <localdst>]
	[-head <file>]
	[-help [cmd ...]]
	[-ls [-C] [-d] [-h] [-q] [-R] [-t] [-S] [-r] [-u] [-e] [<path> ...]]
	[-mkdir [-p] <path> ...]
	[-moveFromLocal [-f] [-p] [-l] [-d] <localsrc> ... <dst>]
	[-moveToLocal <src> <localdst>]
	[-mv <src> ... <dst>]
	[-put [-f] [-p] [-l] [-d] [-t <thread count>] [-q <thread pool queue size>] <localsrc> ... <dst>]
	[-renameSnapshot <snapshotDir> <oldName> <newName>]
	[-rm [-f] [-r|-R] [-skipTrash] [-safely] <src> ...]
	[-rmdir [--ignore-fail-on-non-empty] <dir> ...]
	[-setfacl [-R] [{-b|-k} {-m|-x <acl_spec>} <path>]|[--set <acl_spec> <path>]]
	[-setfattr {-n name [-v value] | -x name} <path>]
	[-setrep [-R] [-w] <rep> <path> ...]
	[-stat [format] <path> ...]
	[-tail [-f] [-s <sleep interval>] <file>]
	[-test -[defswrz] <path>]
	[-text [-ignoreCrc] <src> ...]
	[-touch [-a] [-m] [-t TIMESTAMP (yyyyMMdd:HHmmss) ] [-c] <path> ...]
	[-touchz <path> ...]
	[-truncate [-w] <length> <path> ...]
	[-usage [cmd ...]]

Generic options supported are:
-conf <configuration file>        specify an application configuration file
-D <property=value>               define a value for a given property
-fs <file:///|hdfs://namenode:port> specify default filesystem URL to use, overrides 'fs.defaultFS' property from configurations.
-jt <local|resourcemanager:port>  specify a ResourceManager
-files <file1,...>                specify a comma-separated list of files to be copied to the map reduce cluster
-libjars <jar1,...>               specify a comma-separated list of jar files to be included in the classpath
-archives <archive1,...>          specify a comma-separated list of archives to be unarchived on the compute machines

The general command line syntax is:
command [genericOptions] [commandOptions]

2.3 常用命令实操

  • 创建一个文件夹,用来操作命令
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -mkdir /amoxilin
  • help:输出这个命令参数
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -help rm

2.3.1 上传

  • -moveFromLocal:从本地剪切粘贴到HDFS
# 创建一个测试文件 test.txt,并输入一些内容
[amo@hadoop102 hadoop-3.2.4]$ vim test.txt

# 使用 moveFromLocal 命令将test.txt文件移动到 HDFS
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -moveFromLocal ./test.txt /amoxilin
  • -copyFromLocal:从本地文件系统中拷贝文件到HDFS路径去
[amo@hadoop102 hadoop-3.2.4]$ vim test1.txt
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -copyFromLocal test1.txt /amoxilin
  • -put:等同于copyFromLocal,生产环境更习惯用put
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -put test1.txt /amoxilin
  • -appendToFile:追加一个文件到已经存在的文件末尾
# 创建一个文件test2.txt 并输入内容: 123
[amo@hadoop102 hadoop-3.2.4]$ vim test2.txt

# 将文件 test2.txt 追加到test.txt文件末尾
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -appendToFile test2.txt /amoxilin/test.txt

在这里插入图片描述

2.3.2 下载

  • -copyToLocal: 从HDFS拷贝到本地
# 将 HDFS 中的test.txt文件copy下来
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -copyToLocal /amoxilin/test.txt ./
[amo@hadoop102 hadoop-3.2.4]$ ls  # 查看文件是否拷贝成功  文件夹中有 test.txt,拷贝成功
bin   etc      lib      LICENSE.txt  NOTICE.txt  sbin   test1.txt  test.txt  wcoutput
data  include  libexec  logs         README.txt  share  test2.txt  wcinput
[amo@hadoop102 hadoop-3.2.4]$ 
  • -get: 等同于copyToLocal,生产环境更习惯用get
# 将 HDFS 中的test.txt文件copy下来,并起一个其他的名字比如123.txt
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -get /amoxilin/test.txt ./123.txt
[amo@hadoop102 hadoop-3.2.4]$ ls
123.txt  etc      libexec      NOTICE.txt  share      test.txt
bin      include  LICENSE.txt  README.txt  test1.txt  wcinput
data     lib      logs         sbin        test2.txt  wcoutput
[amo@hadoop102 hadoop-3.2.4]$ 

2.3.3 HDFS直接操作

  • -ls: 显示目录信息
# 查看 HDFS 里amoxilin文件夹的目录结构
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -ls /amoxilin
Found 2 items
-rw-r--r--   3 amo supergroup          9 2024-03-07 23:33 /amoxilin/test.txt
-rw-r--r--   3 amo supergroup         49 2024-03-07 23:29 /amoxilin/test1.txt
  • -cat: 显示文件内容
# 查看某个文件的详细信息
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -cat /amoxilin/test.txt
test
123
  • -chgrp、-chmod、-chown: Linux文件系统中的用法一样,修改文件所属权限
# 修改文件的权限
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -chmod 666 /amoxilin/test.txt
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -ls /amoxilin
Found 2 items
-rw-rw-rw-   3 amo supergroup          9 2024-03-07 23:33 /amoxilin/test.txt
-rw-r--r--   3 amo supergroup         49 2024-03-07 23:29 /amoxilin/test1.txt
# 修改文件的group
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -chown amo:amo/amoxilin/test.txt
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -ls /amoxilin
Found 2 items
-rw-rw-rw-   3 amo amo                 9 2024-03-07 23:33 /amoxilin/test.txt
-rw-r--r--   3 amo supergroup         49 2024-03-07 23:29 /amoxilin/test1.txt

  • -mkdir: 创建路径
# 创建文件夹
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -mkdir /csdn
  • -cp: 从HDFS的一个路径拷贝到HDFS的另一个路径
# 复制文件
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -cp /amoxilin/test1.txt /csdn
  • -mv: 在HDFS目录中移动文件
# 移动文件
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -mv /amoxilin/test.txt /csdn
  • -tail: 显示一个文件的末尾1kb的数据
# 查看文件末尾内容
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -tail /amoxilin/test1.txt
欲买桂花同载酒,终不似,少年游!
[amo@hadoop102 hadoop-3.2.4]$ 
  • -rm: 删除文件或文件夹
# 删除
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -rm /amoxilin/test1.txt
Deleted /amoxilin/test1.txt
  • -rm -r: 递归删除目录及目录里面内容
# 递归删除
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -rm -r /amoxilin
Deleted /amoxilin
  • -u: 统计文件夹的大小信息
# 统计文件夹的大小
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -du -s -h /csdn
58  174  /csdn                                  # 58 是文件大小 文件有三个副本就是58*3=174
# 统计文件夹内各文件的大小
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -du -h /csdn
9   27   /csdn/test.txt
49  147  /csdn/test1.txt
  • -setrep: 设置HDFS中文件的副本数量
# 设置hdfs副本数量
[amo@hadoop102 hadoop-3.2.4]$ hadoop fs -setrep 5 /csdn/test1.txt
Replication 5 set: /csdn/test1.txt

在这里插入图片描述

这里设置的副本数只是记录在NameNode的元数据中,是否真的会有这么多副本,还得看DataNode的数量。因为目前只有3台设备,最多也就3个副本,只有节点数的增加到5台时,副本数才能达到5。

三、HDFS的API操作

3.1 配置Windows

  1. 解压Hadoop安装包到Windows系统 D:\hadoop-3.2.4
  2. 设置$HADOOP_HOME环境变量指向D:\hadoop-3.2.4
  3. 配置Path环境变量 %HADOOP_HOME%\bin
  4. 下载
  5. 将 hadoop.dll 和 winutils.exe 放入$HADOOP_HOME/bin 文件夹中

3.2 HDFS的API案例实操

  1. 在IDEA中创建一个Maven工程,并导入相应的依赖坐标以及日志
<dependencies>
    <dependency>
        <groupId>org.apache.hadoop</groupId>
        <artifactId>hadoop-client</artifactId>
        <version>3.2.4</version>
    </dependency>
    <dependency>
        <groupId>junit</groupId>
        <artifactId>junit</artifactId>
        <version>4.12</version>
    </dependency>
    <dependency>
        <groupId>org.slf4j</groupId>
        <artifactId>slf4j-log4j12</artifactId>
        <version>1.7.30</version>
    </dependency>
</dependencies>
  1. 创建HdfsClient类
public class HdfsClient {

    @Test
    public void test() throws IOException, URISyntaxException, InterruptedException {

		// 1 获取一个客户端实例
		// 参数1:hdfs文件系统地址
		// 参数2:配置文件
		// 参数3:用户
        FileSystem fs= FileSystem.get(new URI("hdfs://hadoop102:8020"),  new Configuration(), "amo");
        
        // 2 创建目录
        fs.mkdirs(new Path("/amxl"));

        // 3 关闭资源
        fs.close();
    }
}
  1. 执行程序
    在这里插入图片描述

3.2.1 HDFS文件上传

  1. 编写源代码
 // 文件上传
@Test
public void testCopyFromLocal() throws URISyntaxException, IOException, InterruptedException {

    // 1 获取一个客户端实例
    // 参数1:hdfs文件系统路径
    // 参数2:配置信息
    // 参数3:用户名
    FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"),  new Configuration(), "amo");

    // 2 使用客户端对象操作HDFS
    // copyFromLocalFile(是否删除源数据,是否覆盖目标数据,源数据路径,目标数据路径)
    fs.copyFromLocalFile(false, true, new Path("D:\\note.txt"),new Path("/amxl"));

    // 3 关闭资源
    fs.close();
}

在这里插入图片描述在这里插入图片描述
文件默认的副本为3

  1. 将hdfs-site.xml拷贝到项目的resources资源目录下,重新上传文件
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
	<property>
		<name>dfs.replication</name>
         <value>1</value>
	</property>
</configuration>

在这里插入图片描述在resources目录下自定义配置文件并设置文件副本数为1,发现此处配置文件参数的优先级是高于默认配置的文件的

  1. 代码中修改配置
@Test
public void testCopyFromLocal() throws URISyntaxException, IOException, InterruptedException {

    Configuration configuration = new Configuration();
    // 设置文件副本数为 2
    configuration.set("dfs.replication","2");
    FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"),  configuration, "amo");
    fs.copyFromLocalFile(false, true, new Path("D:\\note.txt"),new Path("/amxl"));
    fs.close();
}

在这里插入图片描述
重新上传文件,发现文件的副本数为2

  1. 小结
    参数优先级排序:客户端代码中设置的值 > resources下的用户自定义配置文件 >然后是服务器的自定义配置 >服务器的默认配置

3.2.2 HDFS文件下载

// 文件下载
@Test
public void testCopyToLocal() throws URISyntaxException, IOException, InterruptedException {

    // 1 获取配置信息以及加载配置 并获取一个客户端实例
    FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"),  new Configuration(), "amo");

    // 2 使用客户端对象操作 HDFS 将 note.txt文件下载到本地 D 盘
    // copyToLocalFile(是否删除源文件,下载的文件路径,文件下载的目标路径,是否开启文件校验)
    fs.copyToLocalFile(false,new Path("/amxl/note.txt"),new Path("D:\\"),true);

    // 3 关闭资源
    fs.close();
}

3.2.3 HDFS文件更名和移动

 // 文件移动和重命名
@Test
public void testRename() throws IOException, URISyntaxException, InterruptedException {

    // 1 获取配置信息以及加载配置 并获取一个客户端实例
    FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"), new Configuration(), "amo");

    // 2 文件重命名
    // rename(源文件名,目标文件名)
    fs.rename(new Path("/amxl/note.txt"), new Path("/amxl/note1.txt"));

    // 文件移动
    // rename(源文件路径,目标文件路径)
    fs.rename(new Path("/csdn/test1.txt"), new Path("/amxl/test.txt"));

    // 3 关闭资源
    fs.close();
}

移动前:
在这里插入图片描述

移动后:
在这里插入图片描述

3.2.4 HDFS删除文件和目录

// 删除文件和文件夹
@Test
public void testDelete() throws IOException, URISyntaxException, InterruptedException {

    // 1 获取配置信息以及加载配置 并获取一个客户端实例
    FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"), new Configuration(), "amo");

    // 2 文件删除
    // delete(路径)
    // delete(路径,是否递归)
    fs.delete(new Path("/amxl/note1.txt"), false);
    fs.delete(new Path("/csdn"), true);

    // 3 关闭资源
    fs.close();
}

删除前:
在这里插入图片描述
删除后:
在这里插入图片描述

3.2.5 HDFS文件详情查看

查看文件名称、权限、长度、块信息

// 查看文件详细信息
@Test
public void testGetFileStatus() throws IOException, URISyntaxException, InterruptedException {

    // 1 获取配置信息以及加载配置 并获取一个客户端实例
    FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"), new Configuration(), "amo");

    // 2 文件详细信息
    // listStatus(路径)
    // listStatus(路径,是否递归)
    RemoteIterator<LocatedFileStatus> listedFiles = fs.listFiles(new Path("/amxl"), true);

    while (listedFiles.hasNext()) {
        LocatedFileStatus next = listedFiles.next();
        System.out.println(next.getPath());
        System.out.println(next.getPermission());
        System.out.println(next.getOwner());
        System.out.println(next.getGroup());
        System.out.println(next.getLen());
        System.out.println(next.getModificationTime());
        System.out.println(next.getReplication());
        System.out.println(next.getBlockSize());
        
		// 获取块信息
        BlockLocation[] blockLocations = next.getBlockLocations();
        System.out.println(Arrays.toString(blockLocations));
    }

    // 3 关闭资源
    fs.close();
}

// -----------------------------------------------------------------------------------------

// 输出
hdfs://hadoop102:8020/amxl/test.txt
rw-r--r--
amo
supergroup
49
1709910523258
5
134217728
[0,49,hadoop104,hadoop103,hadoop102]

3.2.6 HDFS文件和文件夹判断

 // 判断文件夹和文件
@Test
public void testListFiles() throws IOException, URISyntaxException, InterruptedException {

    // 1 获取配置信息以及加载配置 并获取一个客户端实例
    FileSystem fs = FileSystem.get(new URI("hdfs://hadoop102:8020"), new Configuration(), "guo");

    // 2 判断文件夹和文件
    // listStatus(路径)
    FileStatus[] fileStatuses = fs.listStatus(new Path("/"));
    for (FileStatus fileStatus : fileStatuses) {
        // 判断是否是文件
        if(fileStatus.isFile()) {
            System.out.println("文件:" + fileStatus.getPath().getName());
        }else {
            System.out.println("文件夹:" + fileStatus.getPath().getName());
        }
    }
//        FileStatus[] fileStatuses = fs.listStatus(new Path("/"));
//
//        for (FileStatus fileStatus : fileStatuses) {
//            // 判断是否是文件夹
//            if (fileStatus.isFile()) {
//                System.out.println("文件:" + fileStatus.getPath().getName());
//            }
//            if (fileStatus.isDirectory()) {
//                System.out.println("文件夹:" + fileStatus.getPath().getName());
//            }
//        }
    // 3 关闭资源
    fs.close();
}

在这里插入图片描述


写在最后

总的来说,HDFS架构的优势和基本操作使其成为构建可靠的大数据基础的理想选择。它的高可靠性、高扩展性和高效的数据访问方式,为处理大规模数据提供了强大的支持,并通过Shell操作和API操作,方便用户管理和操作存储在HDFS中的数据。

  • 94
    点赞
  • 90
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 63
    评论
第1章 绪论 1 1.1 云计算的概念 1 1.2 云计算发展现状 3 1.3 云计算实现机制 5 1.4 网格计算与云计算 6 1.5 云计算的发展环境 9 1.5.1 云计算与3G 9 1.5.2 云计算与物联网 9 1.5.3 云计算与移动互联网 10 1.5.4 云计算与三网融合 11 1.6 云计算压倒性的成本优势 12 习题 15 参考文献 15 第2章 Google云计算原理与应用 17 2.1 Google文件系统GFS 17 2.1.1 系统架构 18 2.1.2 容错机制 20 2.1.3 系统管理技术 20 2.2 分布式数据处理MapReduce 21 2.2.1 产生背景 21 2.2.2 编程模型 22 2.2.3 实现机制 22 2.2.4 案例分析 24 2.3 分布式锁服务Chubby 25 2.3.1 Paxos算法 26 2.3.2 Chubby系统设计 27 2.3.3 Chubby中的Paxos 29 2.3.4 Chubby文件系统 31 2.3.5 通信协议 32 2.3.6 正确性与性能 34 2.4 分布式结构化数据表Bigtable 35 2.4.1 设计动机与目标 35 2.4.2 数据模型 36 2.4.3 系统架构 37 2.4.4 主服务器 38 2.4.5 子表服务器 39 2.4.6 性能优化 42 2.5 分布式存储系统Megastore 43 2.5.1 设计目标及方案选择 44 2.5.2 Megastore数据模型 44 2.5.3 Megastore中的事务及并发控制 46 2.5.4 Megastore基本架构 47 2.5.5 核心技术——复制 49 2.5.6 产品性能及控制措施 52 2.6 大规模分布式系统的监控基础架构Dapper 54 2.6.1 基本设计目标 54 2.6.2 Dapper监控系统简介 54 2.6.3 关键性技术 57 2.6.4 常用Dapper工具 58 2.6.5 Dapper使用经验 60 2.7 Google应用程序引擎 62 2.7.1 Google App Engine简介 62 2.7.2 应用程序环境 63 2.7.3 Google App Engine服务 65 2.7.4 Google App Engine编程实践 72 习题 86 参考文献 86 第3章 Amazon云计算AWS 88 3.1 Amazon平台基础存储架构:Dynamo 88 3.1.1 Dynamo在Amazon服务平台的地位 88 3.1.2 Dynamo架构的主要技术 89 3.2 弹性计算云EC2 97 3.2.1 EC2的主要特性 97 3.2.2 EC2基本架构及主要概念 97 3.2.3 EC2的关键技术 99 3.3.4 EC2安全及容错机制 101 3.3 简单存储服务S3 102 3.3.1 基本概念和操作 102 3.3.2 数据一致性模型 104 3.3.3 S3安全措施 105 3.4 简单队列服务SQS 107 3.4.1 SQS基本模型 107 3.4.2 两个重要概念 107 3.4.3 消息 108 3.4.4 身份认证 109 3.5 简单数据库服务Simple DB 109 3.5.1 重要概念 110 3.5.2 存在的问题及解决办法 112 3.5.3 Simple DB和其他AWS的结合使用 112 3.6 关系数据库服务RDS 113 3.6.1 SQL和NoSQL数据库的对比 113 3.6.2 RDS数据库原理 114 3.6.3 RDS的使用 115 3.7 内容推送服务CloudFront 115 3.7.1 内容推送网络CDN 115 3.7.2 云内容推送CloudFront 117 3.8 其他Amazon云计算服务 119 3.8.1 快速应用部署Elastic Beanstalk和服务模板CloudFormation 119 3.8.2 云中的DNS服务 Router 53 119 3.8.3 虚拟私有云VPC 120 3.8.4 简单通知服务SNS和简单邮件服务SES 120 3.8.5 弹性MapReduce服务 120 3.8.6 电子商务服务DevPay、FPS和Simple Pay 122 3.8.7 Amazon执行网络服务 126 3.8.8 土耳其机器人 127 3.8.9 Alexa Web服务 128 3.9 AWS应用实例 129 3.9.1 在线照片存储共享网站SmugMug 129 3.9.2 在线视频制作网站Animoto 130 3.10 小结 131 习题 131 参考文献 131 第4章 微软云计算Windows Azure 135 4.1 微软云计算平台 135 4.2 微软云操作系统Windows Azure 136 4.2.1 Windows Azure概述 136 4.2.2 Windows Azure计算服务 137 4.2.3 Windows Azure存储服务 138 4.2.4 Windows Azure Connect 152 4.2.5 Windows Azure CDN 153 4.2.6 Fabric控制器 153 4.2.7 Windows Azure应用场景 155 4.3 微软云关系数据库SQL Azure 157 4.3.1 SQL Azure概述 157 4.3.2 SQL Azure关键技术 158 4.3.3 SQL Azure应用场景 160 4.3.4 SQL Azure和SQL Server对比 162 4.4 Windows Azure AppFabric 163 4.4.1 AppFabric概述 163 4.4.2 AppFabric关键技术 164 4.5 Windows Azure Marketplace 167 4.6 微软云计算编程实践 168 4.6.1 利用Visual Studio2010开发简单的云应用程序 168 4.6.2 向Windows Azure平台发布应用程序 170 习题 173 参考文献 173 第5章 VMware云计算 174 5.1 VMware云产品简介 174 5.1.1 VMware云战略三层架构 174 5.1.2 VMware vSphere架构 175 5.1.3 云操作系统vSphere 176 5.1.4 底层架构服务vCloud Service Director 177 5.1.5 虚拟桌面产品VMware View 178 5.2 云管理平台 vCenter 179 5.2.1 虚拟机迁移工具 179 5.2.2 虚拟机数据备份恢复工具 181 5.2.3 虚拟机安全工具 181 5.2.4 可靠性组件FT和HA 182 5.3 云架构服务提供平台vCloud Service Director 182 5.3.1 创建虚拟数据中心和组织 183 5.3.2 网络的设计 184 5.3.3 目录管理 184 5.3.4 计费功能 184 5.4 VMware的网络和存储虚拟化 184 5.4.1 网络虚拟化 184 5.4.2 存储虚拟化 186 习题 188 参考文献 188 第6章 Hadoop:Google云计算的开源实现 189 6.1 Hadoop简介 189 6.2 Hadoop分布式文件系统HDFS 190 6.2.1 设计前提与目标 190 6.2.2 体系结构 191 6.2.3 保障可靠性的措施 192 6.2.4 提升性能的措施 194 6.2.5 访问接口 195 6.3 分布式数据处理MapReduce 196 6.3.1 逻辑模型 196 6.3.2 实现机制 196 6.4 分布式结构化数据表HBase 197 6.4.1 逻辑模型 198 6.4.2 物理模型 198 6.4.3 子表服务器 199 6.4.4 主服务器 199 6.4.5 元数据表 200 6.5 Hadoop安装 200 6.5.1 在Linux系统中安装Hadoop 200 6.5.2 在Windows系统中安装Hadoop 208 6.6 HDFS使用 215 6.6.1 HDFS 常用命令 215 6.6.2 HDFS 基准测试 219 6.7 HBase安装使用 219 6.7.1 HBase的安装配置 219 6.7.2 HBase的执行 220 6.7.3 Hbase编程实例 221 6.8 MapReduce编程 223 6.8.1 矩阵相乘算法设计 223 6.8.2 编程实现 224 习题 226 参考文献 226 第7章 Eucalyptus:Amazon云计算的开源实现 228 7.1 Eucalyptus简介 228 7.2 Eucalyptus技术实现 229 7.2.1 体系结构 229 7.2.2 主要构件 230 7.2.3 访问接口 230 7.2.4 服务等级协议 231 7.2.5 虚拟组网 232 7.3 Eucalyptus安装与使用 233 7.3.1 在Linux系统中安装Eucalyptus 233 7.3.2 Eucalyptus配置和管理 236 7.3.3 Eucalyptus常用命令的示例和说明 238 习题 240 参考文献 240 第8章 其他开源云计算系统 241 8.1 简介 241 8.1.1 Cassandra 241 8.1.2 Hive 242 8.1.3 VoltDB 242 8.1.4 Enomaly ECP 243 8.1.5 Nimbus 244 8.1.6 Sector and Sphere 245 8.1.7 abiquo 247 8.1.8 MongoDB 247 8.2 Cassandra 249 8.2.1 体系结构 249 8.2.2 数据模型 250 8.2.3 存储机制 251 8.2.4 读/写删过程 252 8.3 Hive 254 8.3.1 整体构架 254 8.3.2 数据模型 255 8.3.3 HQL语言 257 8.3.4 环境搭建 259 8.4 VoltDB 260 8.4.1 整体架构 260 8.4.2 自动数据分片技术 261 习题 264 参考文献 264 第9章 云计算仿真器CloudSim 265 9.1 CloudSim简介 265 9.2 CloudSim体系结构 265 9.2.1 CloudSim核心模拟引擎 266 9.2.2 CloudSim层 268 9.2.3 用户代码层 271 9.3 CloudSim技术实现 271 9.4 CloudSim的使用方法 274 9.4.1 环境配置 274 9.4.2 运行样例程序 274 9.5 CloudSim的扩展 277 9.5.1 调度策略的扩展 277 9.5.2 仿真核心代码 280 9.5.3 平台重编译 286 习题 287 参考文献 287 第10章 云计算研究热点 288 10.1 云计算体系结构研究 288 10.1.1 Youseff划分方法 288 10.1.2 Lenk划分方法 290 10.2 云计算关键技术研究 292 10.2.1 虚拟化技术 292 10.2.2 数据存储技术 293 10.2.3 资源管理技术 295 10.2.4 能耗管理技术 298 10.2.5 云监测技术 301 10.3 编程模型研究 303 10.3.1 All-Pairs编程模型 303 10.3.2 GridBatch编程模型 304 10.3.3 其他编程模型 305 10.4 支撑平台研究 306 10.4.1 Cumulus:数据中心科学云 306 10.4.2 CARMEN:e-Science云计算 307 10.4.3 RESERVOIR:云服务融合平台 308 10.4.4 TPlatform:Hadoop的变种 309 10.4.5 P2P环境的MapReduce 309 10.4.6 Yahoo云计算平台 311 10.4.7 微软的Dryad框架 311 10.4.8 Neptune框架 312 10.5 应用研究 313 10.5.1 语义分析应用 313 10.5.2 生物学应用 314 10.5.3 数据库应用 315 10.5.4 地理信息应用 316 10.5.5 商业应用 317 10.5.6 医学应用 318 10.5.7 社会智能应用 319 10.6 云安全研究 321 10.6.1 Anti-Spam Grid:反垃圾邮件网格 321 10.6.2 CloudAV:终端恶意软件检测 323 10.6.3 AMSDS:恶意软件签名自动检测 324 10.6.4 CloudSEC:协作安全服务体系结构 325 习题 327 参考文献 327 第11章 总结与展望 332 11.1 主流商业云计算解决方案比较 332 11.1.1 应用场景 332 11.1.2 使用流程 334 11.1.3 体系结构 335 11.1.4 实现技术 335 11.1.5 核心业务 336 11.2 主流开源云计算系统比较 338 11.2.1 开发目的 338 11.2.2 体系结构 339 11.2.3 实现技术 340 11.2.4 核心服务 340 11.3 国内代表性云计算平台比较 341 11.3.1 中国移动“大云” 341 11.3.2 阿里巴巴“阿里云” 343 11.3.3 “大云”与“阿里云”的比较 343 11.4 云计算的历史坐标与发展方向 344 11.4.1 互联网发展的阶段划分 344 11.4.2 云格(Gloud)——云计算的未来 347 习题 349 参考文献 349
⼤数据学习计划 ⼤数据学习计划 ⼤数据如此⽕热的现在,想必许多⼩伙伴都想要加⼊这个⾏业。也是我们今天就要拿出收藏已久的⼤数据学习计划。帮助你不⾛弯路,迈向 ⼤数据 1 ⼤数据应⽤离不开基础软件的⽀撑,且⼤部分⼤数据组件部署在 Linux 操作系统上的⽤户空间,也有很多组件也借鉴了Linux 操作系统的⼀ 些设计精髓,所以 Linux 既是⼤数据的强⼒⽀撑,也是很多性能问题的⽀撑者。 同时数据库的相关知识也是必要的基础,熟悉 MySQL 数据库的安装与部署,还有备份和恢复等都是重点。 所以在第⼀部分的学习中我们需要达到以下⽬标: 1、通过对 Linux 操作系统体系结构、 服务管理、包管理、NTP 协议时间 服务器、关系型数据库理论和 MySQL 数据库等相关知识的学习, 掌握⼤部分安装部署 Hadoop 集群操作系统层⾯的技能,为后续搭建 Hdoop 集群、对 ⽐ RDBMS 与 NoSQL 数据库打基 础。 2、通过对 Linux ⽂件系统、(⼤数据学习群142974151】内核参数、内存结构、以及 Java 虚 拟机等相关知识的学习,为后续学习分布式 ⽂件系统, Hadoop 集群优化扫清操作系统层 ⾯知识的障碍 2 Hadoop 由许多元素构成。其最底部是HDFS,它存储 Hadoop 集群中所有存储节点上的⽂件。HDFS(对于本⽂)的上⼀层是MapReduce 引 擎,通过对Hadoop分布式计算平台最核⼼的分布式⽂件系统HDFS、MapReduce处理过程,以及数据仓库⼯具Hive和分布式数据库Hbase 的介绍,基本涵盖了Hadoop分布式平台的所有技术核⼼。 还有Flume是Cloudera提供的⼀个⾼可⽤的,⾼可靠的,分布式的海量⽇志采集、聚合和传输的系统,Flume⽀持在⽇志系统中定制各类数 据发送⽅,⽤于收集数据。在⼤数据中也起到⼀定作⽤。 本模块通过学习HDFS,YARN(MapReduce)Spark 等核 ⼼组件,了解Hadoop 的基本运⾏框架。 所以在第⼆部分的学习中我们需要达到以下⽬标: 1、 搭建单节点模拟分布式集群,熟悉 HDFS 命令; 掌握 HDFS 体系结 构,读写流程,能 dump HDFS 元 数据⽂件; 理解 Flume 组件架构, 并能⽤ Flume 向 HDFS 平台导⼊⽂ 本⽇志; 2、 搭建多节点、可扩展集群; 部署 HDFS HA 架构; 理解并实现 Hadoop YARN 的多 租户架构 掌握 Zookeeper 组件原理; 掌握 Hadoop 集群优化路径; 3 传统数据仓库在⾯对更⼤规模数据时显得⼒不从⼼,在寄希望于⼤数据平台时,MapReduce 编程门槛让很多数据分析师望⽽却步,⽽Hive 是基于Hadoop的⼀个数据仓库⼯具,可以将结构化的数据⽂件映射为⼀张数据库表,并提供简单的sql查询功能,可以将sql语句转换为 MapReduce任务进⾏运⾏。 其优点是学习成本低,⼤数据学习kou群74零零加【41三⼋yi】可以通过类SQL语句快速实现简单的 MapReduce统计,不必开发专门的MapReduce应⽤,⼗分适合数据仓库的统计分析。 本模块通过学习 Hive、Impala 等⼤数据 SQL 分析组件,让⽤户将隐匿在泥沙之下的数据价值挖掘出来。 所以在第三部分的学习中我们需要达到以下⽬标: 1、 安装部署 Hive; 理解 Hive 架构及执⾏原理 ; Hive 的优化(分区、桶) ; Hive SQL 语句优化; Hive 常见故障诊断; 4 在上个模块中,OLAP 类型的需求得到了很好的解决⽅案,即针对数据查询分析的应⽤。但是这些组件对于数据的随机删改并不擅长。针对 此种 OLTP 类型应⽤,⼤数据⽣态系统中有另外⼀类 组件处理这样的问题,那就是 NoSQL 家族。这部分将介绍 NoSQL 的数据模型和分 类,着重讲述最具代表的 HBase。 ZooKeeper是⼀个分布式的,开放源码的分布式应⽤程序协调服务,,是Hadoop和Hbase的重要组件。它是⼀个为分布式应⽤提供⼀致性 服务的软件,提供的功能包括:配置维护、名字服务、分布式同步、组服务等。在本部分也会涉及。 所以在第四部分的学习中我们需要达到以下⽬标: 1 理解HBase 体系结构⽔平扩展的 优势; 部署 HBase ; 设计 HBase 表; 在这⾥我还是要推荐下我⾃⼰建的⼤数据学习交流qq裙: 142974151, 裙 ⾥都是学⼤数据开发的,如果你正在学习⼤数据 ,欢迎你加⼊, ⼤家都是软件开发党,不定期分享⼲货(只有⼤数据开发相关的),包括我⾃⼰整理的⼀份2019最新的⼤数据进阶资料和⾼级开发教程,欢 迎进阶中和进想深⼊⼤数据的⼩伙伴 2 理解 zookeeper 在 HBase集群
ྒߌྐ༏॓࠯čഈݚĎႵཋ܄ඳ Transwarp Inceptor ࠯ඌϢ௃඀ 2014 TRANSWARP 星环科技 HadoopHDFS和Map/Reduce组成。HDFS仍然是一个高可扩展的分布式文件系统,是大数据软件栈的基 石。Map/Reduce在处理PB级别的数据时,仍然具有高容错性、高吞吐量的特点。但由于复杂的工作流通常需 要多个阶段的Map/Reduce任务,而Map/Reduce的输入输出必须经过低速磁盘,导致运行复杂迭代任务时非常 低效,因此不适合对延时要求高的交互式分析或者需要复杂迭代的数据分析任务。而Spark是一个基于内存计算 的开源集群计算系统,目的是更快速地进行数据分析。 Spark 提供了与Hadoop Map/Reduce 相似的分布式计 算框架,但却有基于内存和迭代优化的设计,因此在交互式数据分析和数据挖掘工作负载中表现更优秀。 随着对大数据技术研究的深入,Spark开源生态系统得到了快速发展,已成为大数据领域最活跃的开源项目 之一。Spark之所以吸引如此多的关注,究其原因主要是因为Spark具有以下三方面特征: 虽然Spark具有以上三大优点,但从目前Spark的发展和应用现状来看,Spark自身也存在很多缺陷,主要 包括以下几个方面: 因此,尽管Spark正活跃在众多大数据公司的技术体系中,但是如果Spark本身的这些缺陷得不到及时处理, 将会严重影响Spark的普及和发展。星环科技有针对性的开发,推出了一系列关于Spark的大数据平台技术方案, 这些难题便迎刃而解。 星环科技推出的基于Spark的交互式分析引擎Inceptor,从下往上分三层架构,最底层是分布式缓存( Transwarp Holodesk),可建在内存或者SSD上;中间层是Apache Spark计算引擎层;最上层包括SQL 2003 和PL/SQL编译器、统计算法库和机器学习算法库,提供完整的R语言访问接口。 高性能:Spark对分布的数据集进行抽象,创新地提出RDD(Resilient Distributed Dataset)的概念,所有的统 计分析任务被翻译成对RDD的若干基本操作组成的有向无环图(DAG)。RDD可以被驻留在内存中,后续的任 务可以直接读取内存中的数据;同时分析DAG中任务之间的依赖性可以把相邻的任务合并,从而减少了大量 的中间结果输出,极大减少了磁盘I/O,使得复杂数据分析任务更高效。从这个意义上来说,如果任务够复杂, 迭代次数够多,Spark比Map/Reduce快一到两个数量级。 高灵活性:Spark是一个灵活的计算框架,适合做批处理、工作流、交互式分析、迭代式机器学习、流处理等 不同类型的应用,因此Spark可以成为一个用途广泛的计算引擎,并在未来取代Map/Reduce的地位。 与Hadoop生态完美融合:Spark可以与Hadoop生态系统的很多组件互操作。Spark可以运行在新一代资源管 理框架YARN上,它还可以读取已有的存放在Hadoop上的数据,这是个非常大的优势。 稳定性:由于代码质量问题,Spark长时间运行会经常出错,在架构方面,由于大量数据被缓存在内存中, Java垃圾回收缓慢的现象严重,导致Spark的性能不稳定,在复杂场景SQL的性能甚至不如现有Map/Reduce。 不能处理大数据:单台机器处理数据过大,或者由于数据倾斜导致中间结果超过内存大小时,常常出现内存 不够或者无法运行得出结果。但是Map/Reduce计算框架却可以处理大数据,因此在这方面Spark不如Map/Reduce 有效。 不支持复杂的SQL统计:目前Spark支持的SQL语法的完整程度还不能应用在复杂数据分析中。在可管理性 方面,Spark与YARN的结合不完善,这就在用户使用过程中埋下隐患,易出现各种难题。 基于Spark的交互式分析引擎 技术解析 基于Spark的交互式分析引擎技术解析 2014 TRANSWARP 星环科技 Transwarp Inceptor对Spark进行了大量的改进,具有高性能、稳定性好、功能丰富、易管理等特征,可以 切实解决Spark本身存在的难题。具体而言,星环Inceptor具有以下几点优势: 高性能 首先,支持高性能Apache Spark作为缺省执行引擎,可比原生的Hadoop Map/Reduce快;其次,通过建立 独立于Spark的分布式列式缓存层,可以有效防止GC的影响,消除Spark的性能波动,同时在列式缓存上实现 索引机制,进一步提高了执行性能;再次,在SQL执行计划优化方面,实现了基于代价的优化器(cost based optimizer)以及多种优化策略,性能可以比原生Spark快数倍;最后通过全新的方法解决数据倾斜或者数据量过 大的问题
五种⼤数据架构简介 ⼤数据是收集、整理、处理⼤容量数据集,并从中获得见解所需的⾮传统战略和技术的总称。虽然处理数据所需的计算能⼒或存储容量早已 超过⼀台计算机的上限,但这种计算类型的普遍性、规模,以及价值在最近⼏年才经历了⼤规模扩展。 本⽂将介绍⼤数据系统⼀个最基本的组件:处理框架。处理框架负责对系统中的数据进⾏计算,例如处理从⾮易失存储中读取的数据,或处 理刚刚摄⼊到系统中的数据。数据的计算则是指从⼤量单⼀数据点中提取信息和见解的过程。 下⽂将介绍这些框架: · 仅批处理框架: Apache Hadoop · 仅流处理框架: Apache Storm Apache Samza · 混合框架: Apache Spark Apache Flink ⼤数据处理框架是什么? ⼤数据处理框架是什么? 处理框架和处理引擎负责对数据系统中的数据进⾏计算。虽然"引擎"和"框架"之间的区别没有什么权威的定义,但⼤部分时候可以将前 者定义为实际负责处理数据操作的组件,后者则可定义为承担类似作⽤的⼀系列组件。 例如Apache Hadoop可以看作⼀种以MapReduce作为默认处理引擎的处理框架。引擎和框架通常可以相互替换或同时使⽤。例如另⼀个 框架Apache Spark可以纳⼊Hadoop并取代MapReduce。组件之间的这种互操作性是⼤数据系统灵活性如此之⾼的原因之⼀。 虽然负责处理⽣命周期内这⼀阶段数据的系统通常都很复杂,但从⼴义层⾯来看它们的⽬标是⾮常⼀致的:通过对数据执⾏操作提⾼理解能 ⼒,揭⽰出数据蕴含的模式,并针对复杂互动获得见解。 为了简化这些组件的讨论,我们会通过不同处理框架的设计意图,按照所处理的数据状态对其进⾏分类。⼀些系统可以⽤批处理⽅式处理数 据,⼀些系统可以⽤流⽅式处理连续不断流⼊系统的数据。此外还有⼀些系统可以同时处理这两类数据。 在深⼊介绍不同实现的指标和结论之前,⾸先需要对不同处理类型的概念进⾏⼀个简单的介绍。 批处理系统 批处理系统 批处理在⼤数据世界有着悠久的历史。批处理主要操作⼤容量静态数据集,并在计算过程完成后返回结果。 批处理模式中使⽤的数据集通常符合下列特征… · 有界:批处理数据集代表数据的有限集合 · 持久:数据通常始终存储在某种类型的持久存储位置中 · ⼤量:批处理操作通常是处理极为海量数据集的唯⼀⽅法 批处理⾮常适合需要访问全套记录才能完成的计算⼯作。例如在计算总数和平均数时,必须将数据集作为⼀个整体加以处理,⽽不能将其视 作多条记录的集合。这些操作要求在计算进⾏过程中数据维持⾃⼰的状态。 需要处理⼤量数据的任务通常最适合⽤批处理操作进⾏处理。⽆论直接从持久存储设备处理数据集,或⾸先将数据集载⼊内存,批处理系统 在设计过程中就充分考虑了数据的量,可提供充⾜的处理资源。由于批处理在应对⼤量持久数据⽅⾯的表现极为出⾊,因此经常被⽤于对历 史数据进⾏分析。 ⼤量数据的处理需要付出⼤量时间,因此批处理不适合对处理时间要求较⾼的场合。 Apache Hadoop Apache Hadoop是⼀种专⽤于批处理的处理框架。Hadoop是⾸个在开源社区获得极⼤关注的⼤数据框架。基于⾕歌有关海量数据处理所 发表的多篇论⽂与经验的Hadoop重新实现了相关算法和组件堆栈,让⼤规模批处理技术变得更易⽤。 新版Hadoop包含多个组件,即多个层,通过配合使⽤可处理批数据: · HDFSHDFS是⼀种分布式⽂件系统层,可对集群节点间的存储和复制进⾏协调。HDFS确保了⽆法避免的节点故障发⽣后数据依然可 ⽤,可将其⽤作数据来源,可⽤于存储中间态的处理结果,并可存储计算的最终结果。 · YARN:YARN是Yet Another Resource Negotiator(另⼀个资源管理器)的缩写,可充当Hadoop堆栈的集群协调组件。该组件负 责协调并管理底层资源和调度作业的运⾏。通过充当集群资源的接⼝,YARN使得⽤户能在Hadoop集群中使⽤⽐以往的迭代⽅式运⾏更多 类型的⼯作负载。 · MapReduce:MapReduce是Hadoop的原⽣批处理引擎。 批处理模式 批处理模式 Hadoop的处理功能来⾃MapReduce引擎。MapReduce的处理技术符合使⽤键值对的map、shuffle、reduce算法要求。基本处理过程 包括: · 从HDFS⽂件系统读取数据集 · 将数据集拆分成⼩块并分配给所有可⽤节点 · 针对每个节点上的数据⼦集进⾏计算(计算的中间态结果会重新写⼊HDFS) · 重新分配中间态结果并按照键进⾏分组 · 通过对每个节点计算的结果进⾏汇总和组合对每个键的值进⾏"Reducing" · 将计算⽽来的最终结果重新写⼊ HDFS 优势和局限 由于这种⽅法严重依赖持久存储,每个任务需要多次执

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 63
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

阿莫 夕林

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值