Hadoop 分布式存储与计算框架详解

Hadoop开发实战:https://www.borimooc.com/course/1004.htm

hadoop是适合海量数据的分布式存储,和分布式计算的框架

  • hadoop有三大组件:
  1. mapreduce:适合海量数据的分布式计算,分为map阶段、shuffle阶段和reduce阶段
  2. hdfs:分布式文件系统,适合海量数据的分布式存储
  3. yarn:资源调度工具

在使用Hadoop之前,首先要了解Hadoop的安装模式。

  • Hadoop的安装模式分为三种:
  1. 单机(Standalone mode)
  2. 伪分布式模式(Pseudo-Distributed mode)
  3. 全分布式模式(Cluster mode)

具体介绍如下:

  1. 单机模式:Hadoop的默认模式是单机模式。在不了解硬件安装环境的情况下,Hadoop第一次解压其源码包时,它保守地选择了最小配置。Hadoop会完全运行在本地。因此它不需要与其他节点进行交互,那么它也就不使用HDFS,也不加载任何Hadoop守护进程。单机模式不需要启动任何服务即可使用,一般只用于调试。
  2. 伪分布式模式:伪分布式模式是完全分布式模式的一个特例。Hadoop程序的守护进程运行在一台节点上,使用伪分布式模式来调试Hadoop分布式程序中的代码,以及验证程序是否准确执行。

1 用户权限

在安装Hadoop集群中所有的组件全部使用hd用户安装。(上传、解压、配置、启动、关闭等)、

root 是Linux系统的超级用户。一般不要使用这个用户。在我们安装集群的时候,只有在修改/etc/profile的文件的时候才会需要用到root用户。

在进行Hadoop集群安装的时候请再三确认当前用户是谁

root@localhost \~ 当前用户是root localhost计算机名 ~用户的根目录(/root)
hd@localhost \~ 当前用户是hd localhost计算机名 ~用户的根目录(/home/hd)

```Plain Text root 超级管理员(系统文件修改)

hd 普通角色用户 (在/home/hd/* 进行所有增删改查)

2 获取机器的IP地址

```PowerShell

root@localhost \~# ifconfig

eno16777736: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500

inet 192.168.126.128 netmask 255.255.255.0 broadcast 192.168.126.255

如果没有查看IP的命令就安装net-tools

hd@localhost root$ su root

Password:
root@localhost \~# yum install -y net-tools

3 设置网卡为静态的地址

方法一:

#切换root用户

hd@bogon Desktop$ su root

Password:

#修改网卡

root@bogon Desktop# vi /etc/sysconfig/network-scripts/ifcfg-eth0

#把以下这些修改就可以:

BOOTPROTO="static" #修改

ONBOOT="yes" #修改

IPADDR=192.168.245.20 #修改

#重启网卡

root@bogon Desktop# service network restart

重新登录再查看IP信息

root@bogon Desktop# ifconfig

方法二:

网络连接方式为nat

image-20210605110613959

查询自己的网关

在这里插入图片描述

在终端输入 nmtui 命令,进入 NetworkManager

Plain Text root@local \~nmtui

image-20210605105104249

根据查看到的网关,添加到Gateway中。address为ip地址。Dns为8.8.8.8

image-20210605105220429

设置好ip之后进行保存,重启网络服务

image-20210605110018031

image-20210605110355272

本地ping一下。保证网络畅通。

image-20210605110209887

使用shell工具进行远程连接

image-20210605111101609

4 Linux安装Java环境

因为Hadoop由Java语言开发,Hadoop集群的使用同样依赖于Java环境,所以在安装Hadoop集群前,需要先安装并配置好JDK。

4.1 把Linux自带Java环境删除

hd@localhost \~$ su root

Password:
root@localhost hd# yum remove -y java*

4.2 上传Java包

root@localhost hd# su hd
hd@localhost \~ \[hd@localhost \~\]
hd@localhost \~ pwd /home/hd \[hd@localhost \~\] mkdir apps #上传到此目录
hd@localhost \~ cd apps/ \[hd@localhost apps\]
#上传过程
hd@localhost apps$ ll

total 178952
-rw-rw-r--. 1 hd hd 183246769 Apr 26 2018 jdk-8u121-linux-x64.tar.gz

4.3 解压java包

#解压
hd@localhost apps tar -zxvf jdk-8u121-linux-x64.tar.gz \[hd@localhost apps\] ll

total 178956

drwxr-xr-x. 8 hd hd 4096 Dec 12 2016 jdk1.8.0_121
-rw-rw-r--. 1 hd hd 183246769 Apr 26 2018 jdk-8u121-linux-x64.tar.gz
hd@localhost apps *#目录改名* \[hd@localhost apps\] mv jdk1.8.0_121/ java
hd@localhost apps$ ll

total 178956

drwxr-xr-x. 8 hd hd 4096 Dec 12 2016 java
-rw-rw-r--. 1 hd hd 183246769 Apr 26 2018 jdk-8u121-linux-x64.tar.gz

4.4 配置java环境

hd@localhost apps$ su root

Password:
root@localhost apps# cd java/
root@localhost java# pwd
/home/hd/apps/java
root@localhost java#
root@localhost java# vi /etc/profile

使用vi编辑器,在/etc/profile增加java环境变量

Properties files export JAVA_HOME=/home/hd/apps/java export PATH=PATH:JAVA_HOME/bin

重加载一下系统环境

root@localhost java# source /etc/profile
root@localhost java# java -version

java version "1.8.0_121"

Java(TM) SE Runtime Environment (build 1.8.0_121-b13)

Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)

4.5 配置第二台,第三台机器的Java环境

使用scp远程拷贝命令

scp file2 \[user@host2:]file2

1.把每一台机的java目录,拷贝到第二台机器

root@localhost apps# su hd
hd@localhost apps \[hd@localhost apps\] scp -r java hd@192.168.126.129:/home/hd/apps/

2.把每一台机的profile文件,拷贝到第二台机器

hd@localhost apps$ su root

Password:
root@localhost apps# scp /etc/profile root@192.168.126.129:/etc/

The authenticity of host '192.168.126.129 (192.168.126.129)' can't be established.

ECDSA key fingerprint is fb:0a:7a:9f:9a:bc:4f:ff:66:29:1d:1d:b9:a0:35:d1.

Are you sure you want to continue connecting (yes/no)? yes

Warning: Permanently added '192.168.126.129' (ECDSA) to the list of known hosts.

root@192.168.126.129's password:

profile 100% 1820 1.8KB/s 00:00
root@localhost apps#

3.第二台机器加载profile

hd@localhost apps source /etc/profile \[hd@localhost apps\]
hd@localhost apps$ java -version

java version "1.8.0_121"

Java(TM) SE Runtime Environment (build 1.8.0_121-b13)

Java HotSpot(TM) 64-Bit Server VM (build 25.121-b13, mixed mode)
hd@localhost apps$

第三台机,执行以上的步骤

5 安装hadoop之前准备

5.1 修改主机名

  1. 第一台机器master
  2. 第二台机器slave01
  3. 第三台机器slave02

hd@localhost \~$ hostnamectl set-hostname master

==== AUTHENTICATING FOR org.freedesktop.hostname1.set-static-hostname ===

Authentication is required to set the statically configured local host name, as well as the pretty host name.

Authenticating as: root

Password:

==== AUTHENTICATION COMPLETE ===

Plain Text hd@localhost \~$ hostnamectl set-hostname slave01

Plain Text hd@localhost \~$ hostnamectl set-hostname slave02

方法二

root@localhost \~$nmtui

5.2 修改/etc/hosts 文件

hd@master \~$ su root

Password:

root@master hd# vi /etc/hosts

127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4

::1 localhost localhost.localdomain localhost6 localhost6.localdomain6

192.168.126.128 master

192.168.126.129 slave01

192.168.126.130 slave02

同步到第二,三台机器

#第二台机器

root@master hd# scp /etc/hosts root@slave01:/etc/

#第三台机器

root@master hd# scp /etc/hosts root@slave02:/etc/

5.3 关闭防火墙

启动:service firewalld start

systemctl start firewalld

查看状态:service firewalld status

systemctl status firewalld

停止: service firewalld disable

systemctl disable firewalld

禁用:service firewalld stop

systemctl stop firewalld

重启:service firewalld restart

systemctl restart firewalld

5.4 免密登录

需要做的免密的机器

Plain Text 机器---->机器(免密登录) master ----> slave01 master ----> slave02 master ----> master

5.4.1 生成密钥

hd@master \~$ ssh-keygen

Generating public/private rsa key pair.

Enter file in which to save the key (/home/hd/.ssh/id_rsa):

Enter passphrase (empty for no passphrase):

Enter same passphrase again:

Your identification has been saved in /home/hd/.ssh/id_rsa.

Your public key has been saved in /home/hd/.ssh/id_rsa.pub.

The key fingerprint is:

ef:ff:98:6c:a4:66:ca:66:a0:cd:a4:da:75:9c:c0:9f hd@slave02

The key's randomart image is:

+-- RSA 2048----+

| |

| |

| |

| . |

| o S |

| o+ + . |

| *..E .o |

| .o.ooo.+..o |

| ... oo+.o=.. |

+-----------------+

5.4.2 拷贝密钥到你需要免密登录的机器

hd@master \~$ ssh-copy-id slave02

The authenticity of host 'slave02 (192.168.126.130)' can't be established.

ECDSA key fingerprint is 09:57:a3:56:3b:5f:f0:01:55:0e:42:f3:4c:43:3d:d5.

Are you sure you want to continue connecting (yes/no)? yes

/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed

/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys

hd@slave02's password:

Number of key(s) added: 1

Now try logging into the machine, with: "ssh 'slave02'"

and check to make sure that only the key(s) you wanted were added.

5.4.3 测试免密登录

hd@master \~$ ssh slave02

6 Hadoop安装

6.1 上传hadoop安装包

6.2 解压安装包

hd@master apps$ su hd

Password:

hd@master apps$ pwd

/home/hd/apps

hd@master apps$ tar -zxvf hadoop-2.8.1.tar.gz

6.3 改目录名称

hd@master apps]$ mv hadoop-2.8.1 hadoop

hd@master apps$ ll

6.4 修改hadoop配置文件

6.4.1 修改hadoop-env.sh

/hadoop/etc/hadoop/

#在文件的尾部(按"G"可以跳到文档的尾部),增加

export JAVA_HOME=/home/hd/apps/java

6.4.2 修改core-site.xml

<configuration >

<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->

<property >

<name >fs.defaultFS</name >

<value >hdfs://master:9000</value >

</property >

<!-- 指定hadoop运行时产生文件的存储目录 -->

<property >

<name >hadoop.tmp.dir</name >

<value >/home/hd/apps/hadoop/tmpdata</value >

</property >

<!--Hadoop回收站trash,默认是关闭的 可以设置一个时间阀值(单位:分钟),
当回收站里文件的存放时间超过这个阀值或是回收站被清空时,文件才会被彻底删除,并且释放占用的数据块。
-->

<property >

<name >fs.trash.interval</name >

<value >1440</value >
</property >
</configuration >

6.4.3 修改hdfs-site.xml

<configuration >

<!-- 指定HDFS副本的数量 -->

<property >

<name >dfs.replication</name >

<value >3</value >

</property >

<!-- 设置namenode的http通讯地址 -->

<property >

<name >dfs.namenode.http-address</name >

<value >master:50070</value >

</property >

<!-- 设置secondarynamenode的http通讯地址 -->

<property >

<name >dfs.namenode.secondary.http-address</name >

<value >master:50090</value >

</property >

<!-- 设置namenode存放的路径 -->

<property >

<name >dfs.namenode.name.dir</name >

<value >/home/hd/apps/hadoop/namenode</value >

</property >

<!-- 设置datanode存放的路径 -->

<property >

<name >dfs.datanode.data.dir</name >

<value >/home/hd/apps/hadoop/datanode</value >

</property >
</configuration >

6.4.4 修改mapred-site.xml

<configuration >

<!-- 指定mr运行在yarn上 -->

<property >

<name >mapreduce.framework.name</name >

<value >yarn</value >

</property >

<property >

<name >yarn.app.mapreduce.am.env</name >

<value >HADOOP_MAPRED_HOME=/home/hd/apps/hadoop</value >

</property >

<property >

<name >mapreduce.map.env</name >

<value >HADOOP_MAPRED_HOME=/home/hd/apps/hadoop</value >

</property >

<property >

<name >mapreduce.reduce.env</name >

<value >HADOOP_MAPRED_HOME=/home/hd/apps/hadoop</value >

</property >
</configuration >

6.4.5 修改yarn-site.xml

<configuration >

<!-- 指定YARN的老大(ResourceManager)的地址 -->

<property >

<name >yarn.resourcemanager.hostname</name >

<value >master</value >

</property >

<!-- reducer获取数据的方式 -->

<property >

<name >yarn.nodemanager.aux-services</name >

<value >mapreduce_shuffle</value >

</property >

</configuration>

6.4.6 修改slaves

hd@master hadoop$ vi slaves

slave01

slave02

6.4.7 修改环境变量

hd@master hadoop$ su root

Password:
root@master hadoop# vi /etc/profile

#增加
#增加

export HADOOP_HOME=/home/hd/apps/hadoop
#增加

export PATH=PATH:HADOOP_HOME/bin

export PATH=PATH:HADOOP_HOME/sbin

6.5 拷贝到第二,三台机

root@master hadoop# su hd
hd@master hadoop \[hd@master hadoop\]
hd@master hadoop scp -r /home/hd/apps/hadoop hd@slave01:/home/hd/apps/ \[hd@master hadoop\] scp -r /home/hd/apps/hadoop hd@slave02:/home/hd/apps/

hd@master hadoop$ su root

Password:
root@master hadoop# scp /etc/profile root@slave01:/etc/

root@slave01's password:

profile 100% 1896 1.9KB/s 00:00
root@master hadoop# scp /etc/profile root@slave02:/etc/

profile 100% 1896 1.9KB/s 00:00
root@master hadoop#

在第二、三台机器里加载环境

root@master hadoop# source /etc/profile
#查看Hadoop版本
hd@master hadoop$ hadoop version

Hadoop 3.0.0

6.6 格式化

hd@master hadoop$ hadoop namenode -format

执行格式化指令之后,必须出现了"has been successfully formatted"信息,才表明HDFS文件系统成功格式化。然后就可以正式启动集群了;否则,需要查看命令是否正确,或之前Hadoop集群的安装和配置是否正确。 此外需要注意的是,上述格式化命令令只需要在Hadoop集群初次启动前执行一次即可,后续重复启动时就不需要执行格式化了。

6.7 启动hadoop

Hadoop集群的启动,需要启动内部包含的两个集群框架,HDFS集群和YARN集群。 启动方式有单节点逐个启动和使用脚本一键启动两种。

start-dfs.sh 启动HDFS分布式文件系统,停止stop-dfs.sh

start-yarn.sh 启动Yarn资源管理器,停止stop-yarn.sh

start-all.sh HDFS分布式文件系统与Yarn启动,停止stop-all.sh

image-20210305180153117

启动完成之后通过jps命令查看服务

master虚拟机服务如下:

image-20210605150447930

slave虚拟机服务如下:

image-20210605150504137

6.8 测试

Hadoop 集群正常启动后,默认开放50070和8088两个端口,分别用于监控HDFS集群和YARN集群。在本地操作系统的浏览器输入集群服务的IP和对应的端口号即可访问。 想要通过外部Web界面访问虚拟机服务,还需要对外开放配置 Hadoop 集群服务端口号。

```Plain Text hdfs 文件系统访问地址:http://192.168.126.128:50070/dfshealth.html#tab-overview

Yarn资源管理器访问地址:http://192.168.126.128:8088/cluster ```

通过宿主机的浏览器分别访问 (集群服务 IP+端口号)查看HDFS集群状态,效果如下图所示。

image-20210305181001780

通过宿主机的浏览器查看YARN集群状态,效果如下图所示

image-20210305181040343

Hadoop集群的HDFS界面和YARN界面通过Web界面均可以正常访问,并且页面正常显示,同时通过Web界面对进行集群状态管理和查看更方便。

相关推荐
Chris _data2 天前
WPF 学习第三天 — Modbus RTU 串口通信
hadoop·学习·wpf
布吉岛的石头3 天前
Java 程序员第 43 阶段05:微服务整合大模型,跨服务调用架构设计实战,Seata分布式事务实战
wpf
步步为营DotNet3 天前
基于.NET Aspire 实现云原生应用的高效监控与可观测性
云原生·.net·wpf
芒鸽3 天前
HarmonyOS 分布式开发实战:设备协同、数据共享与跨设备迁移
分布式·wpf·harmonyos
Volunteer Technology3 天前
Flink状态管理与容错(二)
大数据·flink·wpf
happyprince4 天前
07_verl-Trainer模块详解
人工智能·架构·wpf·强化学习
bugcome_com4 天前
WPF + Prism 技术指南与实战项目(二、模板搭建)
wpf
小满Autumn4 天前
log4net 日志框架 — 从配置到实战速查手册
笔记·c#·.net·wpf·上位机·log4net
政沅同学5 天前
基于 C# WPF + HALCON 的工业视觉算法工具框架(开源)
开发语言·c#·wpf
happyprince5 天前
03_verl-设计理念与核心原理
wpf