[大数据]Hadoop(1)集群环境配置

1. Hadoop

1.1Hadoop

​ 1)Hadoop是一个由Apache基金会开发的分布式系统基础架构

​ 2)主要解决,海量数据的存储和海量数据的分析计算

​ 3)指一个更广泛的概念,Hadoop生态圈

1.2 Hadoops思想之源:Google的三篇论文

GFS->HDFS

Map-Reduce ->MR

BigTable->Hbase

1.3 Hadoop的优势

​ 1)高可靠性 2)高扩展性 3)高效性 4)高容错性

1.4 Hadoop组成

1.4.1 HDFS(分布式存储)

​ 1.NameNode(nn):存储文件的元数据,文件名,文件目录结构,文件属性(生成时间,副本数,文件权限)

​ 2.DateNode(dn):在本地文件系统存储文件块数据,以及块数据的校验和

​ 3.Secondary NameNode(2nn):每隔一段时间对NameNode元数据备份 nn的助手

1.4.2 Yarn(资源调度)

在这里插入图片描述

1.ResourcesManagemer(RM)

​ 1)处理客户端请求,2)监控NodeManager,3)启动或监控ApplicationMaster,4)资源的分配与调度

2.NodeManager(NM)

​ 1)管理单个节点的资源,2)处理来自ResourcesManager的命令,3)处理来自ApplicationMaster的命令

3.ApplicationMaster(AM)

​ 1)负责数据的切分,2)为应用程序申请资源并分配给内部的任务,3)任务的监控与容错。

​ 每有一个任务就会有一个AppMaster

 **4.container(虚拟化)**

​ YARN中的资源抽象,它封装了某个节点上的多维度资源。如内存,CPU,磁盘,网络等

1.4.3 Map-Reduce(计算)

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xHjmCBUT-1607080929778)(C:\Users\fuzh\AppData\Roaming\Typora\typora-user-images\image-20201124211137560.png)]

MapReduce将计算过程分为两个阶段:Map和Reduce

​ 1)Map阶段并行处理输入数据

​ 2)Reduce阶段对Map结果进行汇总

1.4.4 辅助工具

1.5 大数据生态体系

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-PrEKYsB6-1607080929780)(C:\Users\fuzh\AppData\Roaming\Typora\typora-user-images\image-20201124211412635.png)]

2 . Hadoop运行环境搭建

2.1 虚拟机环境准备

1.CentOS7,内存4G,硬盘50G

2.安装必要环境

sudo yum install -y epel-release
sudo yum install -y psmisc nc net-tools rsync vim lrzsz ntp libzstd openssl-static tree iotop git

3.修改虚拟机静态IP

sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33

文件修改为:

DEVICE=ens33
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
NAME="ens33"
IPADDR=192.168.1.101
PREFIX=24
GATEWAY=192.168.1.2
DNS1=192.168.1.2

4.查看Linux虚拟机网络编辑器,子网IP:192.168.1.0,子网掩码:255.255.255.0,net网关:192.168.1.2

编辑VMnet8网卡,默认网关192.168.1.2,IP地址:192.168.1.100,首选dns服务器192.168.1.2

5.修改主机名

sudo hostnamectl --static set-hostname hadoop101

配置主机名称映射

sudo vim /etc/hosts

添加

192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.104 hadoop104
192.168.1.105 hadoop105
192.168.1.106 hadoop106
192.168.1.107 hadoop107

修改windows主机映射文件(hosts)

添加

192.168.1.100 hadoop100
192.168.1.101 hadoop101
192.168.1.102 hadoop102
192.168.1.103 hadoop103
192.168.1.104 hadoop104
192.168.1.105 hadoop105
192.168.1.106 hadoop106
192.168.1.107 hadoop107
192.168.1.108 hadoop108

6.关闭防火墙

sudo systemctl stop firewalld
sudo systemctl disable firewalld

7.创建atguigu用户

sudo useradd atguigu
sudo passwd atguigu

8.重启虚拟机

reboot

9.配置atguigu用户具有root权限

visudo

修改/etc/sudoers文件,找到下面一行(91行),在root下面添加一行,如下所示:

## Allow root to run any commands anywhere
root    ALL=(ALL)     ALL
atguigu   ALL=(ALL)     ALL

在这里插入图片描述

10.在/opt下创建文件夹,修改所有者cd

sudo mkdir /opt/module /opt/software
sudo chown atguigu:atguigu /opt/module /opt/software

11.test

在这里插入图片描述

12.对当前环境拍照存档

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-SlfIAGm8-1607080929783)(C:\Users\fuzh\AppData\Roaming\Typora\typora-user-images\image-20201127201213522.png)]

13.用该快照克隆三台主机 分别为hadoop102,hadoop103,hadoop104,并配置对应IP为192.168.1.102 192.168.1.103 192.168.1.104

2.2 在一台节点上安装JDK

1.用Xftp将java与hadoop文件导入系统/opt/software目录下

在这里插入图片描述

2.解压两个tar包至module目录下

tar -zxvf jdk-8u212-linux-x64.tar.gz -C /opt/module/

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-UUFPEObR-1607080929784)(C:\Users\fuzh\AppData\Roaming\Typora\typora-user-images\image-20201127205133560.png)]

3.配置环境变量

新建/etc/profile.d/my_env.sh文件

sudo vim /etc/profile.d/my_env.sh

添加如下内容

#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212
export PATH=$PATH:$JAVA_HOME/bin

#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gIGPoCzX-1607080929784)(C:\Users\fuzh\AppData\Roaming\Typora\typora-user-images\image-20201127205439465.png)]

添加之后的$PATH路径

环境变量生效之后,所有在PATH路径之下的脚本与命令都可以直接执行。

在这里插入图片描述

重启Xshell

输入

java -version

在这里插入图片描述

hadoop version

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-uF4jRgU2-1607080929786)(C:\Users\fuzh\AppData\Roaming\Typora\typora-user-images\image-20201127205957146.png)]

则表示java与hadoop安装成功

2.3 SCP安全拷贝

scp可以实现服务器与服务器之间的数据拷贝。(from server1 to server2)

基本语法

scp   -r     $pdir/$fname        $user@hadoop$host:$pdir/$fname

命令  递归    要拷贝的文件路径/名称  目的用户@主机:目的路径/名称

在hadoop103 104的 /opt目录下分别创建module与software文件夹

将hadoop102 /opt/moudle文件拷贝至 103 104对应的文件夹之中

scp -r /opt/module/* atguigu@hadoop103:/opt/module

也可以在103(104)中登录102将对应文件拉到自己的主机上

scp -r atguigu@hadoop102:/opt/module/* /opt/module

在103上将102的内容拷贝到104中

scp -r atguigu@hadoop102:/opt/module/* atguigu@hadoop104:/opt/module

2.4 rsync远程同步

rsync主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。

rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

基本语法

rsync   -av       $pdir/$fname        $user@hadoop$host:$pdir/$fname

命令     选项参数   要拷贝的文件路径/名称   目的用户@主机:目的路径/名称
选项功能
-a归档拷贝
-v显示复制过程

将hadoop102/opt/software的目录同步到hadoop103/opt/software下。

rsync -av /opt/software/jdk-8u212-linux-x64.tar.gz atguigu@hadoop103:/opt/software

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-hqcikYo3-1607080929786)(C:\Users\fuzh\AppData\Roaming\Typora\typora-user-images\image-20201130112959667.png)]

hadoop103中的文件

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-KcRBaFO5-1607080929787)(C:\Users\fuzh\AppData\Roaming\Typora\typora-user-images\image-20201130113205507.png)]

2.5 集群分发脚本(xsync)

scp rsync都可以实现从server1到server2数据的拷贝

脚本实现的效果,在hadoop102执行脚本,可以将指定的数据拷贝到103,104。

脚本使用:

xsync 文件/目录

脚本存放的位置:放在PATH环境变量所能指向的一个目录中

PATH目录:

/usr/local/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/atguigu/.local/bin:/home/atguigu/bin

可以在/home/atguigu/bin存放xsync文件

创建脚本文件xsync

sudo touch xsync.sh
sudo chmod 777 xsync.sh
sudo vim xsync.sh

然后编辑

#!/bin/bash
#1.判断参数个数
if [ $# -lt 1 ]
then
        echo Not Enough Arguement!
        exit;
fi
#2.遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
        echo ================ $host ==================
        #3.遍历整个目录 挨个发送
        for file in $@
        do
        #4.判断文件是否存在
        if [ -e $file ]
        then
                #5.获取父目录
                pdir=$(cd -P $(dirname $file); pwd)
                #6.获取当前文件的名称
                fname=$(basename $file)
                ssh $host "mkdir -p $pdir"
                rsync -av $pdir/$fname $host:$pdir
        else 
                echo $file dose not exists!
        fi
        done
done

测试脚本:

在hadoop102的/opt/module/hadoop-3.1.3/目录下创建aaa.txt

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-eQC9Xwlr-1607080929787)(C:\Users\fuzh\AppData\Roaming\Typora\typora-user-images\image-20201204175519220.png)]

然后在当前目录下执行

xsync.sh aaa.txt

在这里插入图片描述
分别在103与104中查看。已经复制成功。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-jUFQVjfx-1607080929788)(C:\Users\fuzh\AppData\Roaming\Typora\typora-user-images\image-20201204175646969.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-YSSHCyyz-1607080929788)(C:\Users\fuzh\AppData\Roaming\Typora\typora-user-images\image-20201204175717991.png)]

2.6 SSH无密登录配置

SSH:Secure SHell

对称加密:

加密与解密的密钥相同

问题:密钥如何安全的发送。

123->p->abc

abc->q->123

非对称加密:

加密与解密的密钥不同

加密的密钥成对出现:p,q

123->p->abc

abc->q->123

SSH加密原理

1)用户向服务器发送一个明文的登录请求
2)服务器向用户发回服务器的公钥
3)用户将密码通过公钥加密发回给服务器
4)服务器使用私钥解密,与用户名核对

免密登录
在本地生成一对密钥pq,然后将一个发送给对方,只要只需要用pq登录。
在这里插入图片描述

免密登录比密码登录更加安全。可以防止中间人攻击

配置免密登录
使用102登录103 在102生成p,q,然后将q发给103.

1)生成密钥对
ssh-keygen -t rsa

在这里插入图片描述
查看刚刚生成的密钥对,id_rsa为私钥,id_rsa.pub为公钥
在这里插入图片描述

2)将公钥发送到103 与 104上

先将公钥发给自己

ssh-copy-id hadoop102

可以看到产生了authorized keys,该文件存储所有可以登录hadoop102服务器的公钥。
免密登陆时,authorized keys 与 id_rsa 配对

在这里插入图片描述
3).ssh文件夹下(~/.ssh)的文件功能解释
known_hosts:记录ssh访问过计算机的公钥(public key)
id_rsa:生成的私钥
id_rsa.pub:生成的公钥
authorized_keys:存放授权过的无密登录服务器公钥

发送到103,104上

ssh-copy-id hadoop103
ssh-copy-id hadoop104

在这里插入图片描述
只发送公钥只能实现102免密登录103与104,不能实现103、104免密登录102。
将hadoop102的.ssh文件()及发送至103,104 实现102 103 104之间可以互相免密访问。

xsync.sh .ssh

在这里插入图片描述
测试可以实现免密登录。
在这里插入图片描述

2.7 配置集群并快速分发到所有节点

xsync.sh jdk1.8.0_212
xsync.sh hadoop-3.1.3/
sudo xsync.sh /etc/profile.d/my_env.sh

3.集群配置

3.1 集群部署规划

1)NameNode和SecondaryNameNode不要安装在同一台服务器

2)ResourceManager也很消耗内存,不要和NameNode、SecondaryNameNode配置在同一台机器上。

hadoop102hadoop103hadoop104
HDFSNameNode DateNodeDateNodeSecondaryNameNode DateNode
YaRNNodeManagerResourceManager NodeManagerNodeManager

1.进入/opt/module/hadoop-3.1.3/etc/hadoop/文件夹
2.配置core-site.xml

<configuration>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop102:8020</value>
    </property>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-3.1.3/data</value>
    </property>
    <property>
        <name>hadoop.proxyuser.atguigu.hosts</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.proxyuser.atguigu.groups</name>
        <value>*</value>
    </property>
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>atguigu</value>
    </property>
</configuration>

3.配置hdfs-site.xml

<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop104:9868</value>
    </property>
</configuration>

4.配置yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hadoop103</value>
    </property>
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
    <property>
        <name>yarn.scheduler.minimum-allocation-mb</name>
        <value>512</value>
    </property>
    <property>
        <name>yarn.scheduler.maximum-allocation-mb</name>
        <value>4096</value>
    </property>
    <property>
        <name>yarn.nodemanager.resource.memory-mb</name>
        <value>4096</value>
    </property>
    <property>
        <name>yarn.nodemanager.pmem-check-enabled</name>
        <value>false</value>
    </property>
    <property>
        <name>yarn.nodemanager.vmem-check-enabled</name>
        <value>false</value>
    </property>
</configuration>

5.配置mapred-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

6.配置workers

hadoop102
hadoop103
hadoop104

7.同步所有节点配置文件

xsync.sh /opt/module/hadoop-3.1.3/etc

3.2 集群启动

1)如果集群是第一次启动,需要在hadoop102节点格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)

hdfs namenode -format

2)启动集群

start-dfs.sh

在这里插入图片描述

3)在配置了ResourceManager的节点(hadoop103)启动YARN

start-yarn.sh

在这里插入图片描述
4)jps查看启动情况
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3.3 配置集群历史服务器与日志聚集

sudo vim /opt/module/hadoop-3.1.3/etc/hadoop/mapred-site.xml
<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop102:10020</value>
</property>

<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop102:19888</value>
</property>
sudo vim /opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>
<property>  
    <name>yarn.log.server.url</name>  
    <value>http://${yarn.timeline-service.webapp.address}/applicationhistory/logs</value>
</property>
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>
<property>
    <name>yarn.timeline-service.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.timeline-service.hostname</name>
    <value>${yarn.resourcemanager.hostname}</value>
</property>
<property>
    <name>yarn.timeline-service.http-cross-origin.enabled</name>
    <value>true</value>
</property>
<property>
    <name>yarn.resourcemanager.system-metrics-publisher.enabled</name>
    <value>true</value>
</property>

分发文件

xsync.sh hadoop

重新启动集群

start-dfs.sh
start-yarn.sh(hadoop103)
mapred --daemon start historyserver(启动历史服务器)

输入jps查看

在这里插入图片描述
历史服务器已经启动

配置脚本一键查看所有节点运行情况

#!/bin/bash
for i in hadoop102 hadoop103 hadoop104
do
        echo "====================             $i          ====================="
        ssh $i "jps" | grep -v Jps
done

在这里插入图片描述
192.168.1.102:9870
在这里插入图片描述
192.168.1.103:8088
在这里插入图片描述

3.4 集群时间同步

时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。

1)在所有节点关闭ntp服务和自启动

sudo systemctl stop ntpd
sudo systemctl disable ntpd

停止之后三个节点的状态都是dead。
在这里插入图片描述

2)修改ntp配置文件

sudo vim /etc/ntp.conf

a)修改1:授权192.168.1.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间
修改#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap
为restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap

b)修改2:集群在局域网中,不使用其他互联网上的时间

server 0.centos.pool.ntp.org iburst
server 1.centos.pool.ntp.org iburst
server 2.centos.pool.ntp.org iburst
server 3.centos.pool.ntp.org iburst

#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst

c)添加 (当该节点丢失网络连接,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步)

server 127.127.1.0
fudge 127.127.1.0 stratum 10

3)修改/etc/sysconfig/ntpd 文件

sudo vim /etc/sysconfig/ntpd

添加

SYNC_HWCLOCK=yes

让硬件时间与系统时间一起同步。

4)重新启动ntpd服务,并设置ntpd服务开机启动

systemctl start ntpd
systemctl enable ntpd

在这里插入图片描述
5)配置其他机器,每隔一段时间与服务器时间同步一次。
(调整系统时间必须在root用户下进行)

crontab -e

编写定时任务(每隔一分钟同步一次时间)

*/1 * * * * /usr/sbin/ntpdate hadoop102

修改任意机器时间

date -s "2017-9-11 11:11:11"

10分钟后查看与服务器是否同步。

date

同步成功
在这里插入图片描述

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值