三十、完全分布式部署Hadoop

                                完全分布式部署Hadoop

文章步骤:

    1)准备3台客户机(关闭防火墙、静态ip、主机名称、每台虚拟机互联互通)
	2)安装jdk
	3)配置jdk环境变量
	4)安装hadoop
	5)配置hadoop环境变量
	6)安装ssh,使虚拟机间连接不需要密码
	7)配置集群
	8)启动测试集群

1、准备3台客户机

略,不会见本系列之前文章

2、安装jdk

略,不会见本系列之前文章

3、配置jdk环境变量

略,不会见本系列之前文章

4、安装hadoop

略,不会见本系列之前文章

5、配置hadoop环境变量

略,不会见本系列之前文章

6、安装ssh,使虚拟机间连接不需要密码

6.1、scp命令

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

  • 将hadoop11中/opt/module和/opt/software文件拷贝到hadoop12、hadoop13和hadoop14上。
[[email protected] /]# scp -r /opt/module/  [email protected]:/opt
[[email protected] /]# scp -r /opt/software/  [email protected]:/opt
[[email protected] /]# scp -r /opt/module/  [email protected]:/opt
[[email protected] /]# scp -r /opt/software/  [email protected]:/opt
[[email protected] /]# scp -r /opt/module/  [email protected]:/opt
[[email protected] /]# scp -r /opt/software/  [email protected]:/opt
  • 将192.168.1.112服务器上的文件拷贝到当前用户下
[[email protected] opt]# scp  [email protected]:/etc/profile  /opt/tmp/
  • 实现两台远程机器之间的文件传输(hadoop13主机文件拷贝到hadoop14主机上)
[[email protected] test]$ scp [email protected]:/opt/test/haha [email protected]:/opt/test/

6.2、 SSH无密码远程登录:(Secure Shell Authenticity)是一种提供网络安全的传输协议

三十、完全分布式部署Hadoop

注意:每个免密登录是针对服务器间用户来说的,需要每个账号单独配置。

[[email protected] ~]$ cd ~
查看~目录下是否有.ssh目录
[[email protected] ~]$ ls -al
总用量 40
drwx------. 6 admin admin 4096 10月 13 21:35 .
drwxr-xr-x. 3 root  root  4096 10月 13 19:36 ..
-rw-r--r--. 1 admin admin   18 5月  11 2016 .bash_logout
-rw-r--r--. 1 admin admin  176 5月  11 2016 .bash_profile
-rw-r--r--. 1 admin admin  124 5月  11 2016 .bashrc
drwxr-xr-x. 2 admin admin 4096 11月 12 2010 .gnome2
drwxr-xr-x. 4 admin admin 4096 10月  8 02:19 .mozilla
drwxrwxr-x. 2 admin admin 4096 10月 13 19:43 .oracle_jre_usage
drwx------. 2 admin admin 4096 10月 13 21:35 .ssh
-rw-------. 1 admin admin  830 10月 13 19:53 .viminfo
如果没有,使用 ssh hadoop15远程连接其他主机,会自动生成

生成公钥和私钥:
[[email protected] ~]$ ssh-****** -t rsa 
然后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)

将公钥拷贝到要免密登录的目标机器上(含本机,你别忘记啊)
[[email protected] ~]$ ssh-copy-id hadoop14
[[email protected] ~]$ ssh-copy-id hadoop15
[[email protected] ~]$ ssh-copy-id hadoop16

这个免密登录是单向的,需要每台机子都需要去配置一下。
而且每个账户需要免密登录都要配置一遍。

.ssh文件夹下的文件功能解释
(1)known_hosts :记录ssh访问过计算机的公钥(public key)
(2)id_rsa :生成的私钥
(3)id_rsa.pub :生成的公钥
(4)authorized_keys :存放授权过得无秘登录服务器公钥

6.3、rsync命令

rsync远程同步工具,主要用于备份和镜像。具有速度快、避免复制相同内容和支持符号链接的优点。
rsync和scp区别:用rsync做文件的复制要比scp的速度快,rsync只对差异文件做更新。scp是把所有文件都复制过去。

基本语法:

rsync -rvl     $pdir/$fname         [email protected]$host:$pdir
命令   选项     文件路径/名称         目的用户@主机:目的路径

选项:		
-r 递归
-v 显示复制过程
-l 拷贝符号连接

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

[[email protected] ~]$ rsync -rvl /opt/tmp/*  [email protected]:/opt/tmp

6.4、编写集群分发脚本xsync

功能:这个脚本实现将一个目录或文件发送所有服务器

在/usr/local/bin目录下的脚本在整个linux中都可以执行。
在/usr/local/bin目录下创建xsync文件,文件内容如下:

#!/bin/bash
#1 下面这句是获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi

#2 获取第一个参数
p1=$1
#2 获取第一个参数的参数名称
fname=`basename $p1`
echo fname=$fname

#3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir

#4 获取当前用户名称
user=`whoami`

#5 循环
for((host=14; host<17; host++)); do
        echo $pdir/$fname [email protected]$host:$pdir
        echo --------------- hadoop$host ----------------
        rsync -rvl $pdir/$fname [email protected]$host:$pdir
done

注意:共享的目录所属主及所属组必须和操作用户一致不然会出现错误。

6.5、编写分发脚本xcall

功能:这个脚本实现在本机执行一条命令,同时向所有节点发送执行同一个命令
在/usr/local/bin目录下创建xcall文件,文件内容如下:

#!/bin/bash
#  $#:参数个数
pcount=$#
if((pcount==0));then
        echo no args;
        exit;
fi

echo -------------localhost----------
#  [email protected]:参数内容
[email protected]
for((host=102; host<=104; host++)); do
        echo ----------hadoop$host---------
        ssh hadoop$host [email protected]
done

修改脚本 xcall 具有执行权限

[[email protected] bin]# chmod 777 xcall.sh

调用脚本形式: xcall.sh 操作命令

[[email protected] module]# xcall rm -rf /opt/module/tmp 

rm -rf /opt/module/tmp这是三个参数,借用shell脚本循环执行

7、配置集群

7.1、集群规划

hadoop14 hadoop15 hadoop16
HDFS NameNode
DataNode
DataNode SecondaryNameNode
DataNode
YARN NodeManager ResourceManager
NodeManager
NodeManager

7.2、hadoop基本配置

[[email protected] hadoop-2.7.2]$ sudo vim etc/hadoop/core-site.xml 

在< configuration>< /configuration>标签下添加如下:

<!-- 指定HDFS中NameNode的地址 -->
<property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop14:9000</value>
</property>

<!-- 指定hadoop运行时产生文件的存储目录 -->
<property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property>

7.3、HDFS配置

[[email protected] hadoop-2.7.2]$ sudo vim etc/hadoop/hadoop-env.sh 

修改如下:

export JAVA_HOME=/opt/module/jdk8
  • 修改hdfs-site.xml
[[email protected] hadoop-2.7.2]$ sudo vim etc/hadoop/hdfs-site.xml

修改如下:

<!--副本数,默认为3-->
<property>
        <name>dfs.replication</name>
        <value>3</value>
</property>
<!---配置secondarnamenode,默认启动地址为namenode地址--->
<property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hadoop16:50090</value>
</property>
  • 修改slaves
[[email protected] hadoop-2.7.2]$ sudo vi etc/hadoop/slaves 
[sudo] password for admin: 
[[email protected] hadoop-2.7.2]$ cat etc/hadoop/slaves 
hadoop14
hadoop15
hadoop16

7.4、YARN配置

[[email protected] hadoop-2.7.2]$ sudo vim etc/hadoop/yarn-env.sh 
export JAVA_HOME=/opt/module/jdk8
  • 修改yarn-site.xml
[[email protected] hadoop-2.7.2]$ sudo vim etc/hadoop/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>hadoop15</value>
 </property>

7.5、MapReduce配置

[[email protected] hadoop-2.7.2]$ sudo vim etc/hadoop/mapred-env.sh 

  • 修改mapred-site.xml
[[email protected] hadoop-2.7.2]$ sudo mv etc/hadoop/mapred-site.xml.template etc/hadoop/mapred-site.xml
[[email protected] hadoop-2.7.2]$ sudo vim etc/hadoop/mapred-site.xml
<!-- 指定mr运行在yarn上 -->
<property>
	<name>mapreduce.framework.name</name>
	<value>yarn</value>
</property>

7.6、集群脚本分发

[[email protected] hadoop-2.7.2]$ cd /opt/module/hadoop-2.7.2/etc/hadoop
[[email protected] hadoop]$ cd ..
[[email protected] etc]$ xsync hadoop/

查看文件分发情况:

[[email protected] etc]$ xcall cat /opt/module/hadoop-2.7.2/etc/hadoop/slaves

8、启动集群

8.1、如果集群是第一次启动,需要格式化namenode

[[email protected] hadoop-2.7.2]$  bin/hdfs namenode -format

8.2、nameNode所在机器启动HDFS

[[email protected] hadoop-2.7.2]$ sbin/start-dfs.sh
[[email protected] hadoop-2.7.2]$ jps
4166 NameNode
4482 Jps
4263 DataNode

[[email protected] hadoop-2.7.2]$ jps
3218 DataNode
3288 Jps

[[email protected] hadoop-2.7.2]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps

8.2、ResouceManager所在的机器上启动yarn

[[email protected] hadoop-2.7.2]$sbin/start-yarn.sh

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

9、集群测试

9.1、查看HDFS、YARN

http://192.168.1.114:50070/explorer.html

http://192.168.1.115:8088/cluster

9.2、上传文件到集群

[[email protected] hadoop-2.7.2]$  hadoop fs -mkdir -p /user/admin/mapreduce/wordcount/input
[[email protected] hadoop-2.7.2]$ vim wc.input 
[[email protected] hadoop-2.7.2]$ hadoop fs -put wc.input  /user/admin/mapreduce/wordcount/input/
[[email protected] hadoop-2.7.2]$ hadoop fs -ls /user/admin/mapreduce/wordcount/input/ [[email protected] hadoop-2.7.2]$ hadoop fs -cat /user/admin/mapreduce/wordcount/input/wc.input

上传大文件:
[[email protected] hadoop-2.7.2]$ bin/hadoop fs -put /opt/module/hadoop-2.7.2.tar.gz /user/admin/mapreduce/wordcount/input

查看文件:
[[email protected] hadoop-2.7.2]$ hadoop fs -ls /user/admin/mapreduce/wordcount/input/
[[email protected] hadoop-2.7.2]$ hadoop fs -cat /user/admin/mapreduce/wordcount/input/wc.input

下载文件:
[[email protected] hadoop-2.7.2]$ bin/hadoop fs -get /user/admin/mapreduce/wordcount/input/wc.input

9.2、上传文件后查看文件存放在什么位置

[[email protected] subdir0]$ pwd
/opt/module/hadoop-2.7.2/data/tmp/dfs/data/current/BP-1669107349-192.168.1.114-1539453679564/current/finalized/subdir0/subdir0
[[email protected] subdir0]$ ll
总用量 194552
-rw-rw-r--. 1 admin admin      1081 10月 14 02:13 blk_1073741825
-rw-rw-r--. 1 admin admin        19 10月 14 02:13 blk_1073741825_1001.meta
-rw-rw-r--. 1 admin admin 134217728 10月 14 02:22 blk_1073741826
-rw-rw-r--. 1 admin admin   1048583 10月 14 02:22 blk_1073741826_1002.meta
-rw-rw-r--. 1 admin admin  63439959 10月 14 02:22 blk_1073741827
-rw-rw-r--. 1 admin admin    495635 10月 14 02:22 blk_1073741827_1003.meta
[[email protected] subdir0]$  cat blk_1073741826>>tmp.file
[[email protected] subdir0]$ cat blk_1073741827>>tmp.file
[[email protected] subdir0]$ tar -zxvf tmp.file 

10、Hadoop启动停止方式

10.1、各个服务组件逐一启动

分别启动hdfs组件
[[email protected] hadoop-2.7.2]$ sbin/hadoop-daemon.sh  start|stop  namenode|datanode|secondarynamenode
启动yarn
[[email protected] hadoop-2.7.2]$ sbin/yarn-daemon.sh  start|stop  resourcemanager|nodemanager

10.2、各个模块分开启动(配置ssh是前提)常用

整体启动/停止hdfs

[[email protected] hadoop-2.7.2]$ sbin/start-dfs.sh
[[email protected] hadoop-2.7.2]$ sbin/stop-dfs.sh

整体启动/停止yarn

[[email protected] hadoop-2.7.2]$ sbin/start-yarn.sh
[[email protected] hadoop-2.7.2]$ sbin/stop-yarn.sh