美文网首页
【大数据】Hadoop基础

【大数据】Hadoop基础

作者: 全村滴希望 | 来源:发表于2020-02-21 16:24 被阅读0次

Hadoop是什么

Hadoop是一个开源的大数据框架
Hapdoop是一个分布式计算的解决方案
Hadoop=HDFS(分布式文件系统)+MapReduce(分布式计算)

Hadoop的核心

HDFS分布式文件系用:存储是大数据技术的基础
MapReduce编程模型:分布式计算时大数据应用的解决方案

通俗的理解就是。 如果有一个很大的任务, 单机很难完成, 所以要用到分布式, 就是有一台主节点机器(服务器), 有很多从节点机器(服务器), 然后主节点给多个从节点分配任务, 把一个大任务分成很多小任务, 给每个从节点去完成, 然后主节点机器收集每个从节点的结果, 处理得出最终结果, hadoop就是一个完成了这个事情的框架...
HDFS是这个框架的文件系统,就像平时常见的NTFS、FAT32这种文件系统一样,他对于特别大的文件支持比较好。
然后MapReduce是什么呢, 这个分为Map和Reduce, Map就是分配任务, 把一个大任务分配成小任务, 这个叫map, 然后Reduce就是把每个小任务得到的结果汇总起来, 处理这些结果。

HDFS简介

HDFS可以横跨成百上千的机器,这样可以让操作者感觉到只在对一台机器进行操作一样,它可以存储按TB甚至PB为单位的大量的数据,并且获取存储的文件十分简单便捷。

HDFS的一些概念
数据块
存储在HDFS上的文件是以数据块为单位来进行存储的(数据块是抽象块而非整个文件作为存储单元)
默认大小为64MB,一般设置为128M,备份*3
比如存一个10MB的文件,就需要存一个数据块block,比如存一个300MB的文件,可能需要存3个数据块block。

NameNode
上面讲到的分布式就是一个主从模式,那么NameNode就是主,DataNode就是从。
NameNode管理文件系统的命名空间,存放文件元数据。维护着文件系统的所有文件和目录,文件与数据块的映射。并且它会记录每个文件中各个数据块所在数据节点的信息。

DataNode
DataNode其实就是众多工作节点,它负责存储并检索数据块,NameNode需要的时候它能检索出来,并且它要向NameNode更新它当前存储块的列表,要让NameNode知道数据块都在哪。

HDFS优点

适合大文件存储,支持TB、PB级的数据存储,并有副本策略。
可以构建在廉价的机器上,并有一定的容错和恢复机制。
支持流式数据访问,一次写入,多次读取最高效。

HDFS缺点

不适合大量小文件存储。
不适合并发写入,不支持文件随机修改。
不支持随机读等低延时的访问方式。

HDFS写流程

客户端向 Namenode发起写数据请求。
分块写入 Datanode节点, Datanode自动完成副本备份。
DataNode向Namenode汇报存储完成, Namenode通知客户端。

比如说,现在有一个文件叫xl,客户端发起请求给NameNode说我要存这个文件,备份3份。然后NameNode去检查有DataNode-1和DataNode-2以及DataNode-3这三个节点还有空间去存。于是NameNode就把这个信息反馈给客户端,客户端就把xl这个文件分割成xl-a和xl-b这两个块。然后客户端会根据NameNode的信息把xl-a传给DataNode-1, DataNode-1存下来后一看是要备份三份,然后原模原样再传给DataNode-2和DataNode-3. 三个DataNode都存储完以后,会一起给NameNode发信息,告知NameNode更新元数据信息的列表。NameNode更新完后告知客户端xl-a存储完毕,然后客户端开始重复上面的流程,存储xl-b这个块。

HDFS读流程

客户端向NameNode发起读数据请求。
NameNode找出最近的DataNode节点信息。
客户端从DataNode分块下载文件。

比如说,现在客户端要读刚刚存储的文件xl,客户端发起请求给NameNode说我要读这个文件。然后NameNode告诉客户端这个文件所属块的都在那三个DataNode上, 那么此时客户端就会选择一个最近的比如说是DataNode-1,把数据块xl-a和xl-b读取回来。如果DataNode-1挂了,那么客户端就需要选择DataNode-2来读取数据。

常用HDFS Shell命令

hadoop在linux中安装的教程可参考如下:
https://www.cnblogs.com/pejsidney/p/8875994.html

类linux系统:ls、cat、mkdir、rm、chmod、chown等
HDFS文件交互:copyFromLocal、copyToLocal、get、put

常用HDFS Python API

一个使用python程序操作HDFS的例子

from hdfs3 import HDFileSystem

test_host = ’localhost‘
test_port = 9000

def hdfs_exists(hdfs_client):
    ”“”判断文件是否存在“”“
    path = ’/tmp/test‘
    
    # 如果文件存在那么删除文件,并重新创建文件
    if hdfs_client.exists(path):
        hdfs_client.rm(path)
        
    hdfs_client.makedirs(path)
    
    
def hdfs_write_read(hdfs_client):
    ”“”读写文件“”“
    
    # 需要写入文件的内容,使用二进制
    data = b”hello hadoop“ * 20
    file_a = ’/tmp/test/file_a‘
    # 使用with打开文件,replication表示备份数
    with hdfs_client.open(file_a, ’wb‘, replication=1) as f:
        f.write(data)
        
    with hdfs_client.open(file_a, ’rb‘) as f:
        out = f.read(len(data))
        
        # 断言,如果out和data不相等,那么抛出异常
        assert out == data
            
def hdfs_readlines(hdfs_client):
    ”“”按行读取文件“”“
    
    file_b = ’/tmp/test/file_b‘
    
    with hdfs_client.open(file_b, ’wb‘, replication=1) as f:
        # 此时写入的内容为两行
        f.write(b”hello\nhadoop“)
        
    with hdfs_client.open(file_b, ’rb‘) as f:
        lines = f.readlines()
        
        # 断言,入如果lines的长度不是2,那么抛出异常
        assert len(lines) == 2

if __name__ == ’__main__‘:
    hdfs_client = HDFileSystem(host=test_host,port=test_host)
    
    hdfs_exists(hdfs_client)
    
    hdfs_write_read(hdfs_client)
    
    hdfs_readlines(hdfs_client)
    
    hdfs_client.disconnect()
    
    print(”-“*20)
    print(”hello hadoop“)

MapReduce 简介

MapReduce是hadoop的第二个核心,是一种编程模型,是一种编程方法,是一种抽象的理论,是一种分而治之的思想。

YARN 概念

YARN是 hadoop2.0 的资源管理器,它负责整个集群的资源管理和调度。所有的MapReduce程序都需要使用YARN来进行调度。
YARN涉及到三个概念:ResourceManager、ApplicationMaster、NodeManager
ResourceManager
分配和调度资源
启动并监控ApplicationMaster
监控NodeManager
ApplicationMater
为MR类型的程序申请资源,并分配给内部任务
负责数据的切分
监控任务的执行及容错
NodeManager
管理单个节点的资源
处理来自ResourceManager的命令
处理来自ApplicationMaster的命令

MapReduce 编程模型

输入一个大文件,通过split之后,将其分成多个分片
每个文件分片由单独的机器去处理,这就是Map方法
将各个机器计算的结果进行汇总并得到最终结果,这就是Reduce方法

MapReduce 实战

hdfs_map.py

import sys

def read_input(file):
    """分行读取"""
    for line in file:
        yield line.split()
        
        
def main():
    """
    将读取出来的数据格式化打印
    
    例如:
    a       1
    b       1
    a       1
    """
    data = read_input(sys.stdin)
    
    for words in data:
        for word in words:
            print("%s%s%d" % (word, '\t', 1))
            

if __name__ == '__main__':
    main()

hdfs_reduce.py

import sys

def read_mapper_output(file, separator='\t'):
    """分行读取,并按分割分富符号分割内容"""
    for line in file:
        yield line.rstrip().split(separator, 1)
        

def main():
    """
    将map的结果进行分组统计
    
    例如:
    a       1
    b       1
    a       1
    
    统计后为
    a       2
    b       1
    """
    data = read_mapper_output(sys.stdin)
    
    for current_word, group in groupby(data, itemgetter(0)):
        total_count = sum(int(count) for current_word, count in group)
        print("%s%s%d" % (current_word, '\t', total_count))
        
        
if __name__ == '__main__':
    main()

Hadoop的生态圈中常用的两个东西

Hbase、Spark

Hbase简介

高可靠、高性能、面向列、可伸缩、实时读写的分布式数据库
利用HDFS作为其文件存储系统,支持MR程序读取数据
存储非结构化和半结构化数据

RowKey:数据唯一标识,按字典排序。
Colunmn Family:列族,多个列的集合,最多不要超过三个。
TimeStamp 时间戳:支持多版本数据同时存在。

Spark简介

基于内存计算的大数据并行计算框架。
Spark是MapReduce的替代方案,兼容HDFS,HIVE等数据源

优势
基于内存计算的分布式计算框架
抽象出分布式内存存储数据结构:弹性分布式数据集RDD
基于事件驱动,通过线程池复用线程提高性能。

相关文章

  • 成都0基础学习hadoop怎么学?怎么进行大数据入门学习

    学hadoop需要什么基础?没有基础怎么学习hadoop?怎么学习大数据?Hadoop作为大数据工业中的主引擎,H...

  • Hadoop集群环境搭建

    前言 Hadoop在大数据技术体系中的地位至关重要,Hadoop是大数据技术的基础,对Hadoop基础知识的掌握的...

  • Hadoop安装

    前言 Hadoop在大数据技术体系中的地位至关重要,Hadoop是大数据技术的基础,对Hadoop基础知识的掌握的...

  • Hadoop集群环境搭建

    前言 Hadoop在大数据技术体系中的地位至关重要,Hadoop是大数据技术的基础,对Hadoop基础知识的掌握的...

  • Hadoop集群搭建

    前言 Hadoop在大数据技术体系中的地位至关重要,Hadoop是大数据技术的基础,对Hadoop基础知识的掌握的...

  • Hadoop:1、Hadoop基础与编译

    Hadoop基础 大数据概述 Hadoop与Hadoop生态圈 Hadoop 狭义: 软件(HDFS、MapRe...

  • 大数据 | 史上最详细的Hadoop环境搭建

    Hadoop在大数据技术体系中的地位至关重要,Hadoop是大数据技术的基础,对Hadoop基础知识的掌握的扎实程...

  • HADOOP环境搭建示例-1

    Hadoop在大数据技术体系中的地位至关重要,Hadoop是大数据技术的基础,对Hadoop基础知识的掌握的扎实程...

  • 大数据基础之Hadoop和Spark

    大数据基础 Hadoop背景起源一 HDFS Hadoop背景起源二 MapReduce Hadoop背景起源三 ...

  • Hadoop基本知识点总结

    内容参考链接:慕课网--Hadoop大数据平台架构基础篇Google大数据技术(3大):MapReduce、Big...

网友评论

      本文标题:【大数据】Hadoop基础

      本文链接:https://www.haomeiwen.com/subject/wbncqhtx.html