hadoop入门补充知识

Hadoop实操演练

什么是快照

给虚拟机保存当下的状态 之后可以回退到保存的状态

什么时候用快照

在对虚拟机执行一些比较危险的操作之前可以先使用快照之后还可以返回

 

如何快速生成多台虚拟机

先将需要克隆的机器关机

链接克隆与完整克隆

链接克隆的速度很快但是需要保证原机器运行正常(不能坏)

完整克隆速度较慢但是克隆完毕之后克隆机与原机器之间再无关系

克隆完机器一般需要两步操作

1.网卡信息的修改

vim /etc/sysconfi/network-scripts/ifcfg-ens33

 systemctl restart network

2.主机名称的修改(可以不做)

hostnamectl set-hostname 新的名称

bash

3.关闭防火墙

systemctl stop firewalld    临时关闭

systemctl disable firewalld  然后reboot

永久关闭

systemctl status firewalld    查看防火墙状态

systemctl restart network    重启

4.配置映射关系(可以不做)

虚拟机:vim /etc/hosts(10.0.0.201    hadoop101)

本机:  C:\Windows\System32\drivers\etc\hosts

 

如何利用xshell通过主机名称的防暑链接虚拟机

修改宿主机hosts文件映射关系即可

 

完全分布式(开发重点)

1)准备 3台客户机

2)安装 JDK

3)配置环境变量

4)安装 Hadoop

5)配置环境变量

6)配置集群

7)单点启动

8)配置 ssh

9)群起并测试集群

 

详细:

1)准备 3台客户机(关闭防火墙、静态 ip、主机名称)

克隆机器修改主机名和主机IP地址

2)安装 JDK

利用scp命令拷贝数据文件至三个客户机

scp -r /opt/module root@hadoop102:/opt/module

scp -r /opt/module root@hadoop103:/opt/module

scp -r /opt/module root@hadoop104:/opt/module

 

也可以在A机器将B机器文件拷贝给C机器

scp -r root@hadoop101:/opt/module root@hadoop103:/opt/module

扩展:拷贝文件的命令有scp(全量拷贝)、rsync(增量拷贝)

scp(全量拷贝)

scp            -r             $pdir/$fname

$user@hadoop$host:$pdir/$fname

命令          递归           要拷贝的文件路径/名称

目的用户@主机:目的路径/名称


rsync(增量拷贝)

rsync       -rvl              $pdir/$fname

$user@hadoop$host:$pdir/$fname

命令        选项参数        要拷贝的文件路径/名称

目的用户@主机:目的路径/名称

参数详解

r 递归

v 显示复制过程

l 拷贝符号连接

3)配置环境变量

1.利用scp命令拷贝环境变量文件至三个客户机

scp /etc/profile

root@hadoop102:/etc/profile


scp /etc/profile

root@hadoop103:/etc/profile


scp /etc/profile

root@hadoop104:/etc/profile

 

2.source文件配置

source /etc/profile

3.验证是否成功

java

4)扩展:集群分发脚本

复制文件到所有节点的相同目录下

1.在/usr/local/bin下创建sync文件并填写以下内容

[jason@hadoop102 ~]$ cd /usr/local/bin

[jason@hadoop102 bin]$ touch xsync

[jason@hadoop102 bin]$ vi xsync

 

文件内容

!/bin/bash

#1 获取输入参数个数,如果没有参数,直接退出

pcount=$#

if((pcount==0)); then

echo no args;

exit;

fi

#2 获取文件名称

p1=$1 fname=`basename $p1`

echo fname=$fname

#3 获取上级目录到绝对路径

pdir=`cd -P $(dirname $p1); pwd`

echo pdir=$pdir

#4 获取当前用户名称

user=`whoami`

#5 循环

for((host=103; host<105; host++)); do

echo ------------------- hadoop$host --------------

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

done

 

2.修改权限

chmod 777 xsync

3.测试

在当前机器随便找一个其他机器没有的目录

xsync test/

 

5)集群配置

集群部署规划

 

  hadoop102                        hadoop103             hadoop104
  HDFS    NameNode/DataNode         DataNode         SecondaryNameNode/DataNode    
  YARN  NodeManager        ResourceManager/NodeManager    NodeManager

'''在102上修改,然后用xsync脚本直接同步'''
1.配置 core-site.xml(修改主机名即可) [jason@hadoop102 hadoop]$ vi core-site.xml """ <!-- 指定 HDFS 中 NameNode 的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop102:9000</value> </property> <!-- 指定 Hadoop 运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property> """

2.HDFS 配置文件

1.配置 hadoop-env.sh

[jason@hadoop102 hadoop]$ vi hadoop-env.s

"""内容(有就不用改了)

export JAVA_HOME=/opt/module/jdk1.8.0_14

"""

2.配置 hdfs-site.xml(将伪分布式配置删除添加下列配置)

[jason@hadoop102 hadoop]$ vi hdfs-site.xml

"""内容

<!-- 指定 Hadoop 辅助名称节点主机配置 -->

<property>

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

<value>hadoop104:50090</value>

</property>

"""


3.YARN 配置文件

1.配置 yarn-env.sh

[jason@hadoop102 hadoop]$ vi yarn-env.sh

"""内容(有就不用改了)

export JAVA_HOME=/opt/module/jdk1.8.0_144

"""

2.配置 yarn-site.xml(修改主机名即可)

[jason@hadoop102 hadoop]$ vi yarn-site.xml

"""内容

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

<property>

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

<value>mapreduce_shuffle</value>

</property>

<!-- 指定 YARN 的 ResourceManager 的地址 -->

<property>

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

<value>hadoop103</value>

</property>

"""


4.MapReduce 配置文件

1.配置 mapred-env.sh

[jason@hadoop102 hadoop]$ vi mapred-env.sh

"""内容(伪分布式配了就不用改了)

export JAVA_HOME=/opt/module/jdk1.8.0_144

"""
2.配置 mapred-site.xml(伪分布式配了就不用改了)

[jason@hadoop102 hadoop]$ cp mapred-site.xml.template mapred-site.xml

[jason@hadoop102 hadoop]$ vi mapred-site.xml

"""内容

<!-- 指定 MR 运行在 Yarn 上 -->

<property>

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

<value>yarn</value>

</property>

"""
3.在集群上分发配置好的 Hadoop 配置文件

[jason@hadoop102 etc]$ xsync hadoop/

4.查看文件分发情况

[jason@hadoop103 hadoop]$ cat /opt/module/hadoop-

2.7.2/etc/hadoop/core-site.xml



集群单点启动

1.如果集群是第一次启动,需要格式化 NameNode(我们不是 因为前面弄了伪分布式)

[jason@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
如果集群不是第一次启动,需要删除data和logs目录 [jason@hadoop102 hadoop-2.7.2]$ rm -rf data/ logs/ [jason@hadoop103 hadoop-2.7.2]$ rm -rf data/ logs/ [jason@hadoop104 hadoop-2.7.2]$ rm -rf data/ logs/

 

 

2.在 hadoop102 上启动 NameNode和DataNode

[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start namenode
  [jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode

3.去103和104启动datanode(namenode就一个)

[jason@hadoop103 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode
  [jason@hadoop104 hadoop-2.7.2]$ sbin/hadoop-daemon.sh start datanode

 

4.浏览器验证

hadoop102:50070

 

集群ssh配置

上述单点启动的方式每次都一个一个节点启动

如果节点数量很多该如何解决

 

公钥私钥工作原理

知识补充:查看know_hosts文件(访问过的主机地址)

[jason@hadoop102 ~]$ ll      # 无法查看
[jason@hadoop102 ~]$ ls -al  # 可以查看
[jason@hadoop102 ~]$ cd .ssh
[jason@hadoop102 .ssh]$ ll
[jason@hadoop102 .shh]$ cat known_hosts

 

生成公钥私钥

[jason@hadoop102 .ssh]$ ssh-keygen -t rsa  # 连续回车即可

 

将102公钥拷贝到103和104

[jason@hadoop102 .shh]$ ssh-copy-id hadoop103
[jason@hadoop102 .shh]$ ssh-copy-id hadoop104
"""
hadoop103中的.ssh在拷贝前后文件是有变化的
hadoop104中的.ssh在拷贝前后文件是有变化的
"""

 

免密直接访问103和104

ssh hadoop103/hadoop104

 

自己用ssh访问自己也需要输入密码,可以采用相同措施解决

 

[jason@hadoop102 .shh]$ ssh-copy-id hadoop102

 

由于hadoop103上有一个resurcemanage所以也需要配置ssh

[jason@hadoop103 .ssh]$ ssh-keygen -t rsa  
[jason@hadoop103 .shh]$ ssh-copy-id hadoop102
[jason@hadoop103 .shh]$ ssh-copy-id hadoop103
[jason@hadoop103 .shh]$ ssh-copy-id hadoop104

 

集群群起

1.配置

文件位置:/opt/module/hadoop-2.7.2/etc/hadoop/slaves

[jason@hadoop102 hadoop]$ vi slaves

内容(内容清空再添加)

hadoop102

hadoop103

hadoop104

注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行

 

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

[jason@hadoop102 hadoop]$ xsync slaves

 

3.将之前单节点启动的datanode、namenode全部退出

[jason@hadoop102 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode
[jason@hadoop102 hadoop
-2.7.2]$ sbin/hadoop-daemon.sh stop namenode [jason@hadoop103 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode [jason@hadoop104 hadoop-2.7.2]$ sbin/hadoop-daemon.sh stop datanode

 

4.启动HDFS

[jason@hadoop102 hadoop-2.7.2]$ sbin/start-dfs.sh

 

5.验证每个节点对于启动的服务

jps查看照着之前的表格比较不能出错

 

6.启动yarn(一定要在hadoop103上启动 因为rm在这里)

这里需要将hadoop03的公钥分别发送给hadoop102、hadoop103、hadoop104

[jason@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh

 

7.验证每个节点对于启动的服务

jps查看照着之前的表格比较不能出错

 

集群测试

上传文件到集群

1.小文件

[jason@hadoop102 hadoop-2.7.2]$ bin/hdfs dfs -put wcinput/wc.input /

2.大文件

[jason@hadoop102 hadoop-2.7.2]$ bin/hdfs dfs -put /opt/software/hadoop-2.7.2.tar.gz /

3.浏览器界面测试 

 

集群启动停止总结

1. 各个服务组件逐一启动/停止

(1)分别启动/停止 HDFS 组件

hadoop-daemon.sh start/stop namenode/datanode/ secondarynamenode

(2)启动/停止 YARN

yarn-daemon.sh start /stop resourcemanager/nodemanager

 

2. 各个模块分开启动/停止(配置 ssh 是前提)常用 

 

(1)整体启动/停止 HDFS

start-dfs.sh/stop-dfs.sh 

(2)整体启动/停止 YARN

start-yarn.sh/stop-yarn.sh

 

集群时间同步

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

1. 时间服务器配置(必须 root 用户)

(1)检查 ntp 是否安装

[root@hadoop102 hadoop-2.7.2]# rpm -qa | grep ntp

(2)修改 ntp 配置文件

[root@hadoop102 hadoop-2.7.2]# vi /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 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

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

 

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

  [root@hadoop102 hadoop-2.7.2]$ vim /etc/sysconfig/ntpd
  增加内容如下(让硬件时间与系统时间一起同步)
  SYNC_HWCLOCK=yes

 

(4)重新启动 ntpd 服务

[root@hadoop102 桌面]$ service ntpd start
[root@hadoop102 桌面]$ service ntpd status

 

(5)设置 ntpd 服务开机启动

[root@hadoop102 桌面]$ chkconfig ntpd on

 

2. 其他机器配置(必须 root 用户)

分 时 日 月 周

 

(1)在其他机器配置 1 分钟与时间服务器同步一次
  root@hadoop103 hadoop2-7.2]$ crontab -e
  编写定时任务如下:
    */1 * * * * /usr/sbin/ntpdate hadoop102
  
(2)修改任意机器时间
    [root@hadoop103 ~]$ date -s "2020-11-11 11:11:11"

(3)一分钟后查看机器是否与时间服务器同步
    [root@hadoop103 ~]$ date
  # 测试的时候可以将 10 分钟调整为 1 分钟,节省时间。
  
(4)主动同步时间
    [root@hadoop103 root]$ /usr/sbin/ntpdate hadoop102

 

posted @ 2021-10-28 22:08  ふじわらたくみ  阅读(56)  评论(0编辑  收藏  举报