百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 热门文章 > 正文

一文读懂hadoop

bigegpt 2024-09-12 11:18 8 浏览

初始大数据

什么是大数据?

1
2
3
大数据是一个概念也是一门技术,是在以Hadoop为代表的大数据平台框架上进行各种数据分析的技术。
大数据包括了以Hadoop和Spark为代表的基础大数据框架。
还包括实时数据处理、离线数据处理;数据分析,数据挖掘和用机器算法进行预测分析等技术。

学习基础要求

1
2
3
会 Linux 常用命令
有一定的 Python 或者 Java 编程基础
对 Hadoop 有一定的了解,可以搭建自己的测试环境

Hadoop 的功能和优势

hadoop 是开源的、分布式存储、分布式计算平台,可以用来搭建大型数据仓库,PB级数据的存储、处理、分析、统计等业务

Hadoop包括两个核心组成:

  • HDFS:分布式文件系统,存储海量的数据
  • MapReduce:并行处理框架,实现任务分解和调度

相关开源工具:

  • hbase 放弃了事务的特性,追求更高的扩展,提供了数据的随机读写和实时访问,实现对表数据的读写功能
  • zookeeper 监控 hadoop 每个节点的状态,管理集群配置,维护节点间数据的一致性。
  • hive 将简单的 sql 语句转化为 hadoop 任务,降低使用 hadoop 的门槛

Hadoop 安装

1
2
3
1. 准备Linux环境
2. 安装JDK Java编写
3. 配置Hadoop

hadoop安装及配置:

  1. 下载hdoop安装包并进行解压
  2. 配置hdoop-env.sh文件,目的是配置jdk,并在profile配置haddoop的安装位置
  3. export JAVA_HOME=安装好的JDK(配置的JAVA_HOME)
  4. export HADOOP_HOME=/opt/hadoop-1.2.1
  5. export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$HADOOP_HOME/bin:$PATH
  6. 配置core-site.xml文件:hdoop的核心文件,里面有关于hdoop的节点端口与主机端口
1
2
3
4
5
6
7
8
9
10
11
12
<configuration>
<propery>
<name>hadoop.tmp.dir</name> 
<value>/hadoop</value> <!-- 工作目录 -->
</propery>
<name>dfs.name.dir</name>
<value>/hadoop/name</value> <!-- 所有元数据的目录 -->
<propery>
<name>fs.default.name</name>
<value>hdfs://imooc:9000</value> <!-- 表示文件系统如何访问 namenode -->
</propery>
</configuration>
  1. 配置hdfs-site.xml文件:hadoop的文件存储的基本信息与目录
1
2
3
4
<property>
<name>dfs.data.dir</name>
<value>/hadoop/data</value> <!-- 文件系统的数据存放路径 -->
</property>
  1. 配置mapred-site.xml文件:hadoop的计算节点的端口号
1
2
3
4
<property>
<name>mapred.job.tracker</name>
<value>imooc:9001</value> <!-- 配置任务调度器如何访问 -->
</property>
  1. 格式化:hadoop namenode -format
  2. 启动 hadoop:start-all.sh
  3. 查看端口:jps,可以看到五大守护进程说明正确
  4. 停止 hadoop:stop-all.sh

Hadoop 核心 HDFS

HDFS 基本概念

  • 块 Block 文件分块存储 默认64MB 逻辑单元
  • NameNode (管理节点,存放文件元数据)
  • 文件与数据库的映射表
  • 数据库与数据节点的映射表
  • DataNode (工作节点,存放数据块)

数据管理策略

  1. hdfs是采用master-slave的模式关管理文件,即一个master(namenade:保存datanode的一些基本信息和元数据)和多个slave(datanode:真正的存贮单元,里面存储了真实数据)
  2. hdfs默认保存三份文件,有两份保存在同一台机器上,另外一份(备份文件)保存到另外一台机器上,确保当一台机器挂了时能保存数据的存在
  3. namenade也有一个备用节点:Secondary NameNode,当namenode挂了时secondaryNameNode就变为nameNode的角色进行管理数据
  4. datandoe会采用心跳的方式时不时的想namenode报告自己的基本信息,比如网络是否正常,运行是否正确常

HDFS 中文件读写的流程

客户端发出读写请求,namenode根据元数据返回给客户端,下载需要的block并组装

HDFS 读取文件的流程:

  1. 客户端向namenode发起独立请求,把文件名,路径告诉namenode;
  2. namenode查询元数据,并把数据库返回客户端;
  3. 此时客户端就明白文件包含哪些块,这些块在哪些datanode中可以找到;

HDFS 写入文件的流程:

  1. 客户端将文件拆分成块
  2. 客户端通知NameNode,NameNode返回可用的DataNode节点地址
  3. 客户端根据返回的DataNode将数据块写入到可用的DataNode中
  4. 因为数据块要有三份,所以会通过一个复制管道将每个数据块复制出另外两份并保存
  5. 更新元数据NameNode

HDFS 特点

  1. 数据冗余,硬件容错(一式三份来保证)
  2. 流式数据访问:写一次,读多次,一旦写入无法修改,只能通过写入到新的块删除旧的块进行处理
  3. 存储大文件(特适合,因为小文件多,势必加重NameNode的负担)

优点:存储块大,吞吐量高,为存储大文件设计;适合一次写入多次读取,顺序读写

缺点:延迟高,不适合交互式访问,不支持多用户并发写相同文件

HDFS 使用

它提供了 shell 接口,可以进行命令行操作,常用Hadoop的shell命令:

1
2
3
4
5
6
7
#hadoop fs -format #格式化操作
#hadoop fs -ls / #展示文件
#hadoop fs -cat input/hsdf-site.xml #查看Hadoop里面的指定文件
#hadoop fs -mkdir input #未指明目录,表示在Hadoop的文件系统下的默认目录/user/root下新建
#hadoop fs -put hdsf-site.xml input/ #上传文件到Hadoop
#hadoop fs -get hdfs-site.xml hdfs-site2.xml #从Hadoop下载文件
#hadoop dfsadmin -report #查看HADF使用情况(所有信息)

Hadoop 核心 MapReduce

MapReduce 的原理

Mapreduce原理:分而治之,一个大任务分成多个子任务(map),并行执行之后,合并结果(reduce)。

eg:做统计的时候,把统计的文件拆分,然后分别统计每一个数据出现的次数,然后合并拆分项,就可以统计每一个数据出现的总次数。

在正式执行Map前,需要将输入数据进行”分片”。所谓分片,就是将输入数据切分为大小相等的数据块,每一块作为单个Map Worker的输入被处理,以便于多个Map Worker同时工作。

分片完毕后,多个Map Worker就可以同时工作了。每个Map Worker在读入各自的数据后,进行计算处理,最终输出给Reduce。Map Worker在输出数据时,需要为每一条输出数据指定一个Key。这个Key值决定了这条数据将会被发送给哪一个Reduce Worker。Key值和Reduce Worker是多对一的关系,具有相同Key的数据会被发送给同一个Reduce Worker,单个Reduce Worker有可能会接收到多个Key值的数据。

在进入Reduce阶段之前,MapReduce框架会对数据按照Key值排序,使得具有相同Key的数据彼此相邻。如果用户指定了”合并操作”(Combiner),框架会调用Combiner,将具有相同Key的数据进行聚合。Combiner的逻辑可以由用户自定义实现。这部分的处理通常也叫做”洗牌”(Shuffle)。

接下来进入Reduce阶段。相同的Key的数据会到达同一个Reduce Worker。同一个Reduce Worker会接收来自多个Map Worker的数据。每个Reduce Worker会对Key相同的多个数据进行Reduce操作。最后,一个Key的多条数据经过Reduce的作用后,将变成了一个值。

MapReduce 的运行流程

Job & Task

一个 Job(任务、作业) 被切分为多个 Task,Task 又分为 MapTask 和 ReduceTask

mapReduce 作业执行过程

JobTracker :将一个Job拆分成多个Map和Reduce任务;分配Map和Reduce任务

  • 作业调度
  • 分配任务、监控任务
  • 监控 TaskTracker 的状态

TaskTracker :Map任务分发给下面的TaskTracker做实际 的任务;TaskTracker与DataNode保持对应关系

  • 执行任务
  • 向 JobTracker 汇报任务状态

mapReduce 容错机制

  1. 重复测试:如果一个TaskTracker节点在测试过程中失败,mapreduce会重新执行该任务,如果执行四次后仍失败,就停止执行该任务
  2. 推测测试:如果一个taskTracker执行得很慢,mapReduce就会重新开启一个taskTracker节点去计算相同的该任务,原来那个继续执行,重新开启的taskTracker如果先执行完,则mapReduce取到该结果后就会停止原来那个很慢的taskTracker节点

相关推荐

当Frida来“敲”门(frida是什么)

0x1渗透测试瓶颈目前,碰到越来越多的大客户都会将核心资产业务集中在统一的APP上,或者对自己比较重要的APP,如自己的主业务,办公APP进行加壳,流量加密,投入了很多精力在移动端的防护上。而现在挖...

服务端性能测试实战3-性能测试脚本开发

前言在前面的两篇文章中,我们分别介绍了性能测试的理论知识以及性能测试计划制定,本篇文章将重点介绍性能测试脚本开发。脚本开发将分为两个阶段:阶段一:了解各个接口的入参、出参,使用Python代码模拟前端...

Springboot整合Apache Ftpserver拓展功能及业务讲解(三)

今日分享每天分享技术实战干货,技术在于积累和收藏,希望可以帮助到您,同时也希望获得您的支持和关注。架构开源地址:https://gitee.com/msxyspringboot整合Ftpserver参...

Linux和Windows下:Python Crypto模块安装方式区别

一、Linux环境下:fromCrypto.SignatureimportPKCS1_v1_5如果导包报错:ImportError:Nomodulenamed'Crypt...

Python 3 加密简介(python des加密解密)

Python3的标准库中是没多少用来解决加密的,不过却有用于处理哈希的库。在这里我们会对其进行一个简单的介绍,但重点会放在两个第三方的软件包:PyCrypto和cryptography上,我...

怎样从零开始编译一个魔兽世界开源服务端Windows

第二章:编译和安装我是艾西,上期我们讲述到编译一个魔兽世界开源服务端环境准备,那么今天跟大家聊聊怎么编译和安装我们直接进入正题(上一章没有看到的小伙伴可以点我主页查看)编译服务端:在D盘新建一个文件夹...

附1-Conda部署安装及基本使用(conda安装教程)

Windows环境安装安装介质下载下载地址:https://www.anaconda.com/products/individual安装Anaconda安装时,选择自定义安装,选择自定义安装路径:配置...

如何配置全世界最小的 MySQL 服务器

配置全世界最小的MySQL服务器——如何在一块IntelEdison为控制板上安装一个MySQL服务器。介绍在我最近的一篇博文中,物联网,消息以及MySQL,我展示了如果Partic...

如何使用Github Action来自动化编译PolarDB-PG数据库

随着PolarDB在国产数据库领域荣膺桂冠并持续获得广泛认可,越来越多的学生和技术爱好者开始关注并涉足这款由阿里巴巴集团倾力打造且性能卓越的关系型云原生数据库。有很多同学想要上手尝试,却卡在了编译数据...

面向NDK开发者的Android 7.0变更(ndk android.mk)

订阅Google官方微信公众号:谷歌开发者。与谷歌一起创造未来!受Android平台其他改进的影响,为了方便加载本机代码,AndroidM和N中的动态链接器对编写整洁且跨平台兼容的本机...

信创改造--人大金仓(Kingbase)数据库安装、备份恢复的问题纪要

问题一:在安装KingbaseES时,安装用户对于安装路径需有“读”、“写”、“执行”的权限。在Linux系统中,需要以非root用户执行安装程序,且该用户要有标准的home目录,您可...

OpenSSH 安全漏洞,修补操作一手掌握

1.漏洞概述近日,国家信息安全漏洞库(CNNVD)收到关于OpenSSH安全漏洞(CNNVD-202407-017、CVE-2024-6387)情况的报送。攻击者可以利用该漏洞在无需认证的情况下,通...

Linux:lsof命令详解(linux lsof命令详解)

介绍欢迎来到这篇博客。在这篇博客中,我们将学习Unix/Linux系统上的lsof命令行工具。命令行工具是您使用CLI(命令行界面)而不是GUI(图形用户界面)运行的程序或工具。lsoflsof代表&...

幻隐说固态第一期:固态硬盘接口类别

前排声明所有信息来源于网络收集,如有错误请评论区指出更正。废话不多说,目前固态硬盘接口按速度由慢到快分有这几类:SATA、mSATA、SATAExpress、PCI-E、m.2、u.2。下面我们来...

新品轰炸 影驰SSD多款产品登Computex

分享泡泡网SSD固态硬盘频道6月6日台北电脑展作为全球第二、亚洲最大的3C/IT产业链专业展,吸引了众多IT厂商和全球各地媒体的热烈关注,全球存储新势力—影驰,也积极参与其中,为广大玩家朋友带来了...