大数据技术之Hadoop(四)

4.3 完全分布式部署 Hadoop

分析:

1)准备 3 台客户机(关闭防火墙、静态 ip、主机名称)
2)安装 jdk
3)配置环境变量
4)安装 hadoop
5)配置环境变量
6)安装 ssh
7)配置集群
8)启动测试集群

4.3.1 虚拟机准备

详见 3.2-3.3 章。

4.3.2 主机名设置

详见 3.4 章。

4.3.3 scp

1)scp 可以实现服务器与服务器之间的数据拷贝。

2)案例实操

(1)将 hadoop101 中/opt/module 和/opt/software 文件拷贝到 hadoop102、hadoop103 和 hadoop104 上。

[root@hadoop101 /]# scp -r /opt/module/ root@hadoop102:/opt 
[root@hadoop101 /]# scp -r /opt/software/ root@hadoop102:/opt 
[root@hadoop101 /]# scp -r /opt/module/ root@hadoop103:/opt 
[root@hadoop101 /]# scp -r /opt/software/ root@hadoop103:/opt 
[root@hadoop101 /]# scp -r /opt/module/ root@hadoop104:/opt 
[root@hadoop101 /]# scp -r /opt/software/ root@hadoop105:/opt

(2)将 hadoop101 服务器上的/etc/profile 文件拷贝到 hadoop102 上。

[root@hadoop102 opt]# scp root@hadoop101:/etc/profile /etc/profile

(3)实现两台远程机器之间的文件传输(hadoop103 主机文件拷贝到 hadoop104 主机

上)

[atguigu@hadoop102  test]$ scp atguigu@hadoop103:/opt/test/haha atguigu@hadoop104:/opt/test/

4.3.4 SSH 无密码登录

1)配置 ssh

(1)基本语法

ssh 另一台电脑的 ip 地址【或主机名,但前提是主机名和IP的映射已经配置完成】

(2)ssh 连接时出现 Host key verification failed 的解决方法

[root@hadoop102 opt]# ssh 192.168.1.103

The authenticity of host ‘192.168.1.103 (192.168.1.103)’ can’t be established.

RSA key fingerprint is cf:1e:de:d7:d0:4c:2d:98:60:b4:fd:ae:b1:2d:ad:06.

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

Host key verification failed.

(3)解决方案如下:直接输入 yes

2)无密钥配置

(1)进入到我的 home 目录

[atguigu@hadoop102 opt]$ cd ~/.ssh

(2)生成公钥和私钥:

[atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa

然后敲(三个回车),就会生成两个文件 id_rsa(私钥)、id_rsa.pub(公钥)

(3)将公钥拷贝到要免密登录的目标机器上

[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103

[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop104

这里写图片描述

3).ssh 文件夹下的文件功能解释

(1)~/.ssh/known_hosts :记录 ssh 访问过计算机的公钥(public key)

(2)id_rsa :生成的私钥

(3)id_rsa.pub :生成的公钥

(4)authorized_keys :存放授权过得无秘登录服务器公钥

4.3.5 rsync

rsync 远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符

号链接的优点。

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

(1)查看 rsync 使用说明

man rsync | more

(2)基本语法

rsync  -rvl    pdir/fname    user@hadoophost:$pdir

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

选项

-r 递归

-v 显示复制过程

-l 拷贝符号连接

(3)案例实操

把本机/opt/tmp 目录同步到 hadoop103 服务器的 root 用户下的/opt/tmp 目录

[atguigu@hadoop102 opt]$ rsync -rvl /opt/tmp   root@hadoop103:/opt/

4.3.6 编写集群分发脚本 xsync

1)需求分析:循环复制文件到所有节点的相同目录下。

(1)原始拷贝:

rsync   -rvl    /opt/module root@hadoop103:/opt/

(2)期望脚本:

xsync 要同步的文件名称

(3)在/usr/local/bin 这个目录下存放的脚本,可以在系统任何地方直接执行。

2)案例实操:

(1)在/usr/local/bin 目录下创建 xsync 文件,文件内容如下:

[root@hadoop102 bin]# touch xsync

[root@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 $pdir/$fname $user@hadoop$host:$pdir
    echo --------------- hadoop$host ----------------
    rsync -rvl $pdir/$fname $user@hadoop$host:$pdir
done

(2)修改脚本 xsync 具有执行权限

[root@hadoop102 bin]# chmod 777 xsync
[root@hadoop102 bin]# chown atguigu:atguigu -R xsync

(3)调用脚本形式:xsync 文件名称

[atguigu@hadoop102 opt]$ xsync tmp/

4.3.8 配置集群

1)集群部署规划
这里写图片描述

2)配置文件

(1)core-site.xml

[atguigu@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

hadoop-env.sh

[atguigu@hadoop102 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144

hdfs-site.xml

<configuration>

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<property>

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

<value>hadoop104:50090</value>

</property>

</configuration>

slaves

[atguigu@hadoop102 hadoop]$ vi slaves
hadoop102
hadoop103
hadoop104

(3)yarn

yarn-env.sh

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

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

yarn-site.xml

[atguigu@hadoop102 hadoop]$ vi yarn-site.xml
<configuration>

<!-- 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>

</configuration>

(4)mapreduce

mapred-env.sh

[atguigu@hadoop102 hadoop]$ vi mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144

mapred-site.xml

[atguigu@hadoop102 hadoop]$ vi mapred-site.xml
<configuration>

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

<property>

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

<value>yarn</value>

</property>

</configuration>

3)在集群上分发以上所有文件

[atguigu@hadoop102 hadoop]$ pwd

/opt/module/hadoop-2.7.2/etc/hadoop

[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml

[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/etc/hadoop/yarn-site.xml

[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/etc/hadoop/slaves

4)查看文件分发情况

4.3.9 集群启动及测试

1)启动集群

(0)如果集群是第一次启动,需要格式化 namenode

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hdfs namenode -format 

(1)启动 HDFS:


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

[atguigu@hadoop102 hadoop-2.7.2]$ jps

4166 NameNode
4482 Jps
4263 DataNode
[atguigu@hadoop103 hadoop-2.7.2]$ jps

3218 DataNode
3288 Jps
[atguigu@hadoop104 hadoop-2.7.2]$ jps

3221 DataNode
3283 SecondaryNameNode
3364 Jps

(2)启动 yarn

[atguigu@hadoop102 hadoop-2.7.2]$ sbin/start-yarn.sh

注意:Namenode 和 ResourceManger 如果不是同一台机器,不能在 NameNode 上启动 yarn,应该在 ResouceManager 所在的机器上启动 yarn。

2)集群基本测试

(1)上传文件到集群

上传小文件

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hdfs dfs -mkdir -p /user/atguigu/tmp/conf 
[atguigu@hadoop102 hadoop-2.7.2]$ bin/hdfs dfs -put etc/hadoop/*-site.xml /user/atguigu/tmp/conf

上传大文件

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -put /opt/software/hadoop-2.7.2.tar.gz /user/atguigu/input

(2)上传文件后查看文件存放在什么位置

文件存储路径

[atguigu@hadoop102 subdir0]$ pwd

/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-938951106-192.168.10.107-1495462844069/current/finalized/subdir0/subdir0

查看文件内容

[atguigu@hadoop102 subdir0]$ cat blk_1073741825

hadoop
atguigu
atguigu

(3)拼接

-rw-rw-r–. 1 atguigu atguigu 134217728 5 月 23 16:01 blk_1073741836
-rw-rw-r–. 1 atguigu atguigu 1048583 5 月 23 16:01 blk_1073741836_1012.meta
-rw-rw-r–. 1 atguigu atguigu 63439959 5 月 23 16:01 blk_1073741837
-rw-rw-r–. 1 atguigu atguigu 495635 5 月 23 16:01 blk_1073741837_1013.meta

[atguigu@hadoop102 subdir0]$ cat blk_1073741836>>tmp.file
[atguigu@hadoop102 subdir0]$ cat blk_1073741837>>tmp.file 
[atguigu@hadoop102 subdir0]$ tar -zxvf tmp.file

可见文件确实分块存储,没有损坏,将第二块内容追加到第一块内容之后解压得到的是原来正确的文件

(4)下载

[atguigu@hadoop102 hadoop-2.7.2]$ bin/hadoop fs -get /user/atguigu/input/hadoop-2.7.2.tar.gz

3)性能测试集群

写海量数据

读海量数据

4.3.10 Hadoop 启动停止方式

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

3)全部启动(不建议使用)

    start-all.sh

    stop-all.sh

4.3.11 集群时间同步

时间同步的方式:找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时

的同步,比如,每隔十分钟,同步一次时间。

配置时间同步实操:

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

(1)检查 ntp 是否安装

[root@hadoop102 桌面]# rpm -qa|grep ntp

ntp-4.2.6p5-10.el6.centos.x86_64

fontpackages-filesystem-1.41-1.1.el6.noarch

ntpdate-4.2.6p5-10.el6.centos.x86_64

(2)修改 ntp 配置文件

[root@hadoop102 桌面]# vi /etc/ntp.conf

修改内容如下

a)修改 1

#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)添加 3

server 127.127.1.0

fudge 127.127.1.0 stratum 10

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

[root@hadoop102 桌面]# vim /etc/sysconfig/ntpd

增加内容如下

SYNC_HWCLOCK=yes

(4)重新启动 ntpd

[root@hadoop102 桌面]# service ntpd status

ntpd 已停

[root@hadoop102 桌面]# service ntpd start

正在启动 ntpd: [确定]

(5)执行:

[root@hadoop102 桌面]# chkconfig ntpd on 2)其他机器配置(必须 root 用户)

(1)在其他机器配置 10 分钟与时间服务器同步一次

[root@hadoop103 hadoop-2.7.2]# crontab -e

编写脚本

*/10 * * * * /usr/sbin/ntpdate hadoop102

(2)修改任意机器时间

[root@hadoop103 hadoop]# date -s "2017-9-11 11:11:11"

(3)十分钟后查看机器是否与时间服务器同步

[root@hadoop103 hadoop]# date

4.3.12 配置集群常见问题

1)防火墙没关闭、或者没有启动 yarn

INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032

2)主机名称配置错误

3)ip 地址配置错误

4)ssh 没有配置好

5)root 用户和 atguigu 两个用户启动集群不统一

6)配置文件修改不细心

7)未编译源码

Unable to load native-hadoop library for your platform… using builtin-java classes where applicable

17/05/22 15:38:58 INFO client.RMProxy: Connecting to ResourceManager at hadoop108/192.168.10.108:8032

8)datanode 不被 namenode 识别问题

Namenode 在 format 初始化的时候会形成两个标识,blockPoolId 和 clusterId。新的

datanode 加入时,会获取这两个标识作为自己工作目录中的标识。

一旦 namenode 重新 format 后,namenode 的身份标识已变,而 datanode 如果依然持有

原来的 id,就不会被 namenode 识别。

解决办法,删除 datanode 节点中的数据后,再次重新格式化 namenode。

9)不识别主机名称

java.net.UnknownHostException: hadoop102: hadoop102

at java.net.InetAddress.getLocalHost(InetAddress.java:1475)

at

org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:146)

at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)

at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)

at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:415)

解决办法:

(1)在/etc/hosts 文件中添加 192.168.1.102 hadoop102

(2)主机名称不要起 hadoop hadoop000 等特殊名称

10)datanode 和 namenode 进程同时只能工作一个。
这里写图片描述

11)jps 发现进程已经没有,但是重新启动集群,提示进程已经开启。原因是在 linux 的根目

录下/tmp 目录中存在启动的进程临时文件,将集群相关进程删除掉,再重新启动集群。

12)jps 不生效。

原因:全局变量 hadoop java 没有生效,需要 source /etc/profile 文件。

13)8088 端口连接不上

[atguigu@hadoop102  桌面]$ cat /etc/hosts

注释掉如下代码

#127.0.0.1  localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1    hadoop102
©️2020 CSDN 皮肤主题: 编程工作室 设计师: CSDN官方博客 返回首页
实付0元
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值