Hadoop架构

news2024/9/23 6:13:32

一、案列分析

1.1案例概述

        现在已经进入了大数据(Big Data)时代,数以万计用户的互联网服务时时刻刻都在产生大量的交互,要处理的数据量实在是太大了,以传统的数据库技术等其他手段根本无法应对数据处理的实时性、有效性的需求。HDFS顺应时代出现,在解决大数据存储和计算方面有很多的优势。

1.2案列前置知识点

1.什么是大数据

        大数据是指无法在一定时间范围内用常规软件工具进行捕捉、管理和处理的大量数据集合,是需要新的处理模式才能具备更强的决策能力、洞察发现能力和流程优化能力的海量、高增长率和多样化的信息资产数据。简而言之,就是数据量非常大,大到无法用常规工具处理,如关系型数据库、数据仓库等。这里的“大”又是一个什么量级呢?如阿里巴巴每天所处理的交易数据达到 20PB(即 20971520GB)。传统数据处理技术为何不能胜任?主要原因是关系型数据库是针对表、字段、行这种可使用二维表格表示的结构化数据而设计的,而大数据通常是针对文本这种非结构化数据。

        数据量大是大数据的显著特点,归纳来说大数据特点如下:

  • (1)数据体量巨大。按目前的发展趋势看,大数据的体量已经达到PB甚至EB级。
  • (2)大数据的数据类型多样,以非结构化数据为主。如:网络日志、音频、视频图片、地理位置信息、交易数据、社交数据等。
  • (3)价值密度低。有价值的数据仅占到数据总量相当小的一部分。比如一段监控视频中真正有价值的画面可能只有几秒钟。由于价值密度低,所以迅速地完成数据的价值提纯是目前大数据汹涌背景下亟待解决的难题。
  • (4)产生和要求处理速度快。这是大数据区分于传统数据挖掘最显著的特征。

        另外,大数据也是一种方法论。原则是“一切都被记录,一切都被数字化,从数字里寻找需求、寻找知识、发掘价值”,这是一种新的思维方式,不同于此前的专家方式,而是通过数据分析来得到结论,这是大数据时代的一个显著特征。这也就要求技术人员拥有能够从各种各样类型的数据中快速获得有价值信息的能力。

        目前,有很多大数据处理系统可以处理大数据

2.Hadoop体系结构

Hadoop特点
  • 高可靠性
  • 高扩展性
  • 高效性
  • 高容错性
  • 低成本
  • 可构建在廉价机器上
Hadoop运行模式
  • 单机模式
    • 无须配置,Hadoop被视为一个非分布式模式运行的独立Java进程。
  • 伪分布式模式
    • 只有一个节点的集群,这个节点既是 Master(主节点、主服务器)也是 Slave(从节点、从服务器),可在此单节点上以不同的 Java 进程模拟分布式中的各类节点。
  • 完全分布式模式
    • 对于 Hadoop,不同的系统会有不同的节点划分方式。在HDFS看来分为 NameNode(管理者)和 DataNode(工作者),其中NameNode只有一个,DataNode 可有多个;在 MapReduce 看来节点又分为 JobTrackel(作业调度者)和 TaskTracker(任务执行者),其中 JobTracker 只有一个,TaskTracker 可以有多个。NameNode 和 JobTracker 可以部署在不同的机器上,也可以部署在同一机器上。部署 NameNode 和 JobTracker 的机器是Master,其余的机器都是 Slave。
Hadoop框架的核心构成
  • 分布式文件系统(HDFS)
  • 分布式计算系统(MapReduce)
  • 分布式资源管理系统(YARN)

Hadoop生态圈

  • HDFS:分布式文件系统,是整个Hadoop 体系的基石。
  • MapReduce/YARN:并行编程模型。YARN是下一代的 MapReduce 框架从 Hadoop 0.23.01 版本后,MapReduce 被重构。通常 YARN 也称为MapReduceV2,老版本MapReduce 称为MapReduce V1.
  • Hive:建立在 Hadoop 上的数据仓库。提供类似 SQL 语言的查询方式查询Hadoop 中的数据。
  • Pig:一个对大型数据集进行分析、评估的平台。主要作用类似于数据库里的存储过程。
  • HBase:全称 Hadoop Database。Hadoop 分布式、面向列的数据库来源于Google 关于 BigTable 的论文,主要用于需要随机访问、实时读写的大数据。在后面章节还会详细介绍。
  • ZooKeeper:是一个为分布式应用所设计的协调服务。主要为用户提供同步、配置管理、分组和命名等服务,减轻分布式应用程序所承担的协调任务。

当然还有大量其它项目加入到 Hadoop 生态圈,如:

  • Sqoop:主要用于 Hadoop与传统数据库(MySQL等)间的数据传递。
  • Flume:日志采集系统。
  • Spark:前面提过,是一个相对独立于Hadoop的大数据处理系统,可单独进行分布式处理。在这里列出来是因为它可以和HDFS很好的结合。
  • Oozie:可以将多个MapReduce 作业组合到一个逻辑工作单元中,进行工作计划的安排,类似于工作流管理引擎。
  • Ambari:支持 Hadoop 集群管理、监控的 Web 工具。

        经过近十多年的发展,越来越多的项目加入到了 Hadoop 的生态圈。在本课程中着重介绍3个模块,分别是:HDFS、MapReduce、HBase。对于 Hadoop 应用开发人员来说,这也是最基本的模块。

3..MapReduce 概述

         Hadoop 的 MapReduce 框架源自于 Google 的 MapReduce 论文。在 Google 发表论文时,MapReduce最大成就是重写了 Google的索引文件系统。现在,MapReduce波广泛地应用于日志分析、海量数据排序、在海量数据中查找特定模式等场景中。
        Hadoop 中,并行应用程序的开发是基于 MapReduce 编程模型的,基于它可以各任务分发到由上千台商用机器组成的集群上,实现Hadoop 的并行任务处理功能。前面提过,HDFS 和 MapReduce 二者相互作用,共同完成了 Hadoop 分布式集群的主要任务。

4.MapReduce 框架设计

        与 HDFS 架构设计相似,Hadoop 中用于执行 MapReduce 作业的机器也有两个角色:JobTracker 和 TaskTracker.

  • JobTracker:是一个 Master 服务,用于作业(Job)的管理和调度工作。一个 Hadoop 集群中只有一台 JobTracker。一般情况下,应该把它部署在单独的机器上。JobTracker 负责创建、调度作业中的每一个子任务(MapTask或 ReduceTask)运行于 TaskTracker上,并监控它们。如果发现有失败的任务就重新运行它。
  • TaskTracker:是运行于多个节点上的 Slave 服务,用于执行任务。TaskTracker需要运行在 HDFS的 DataNode 上。

        基于 JobTracker 和 TaskTracker 的运行架构为 MapReduce V1,在下一代MapReduce V2 中,V1 架构已被 YARN 替代。关于 YARN 在本章稍后会讲解。从学习的难易程度来看,应该先了解 MapReduce V1。不论是 V1还是 V2,都不会影响编写 MapReduce 程序,好比同样是一个 Web 应用,运行在 Tomcat 与 Jetty 下的效果是相同的。由此可见,实际上运行 MapReduce 作业的过程对开发人员是透明的。

1.3案列环境

1.本案例实验环境

 

二、实例实施

2.1系统环境设置(所有节点都设置)

1.关闭selinux和防火墙

setenforce 0
sed -i '/^SELINUX=/s/enforcing/disabled/' /etc/selinux/config
systemctl stop firewalld
systemctl disable firewalld

2.为各个节点设置主机名

hostnamectl set-hostname node1
bash

hostnamectl set-hostname node2
bash

hostnamectl set-hostname node3
bash

3.修改每台主机的hosts文件

cat <<EOF>>/etc/hosts
192.168.10.101 node1 
192.168.10.102 node2 
192.168.10.103 node3
EOF

4.创建hdoop用户组和hduser用户

[root@node1 ~]# groupadd hadoop
[root@node1 ~]# useradd -g hadoop hduser
[root@node1 ~]# passwd hduser
此处设置密码

5.为hduser用户授权

[root@node1 ~]# visudo

在末尾添加:
hduser  ALL=(ALL)       ALL

6.安装JDK

[root@node1 ~]# rpm -ivh jdk-8u171-linux-x64.rpm 

[root@node1 ~]# vim /etc/profile
在末尾添加:
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64
export CLASSPATH=$JAVA_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$PATH

[root@node1 ~]# source /etc/profile

7.配置免密码登录(在node1上配置

[root@node1 ~]# su - hduser
[hduser@node1 ~]$ ssh-keygen -t rsa		 //一路回车键即可 
[hduser@node1 ~]$ ssh-copy-id hduser@node1
[hduser@node1 ~]$ ssh-copy-id hduser@node2
[hduser@node1 ~]$ ssh-copy-id hduser@node3

 2.2安装Hadoop

1.将hadoop包拷贝到hduser的家目录并解压

在node1上操作
[hduser@node1 ~]$ tar zxvf hadoop-2.6.5.tar.gz 
[hduser@node1 ~]$ mv hadoop-2.6.5 hadoop

2.配置hadoop的环境变量

[hduser@node1 ~]$ sudo vim /etc/profile
在末尾添加:
export HADOOP_HOME=/home/hduser/hadoop
export PATH=$HADOOP_HOME/bin:$PATH

[hduser@node1 ~]$ source /etc/profile

3.配置hadoop-env.sh文件

[hduser@node1 ~]$ cd ~/hadoop/etc/hadoop/
[hduser@node1 hadoop]$ vim hadoop-env.sh 
在末尾添加:
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64

4.修改yarn-env.sh文件

[hduser@node1 hadoop]$ vim yarn-env.sh 
在末尾添加
export JAVA_HOME=/usr/java/jdk1.8.0_171-amd64

5.修改slaves文件

[hduser@node1 hadoop]$ vim slaves
清空文件中原有的内容
node2
node3

6.编辑core-site.xml文件

[hduser@node1 hadoop]$ vim core-site.xml
在末尾找到<configuration>模块
在里面添加配置: 
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node1:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hduser/hadoop/tmp</value>
</property>
</configuration>

备注:定义hdfs的uri,以及hdfs的临时目录

7.编辑hdfs-site.xml文件

[hduser@node1 hadoop]$ vim hdfs-site.xml 
在末尾找到<configuration>模块
在里面添加:
<configuration>
<property><name>dfs.namenode.secondary.http-address</name><value>node1:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hduser/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hduser/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>

备注:
名称节点和数据节点的存放位置,文件副本数和读取权限。

8.修改mapred-site.xml文件

[hduser@node1 hadoop]$ cp mapred-site.xml.template  mapred-site.xml
[hduser@node1 hadoop]$ vim mapred-site.xml
在末尾找到<configuration>模块,在里面添加:


<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node1:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node1:19888</value>
</property>
</configuration>

备注:Mapreduce作业记录的web地址和端口。

9.修改yarn-site.xml文件

[hduser@node1 hadoop]$ vim yarn-site.xml 


<configuration>

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>node1:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>node1:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>node1:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>node1:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>node1:8088</value>
</property>

</configuration>

备注:
resourcemanager、nodemanager的通信端口,web端口等信息

10.将hadoop目录拷贝到其他节点上

[root@node1 ~]#scp -r /home/hduser/hadoop node2:/home/hduser 
[root@node1 ~]#scp -r /home/hduser/hadoop node3:/home/hduser

2.3验证安装配置

1.Master 主机(node1)上格式化 NameNode

[hduser@node1 ~]$ cd hadoop/
[hduser@node1 hadoop]$ bin/hdfs namenode -format
[hduser@node1 hadoop]$ sbin/start-dfs.sh

2.查看进程

[hduser@node1 hadoop]$ jps
16721 Jps
15687 NameNode
15866 SecondaryNameNode

3.启动yarn

[hduser@node1 hadoop]$ sbin/start-yarn.sh

4.查看集群环境

[hduser@node1 hadoop]$ bin/hdfs dfsadmin -report

5.浏览器查看 HDFS 运行状态

http://192.168.10.101:50070

2.4运行 Hadoop WordCount 程序

WordCount 实现了对文本中的单词计数的功能,并要求输出结果并按单词首字母排序

1.创建测试文件的目录

[hduser@node1 ~]$ mkdir ~/file

2.编辑测试文件

[hduser@node1 ~]$ cd ~/file/
[hduser@node1 file]$ echo "ni hao hadoop">file1.txt
[hduser@node1 file]$ echo "hello hadoop hi china">file2.txt

3.启动hadoop并 创建hdfs目录

[hduser@node1 file]$ cd ~/hadoop/
[hduser@node1 hadoop]$ sbin/start-all.sh
[hduser@node1 hadoop]$ bin/hadoop fs -mkdir /input2

4.将file1和file2拷贝到hdfs存储目录中

[hduser@node1 hadoop]$ bin/hadoop fs -put ~/file/file* /input2/
[hduser@node1 hadoop]$ bin/hadoop fs -ls /input2/

5.执行WordCount程序,对文件进行统计

[hduser@node1 hadoop]$ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.5.jar wordcount /input2/ /output2/wordcount1

注意:输出目录不能已存在,否则不会输出

6.查看执行结果

[hduser@node1 hadoop]$ bin/hadoop fs -cat /output2/wordcount1/*

如果看到输出结果证明hadoop安装成功

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1942716.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【机器学习】模型验证曲线(Validation Curves)解析

&#x1f308;个人主页: 鑫宝Code &#x1f525;热门专栏: 闲话杂谈&#xff5c; 炫酷HTML | JavaScript基础 ​&#x1f4ab;个人格言: "如无必要&#xff0c;勿增实体" 文章目录 模型验证曲线(Validation Curves)解析什么是模型验证曲线?模型验证曲线的解读模…

Django教程(004):基于orm操作数据库的用户管理实现

文章目录 1、功能需求2、展示用户列表2.1 添加url2.2 创建视图2.3 编写html页面 3、添加用户3.1 添加url3.2 跳转到添加页面3.3 编写添加用户页面3.4 添加用户3.5 实现效果3.6 页面优化 4、删除用户4.1 添加删除用户按钮4.2 添加删除url4.3 删除用户4.4 实现效果 5、完整代码链…

vue3使用html2canvas

安装 yarn add html2canvas 代码 <template><div class"container" ref"container"><div class"left"><img :src"logo" alt"" class"logo"><h2>Contractors pass/承包商通行证&l…

StableDiffusion模型推荐系列(风格型)

今天&#xff0c;分享几个SDXL的特殊风格模型&#xff0c;这些模型在特定风格下非常出彩&#xff0c;弥补了一些“我已经看腻了AI画图”的情况。这几位作者分享的SDXL模型艺术风格上表现得尤为出色&#xff0c;而且他们都是秉持着开源精神免费分享自己的模型。训练过模型的小伙…

掌握VR全景技术,需要具备哪些条件?

VR全景技术自从进入市场以来&#xff0c;就在各个行业领域尝试落地运用&#xff0c;包括但不限于广告宣传、学校教育、医疗、工业、农业等领域。随着5G 技术的不断普及&#xff0c;VR全景技术也逐渐被应用到日常生活中的各个方面&#xff0c;从地产中介到车企销售&#xff0c;从…

单周期CPU(三)译码模块(minisys)(verilog)(vivado)

timescale 1ns / 1ps //module Idecode32 (input reset,input clock,output [31:0] read_data_1, // 输出的第一操作数output [31:0] read_data_2, // 输出的第二操作数input [31:0] Instruction, // 取指单元来的指令input [31:0] …

ubuntu配置ssh服务器详解

① 确定Ubuntu是否安装SSH服务 systemctl status ssh 一般最开始都没有ssh服务 ② 安装SSH Server sudo apt install openssh-server 执行过程如下 ③ 确定Ubuntu SSH服务状态 systemctl status ssh 现在能看到&#xff1a; 第一行加载状态&#xff0c;已加载ssh.service文件…

大语言模型-GPT-Generative Pre-Training

一、背景信息&#xff1a; GPT是2018 年 6 月由OpenAI 提出的预训练语言模型。 GPT可以应用于复杂的NLP任务中&#xff0c;例如文章生成&#xff0c;代码生成&#xff0c;机器翻译&#xff0c;问答对话等。 GPT也采用两阶段的训练过程&#xff0c;第一阶段是无监督的方式来预训…

使用 Redis 实现验证码、token 的存储,用自定义拦截器完成用户认证、并使用双重拦截器解决 token 刷新的问题

基于session实现登录流程 1.发送验证码 用户在提交手机号后&#xff0c;会校验手机号是否合法&#xff0c;如果不合法&#xff0c;则要求用户重新输入手机号 如果手机号合法&#xff0c;后台此时生成对应的验证码&#xff0c;同时将验证码进行保存&#xff0c;然后再通过短信…

Python爬虫实战案例(爬取图片)

爬取图片的信息 爬取图片与爬取文本内容相似&#xff0c;只是需要加上图片的url&#xff0c;并且在查找图片位置的时候需要带上图片的属性。 这里选取了一个4K高清的壁纸网站&#xff08;彼岸壁纸https://pic.netbian.com&#xff09;进行爬取。 具体步骤如下&#xff1a; …

Android 性能之刷新率设置和管理

目录 1. 刷新率和帧率 2. 多种刷新率 3. 基本原理 3.1 屏幕 & 显示控制器 3.2 Composer Service 4. Framework 策略 4.1基本架构 4.2 刷新率设置项的定义 4.2.1 最低刷新率 4.2.2 默认刷新率 & 默认的用户设置刷新率 4.2.2.1 设置入口 4.2.2.2 设置场景 4…

Matlab画不同指标的对比图

目录 一、指标名字可修改 二、模型名字可修改 三、输入数据可修改 软件用的是Matlab R2024a。 clear,clc,close all figure1figure(1); % set(figure1,Position,[300,100,800,600],Color,[1 1 1]) axes1 axes(Parent,figure1);%% Initialize data points 一、指标名字可修…

zigbee DL-20无线串口模块(电赛备战)

zigbee DL-20无线串口模块(电赛备战) 备战2024电子设计大赛&#xff08;7.29-8.1&#xff09; 概述 DL-20是一款2.4G无线串口模块&#xff0c;支持点对点和广播模式的通信。它具备低数据丢失率、宽电压范围和高传输速率的特点&#xff0c;适用于多种无线通信场景。 在电赛中&…

百日筑基第二十八天-23种设计模式-行为型总汇

百日筑基第二十八天-23种设计模式-行为型总汇 文章目录 百日筑基第二十八天-23种设计模式-行为型总汇前言模板方法模式简介模板方式的特点模板方法模式结构类图模板方式模式案例分析模板方法模式应用源码分析模板方法模式的注意事项和细节 迭代器模式迭代器模式结构类图迭代器模…

googleTest 源码主线框架性分析

本文备忘一个主题的分析过程和结论&#xff0c;即&#xff0c;googleTest框架中是如何调用相关的测试宏的&#xff1f; TEST TEST_F TEST_P 等等 1&#xff0c;googleTest 环境与简单示例 1.1 下载 googletest 并编译 下载&#xff1a; $ git clone https://github.com/goog…

5 C 语言数组与字符串的全面解析

目录 1 数组的概念与特性 1.1 什么是数组 1.2 数组的特点 1.3 数组的用途 2 一维数组的定义与初始化 2.1 一维数组的定义 2.2 声明与定义的区别 2.3 一维数组的多种初始化 3 数组名的命名规则与作用 3.1 数组名的命名规则 3.2 数组名的作用 4 一维数组在内存中的存…

实战篇(十二):如何使用 Processing 创建一个多功能的简易吃豆人游戏

如何使用 Processing 创建一个多功能的简易吃豆人游戏 文章目录 如何使用 Processing 创建一个多功能的==简易==吃豆人游戏引言准备工作第一步:设置基本框架第二步:创建 Pacman 类第三步:创建 Obstacle 类第四步:添加分数系统第五步:运行游戏完整代码结论参考资料引言 吃…

Python基础知识——(005)

文章目录 P21——20. 比较运算符 P22——21. 逻辑运算符 P23——22. 位运算和运算符的优先级 P24——23. 本章总结和章节习题 P21——20. 比较运算符 示例3-17—比较运算符的使用&#xff1a; P22——21. 逻辑运算符 示例3-18—逻辑运算符的使用&#xff1a; print(True and T…

van-dialog 组件调用报错

报错截图 报错原因 这个警告表明 vue 在渲染页面时遇到了一个未知的自定义组件 <van-dialog>&#xff0c;并且提示可能是由于未正确注册该组件导致的。在 vue 中&#xff0c;当我们使用自定义组件时&#xff0c;需要先在 vue 实例中注册这些组件&#xff0c;以便 vue 能…

基于关键字驱动设计Web UI自动化测试框架!

引言 在自动化测试领域&#xff0c;关键字驱动测试&#xff08;Keyword-Driven Testing, KDT&#xff09;是一种高效且灵活的方法&#xff0c;它通过抽象测试用例中的操作为关键字&#xff0c;实现了测试用例与测试代码的分离&#xff0c;从而提高了测试脚本的可维护性和可扩展…