目前CSDN,博客园,简书同步发表中,更多精彩欢迎访问个人gitee pageshtml
准备3台客户机(关闭防火墙、静态ip、主机名称)node
vim /etc/sysconfig/network
git
三台机器各自的配置分别为HOSTNAME=hadoop101;HOSTNAME=hadoop102;HOSTNAME=hadoop103web
vim /etc/hosts
shell
三台机器都加入下面的映射关系vim
192.168.1.101 hadoop101 192.168.1.102 hadoop102 192.168.1.103 hadoop103
安装JDK浏览器
配置环境变量安全
安装Hadoopbash
配置环境变量服务器
配置集群
单点启动
配置ssh
群起并测试集群
因为在上一章节已经配置好环境并测试了hadoop伪分布式开发模式,因此在此再也不赘述.
scp(secure copy) 安全拷贝(全量复制)
scp定义
scp能够实现服务器与服务器之间的数据拷贝.(from server1 to server2)
基本语法
scp -r 源文件用户名A@主机名1:path1 目标文件用户名B@主机名2:path2
其余
rsync 远程同步工具
rsync主要用于备份和镜像。具备速度快、避免复制相同内容和支持符号连接的优势。
rsync和scp区别:用rsync作文件的复制要比scp的速度快,rsync只对差别文件作更新。scp是把全部文件都复制过去。
rsync -rvlt path1 目标文件用户名B@主机名2:path2
选项 | 功能 |
---|---|
-r | 递归 |
-v | 显示复制过程 |
-l | 拷贝符号链接 |
-t | 基于文件的修改时间进行对比,只同步修改时间不一样的文件 |
只能将本机的文件同步到其余机器!
注意:path1是个目录,目录以/结尾,只会同步目录中的内容,不会同步目录自己!目录不以/结尾,同步目录中的内容,也会同步目录自己!
编写xsync集群分发脚本
需求:循环复制文件到全部节点的相同目录下,即将当前机器的文件,同步到集群全部机器的相同路径下!例如:hadoop102:/A/a , 执行脚本后,将此文件同步到集群中全部机器的 /A/a
需求分析:
dirname /home/atguigu/hi
; pwd -P)basename hi
脚本实现:
[atguigu@hadoop102 ~]$ mkdir bin [atguigu@hadoop102 ~]$ cd bin/ [atguigu@hadoop102 bin]$ touch xsync [atguigu@hadoop102 bin]$ vi xsync
在该文件中编写以下代码
#!/bin/bash #校验参数是否合法 if(($#==0)) then echo 请输入要分发的文件! exit; fi #拼接要分发文件的绝对路径 dirpath=$(cd `dirname $1`; pwd -P) filename=`basename $1` echo 要分发的文件的路径是:$dirpath/$filename #循环执行rsync分发文件到集群的每台机器 for((i=101;i<=103;i++)) do echo --------------hadoop$i------------------- rsync -rvlt $dirpath/$filename atguigu@hadoop$i:$dirpath done
修改脚本 xsync 具备执行权限
[atguigu@hadoop102 bin]$ chmod 777 xsync
或者
[atguigu@hadoop102 bin]$ chmod u+x xsync
调用脚本形式:xsync 文件名称
编写批量执行同一命令的脚本
#!/bin/bash #在集群的全部机器上批量执行同一条命令 if(($#==0)) then echo 请输入您要操做的命令! exit; fi echo 要执行的命令是$* #循环执行此命令 for((i=101;i<=103;i++)) do echo --------------hadoop$i------------------- ssh hadoop$i $* done
hadoop101 | hadoop102 | hadoop103 | |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager | ResourceManager NodeManager | NodeManager |
核心配置文件
[atguigu@hadoop102 hadoop]$ vi core-site.xml
<!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop101:9000</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/module/hadoop-2.7.2/data/tmp</value> </property>
HDFS配置文件
配置hadoop-env.sh
[atguigu@hadoop102 hadoop]$ vi hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置hdfs-site.xml
[atguigu@hadoop102 hadoop]$ vi hdfs-site.xml
在该文件中编写以下配置
<property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定Hadoop辅助名称节点主机配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop103:50090</value> </property>
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
在该文件中增长以下配置
<!-- reducer获取数据的方式 --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定YARN的ResourceManager的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop101</value> </property>
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
在该文件中增长以下配置
<!-- 指定mr运行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
在集群上分发配置好的Hadoop配置文件
[atguigu@hadoop102 hadoop]$ xsync /opt/module/hadoop-2.7.2/
查看文件分发状况
xcall cat /opt/module/hadoop-2.7.2/etc/hadoop/core-site.xml
若是集群是第一次启动,须要格式化NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop namenode -format
在hadoop102上启动NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hadoop-daemon.sh start namenode [atguigu@hadoop102 hadoop-2.7.2]$ jps 8118 NameNode
启动hadoop101,hadoop102,hadoop103上的DataNode
[atguigu@hadoop102 hadoop-2.7.2]$ xcall hadoop-daemon.sh start datanode [atguigu@hadoop101 hadoop]$ xcall jps 要执行的命令是jps --------------hadoop101------------------- 8118 NameNode 13768 Jps 8238 DataNode --------------hadoop102------------------- 8072 DataNode 12959 Jps --------------hadoop103------------------- 7347 DataNode 13950 Jps
免密登陆原理
生成公钥和私钥
[atguigu@hadoop102 .ssh]$ ssh-keygen -t rsa
而后敲(三个回车),就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登陆的目标机器上的/home/atguigu/.ssh目录下的authorized_keys中
如下命令能够直接完成上述操做
[atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop101 [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop102 [atguigu@hadoop102 .ssh]$ ssh-copy-id hadoop103
.ssh文件夹下(~/.ssh)的文件功能解释
known_hosts | 记录ssh访问过计算机的公钥(public key) |
---|---|
id_rsa | 生成的私钥 |
id_rsa.pub | 生成的公钥 |
authorized_keys | 存放受权过得无密登陆服务器公钥 |
Login Shell
是指登陆时,须要提供用户名密码的shell,如:su – user1 , 图形登陆, ctrl+alt+F2-6进入的登陆界面。
Non-Login shell
ssh 目标机器
登陆以后,执行某个命令!
属于Login-shell,会自动读取 /etc/profile文件中定义的全部的变量!
ssh 目标机器 命令
属于Non-Login-shell
不会读取/etc/profile
若是在使用命令时,咱们须要使用/etc/profile定义的一些变量,须要在目标机器的对应的用户的家目录/.bashrc中添加如下代码
source /etc/profile
若是不添加以上代码,在执行start-all.sh | stop-all.sh必定会报错!
群起脚本的原理是获取集群中全部的节点的主机名
默认读取当前机器 HADOOP_HOME/etc/hadoop/slaves,获取集群中全部的节点的主机名
循环执行 ssh 主机名 hadoop-daemon.sh start xxx
保证当前机器到其余节点,已经配置了ssh免密登陆
保证集群中全部当前用户的家目录/.bashrc中,已经配置source /etc/profile
配置slaves
/opt/module/hadoop-2.7.2/etc/hadoop/slaves [atguigu@hadoop102 hadoop]$ vi slaves
在文件中增长以下内容:
hadoop101 hadoop102 hadoop103
注意:该文件中添加的内容结尾不容许有空格,文件中不容许有空行。
启动集群
若是集群是第一次启动,须要格式化NameNode
[atguigu@hadoop102 hadoop-2.7.2]$ hdfs namenode -format
启动HDFS
[atguigu@hadoop101 hadoop]$ start-dfs.sh [atguigu@hadoop101 hadoop]$ xcall jps 要执行的命令是jps --------------hadoop101------------------- 8118 NameNode 13768 Jps 8238 DataNode --------------hadoop102------------------- 8072 DataNode 12959 Jps --------------hadoop103------------------- 7473 SecondaryNameNode 7347 DataNode 13950 Jps
启动YARN
[atguigu@hadoop103 hadoop-2.7.2]$ start-yarn.sh
web端查看SecondaryNameNode
集群基本测试
hadoop fs -mkdir /wcinput
hadoop fs -put hi /wcinput/
hadoop jar /opt/module/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /wcinput/ /wcoutput
各个服务组件逐一启动/中止
分别启动/中止HDFS组件
hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode
启动/中止YARN
yarn-daemon.sh start / stop resourcemanager / nodemanager
各个模块分开启动/中止(配置ssh是前提)
总体启动/中止HDFS
start-dfs.sh / stop-dfs.sh
总体启动/中止YARN
start-yarn.sh / stop-yarn.sh
启动历史服务器
mr-jobhistory-daemon.sh start historyserver
每台虚拟机做以下设置便可保证时间同步
也可设置定时同步时间的任务
crontab -e
* */1 * * * ntpdate -u ntp7.aliyun.com
建议:
只须要配置RM所在机器到其余机器的SSH免密登陆! 都在RM所在的机器执行群起和群停脚本! xsync和xcall只放在RM所在的机器便可!