hadoop集群搭建
文章最后有完整的集群链接!!!
完全分布式Hadoop配置
0虚拟机VMware下安装Linux系统
出现以下问题时:
需要启动Intel VT-x
1.重启系统,进入BIOS,我的联想笔记本电脑的系统是按Delete键进入BIOS的
2.选择advanced选项卡,选择CPU setup,按enter键进入
3.选择Intel Virtualization Technology,选择,按enter
4.选择Enable,按enter键。
5.保存退出,重启,如界面下面的提示。我的是按F10
##一、 准备Linux系统
(1)网络设置NAT模式
选择虚拟机->设置->网络适配器->网络适配器->网络连接模式->NAT模式
编辑->虚拟网络编辑器
如果是通过网线部署在不同的电脑上,则应选择桥接模式,上面的NAT模式用于设置本机局域网IP也要设置。
(2)设置静态IP
(2) vi /etc/udev/rules.d/70-persistent-net.rules
如果有多行"eth*"把前面的几行都注释掉,只留最后一行,并把最后一行的"eth*“修改为"eth0”
复制 ATTR{address}==“00:0c:29:10:ff:d3” 中的"00:0c:29:10:ff:d3",不同机器,该数字不同。
(3)vi /etc/sysconfig/network-script/ifcfg-eth0
修改: HDDR=刚才复制的数字
BOOTPROTO=static
ONBOOT = yes
添加:
IPADDR = 192.168.30.101 #如果是完全分布式,每台虚拟机IPDDR的值都
#不相同,如192.168.30.101、192.168.30.102、192.168.30.103 等
GATEWAY = 192.168.30.2
DNS1=8.8.8.8
命令 service network restart 重启网络,使上面的设置生效
ping www.baidu.com 可测试固定IP设置是否有效
(3)修改主机名字hostname
命令 hostname 查看主机名字
vi /etc/sysconfig/network
修改hostname=hadoop101
保存退出:
先按esc键,保存退出命令 :wq
不保存退出命令 :q!
重启系统:reboot 命令,上面设置生效
4.关闭防火墙
(1)永久性生效,重启后不会复原
开启: chkconfig iptables on
关闭: chkconfig iptables off
(2)即时生效,重启后复原
开启: service iptables start
关闭: service iptables stop
永久关闭防火墙,并reboot重启系统,然后用service iptables status查看防火墙的运行状态
5克隆两台虚拟机:
右键->管理->克隆 下一步 选择“创建完整克隆”
新克隆的两台虚拟机名分别为hadoop102 hadoop103
对应的IP分别为192.168.30.102 192.168.30.103
注意:Xshell **连不上虚拟机也可能Windows系统网络连接中缺少**VMware Virtual Ethernet Adapter for VMnet8
**解决办法是:**点击下图中,“还原默认设置”,然后重启Windows系统
5.1分别修改新克隆的两个主机名字hostname 分别为:hadoop102、hadoop103
命令 hostname 查看主机名字
在hadoop102节点执行
vi /etc/sysconfig/network
修改hostname=hadoop102
在hadoop103节点执行
vi /etc/sysconfig/network
修改hostname=hadoop103
- 修改三台系统的hosts文件 使IP与主机名对应
vi /etc/hosts
192.168.30.101 hadoop101
192.168.30.102 hadoop102
192.168.30.103 hadoop103
修改完成后reboot重启系统,然后用hostname主机名是否修改成功
二、安装Jdk
准备工作: 在/opt文件夹下使用创建两个文件夹
cd /opt
mkdir module # module存放解压后文件
mkdir source # source 存放原文件
如果是节点分布在多台电脑上的情况,则此时linux是不能上网的, 需要把linux网络适配器改为NAT模式。,需要多台电脑通信时再改回“桥接模式”
可以先做免密登录和时间同步
jdk原文件获取:
安装JDK
由于centos7自带openJDK,所以先把openJDK删除干净后再进行安装.
Openjdk与jdk区别:
http://www.cnblogs.com/sxdcgaq8080/p/7487369.html
**1.**卸载系统自带的OpenJDK以及相关的java文件
输入 java -version 查看openjdk版本信息:
2.在命令窗口键入:
rpm -qa | grep java
命令说明:
rpm 管理套件
-qa 使用询问模式,查询所有套件
grep 查找文件里符合条件的字符串
java 查找包含java字符串的文件
以上文件中:
下面这几个可以删除(无法使用TAB补全文件名,原因未知)
java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
python-javapackages-3.4.1-11.el7.noarch
tzdata-java-2020a-1.el7.noarch
java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64
javapackages-tools-3.4.1-11.el7.noarch
.noarch结尾的文件可以不用删除。
3.开始删除
在命令窗口键入:
[root@hadoop101 module]# rpm -e --nodeps java-1.8.0-openjdk-1.8.0.262.b10-1.el7.x86_64
[root@hadoop101 module]# rpm -e --nodeps java-1.8.0-openjdk-headless-1.8.0.262.b10-1.el7.x86_64
方法1:从网上下载;方法2:把一下载的文件上传到本虚拟机:
1.把Windows中的jdk上传Linux系统
先安装rz工具
yum install lrzsz
然后使用rz 工具即可把Windows中的jdk上传Linux系统的/opt/source中
- 解压缩jdk
(1) tar -zxvf jdk-8u201-linux-i586.tar.gz_AuthParam
(2)通过ls命令查看文件 有个jdk1.8.0_201的文件夹,该文件夹就是上面jdk包解压后的文件夹
(3)修改该文件夹的名字为jdk1.8
mv jdk1.8.0_201 jdk1.8
(4)把jdk1.8移到module文件夹下 当前jdk1.8在source文件夹下
mv jdk1.8 …/module
3.配置环境
(1)
方法1:
修改**/etc/profile****文件**
如果你的计算机仅仅作为开发使用时推荐使用这种方法,因为所有用户的shell都有权使用这些环境变量,可能会给系统带来安全性问题。
vi /etc/profile
在profile文件末尾加入:(说明中间两句是林子雨的配置中出现的,估计和后面配置spark有关)
///
export JAVA_HOME=/opt/module/jdk1.8
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.: J A V A H O M E / l i b : JAVA_HOME/lib: JAVAHOME/lib:JRE_HOME/lib
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
或者用下面的:
在profile文件末尾添加jdk路径:
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8
export PATH= P A T H : PATH: PATH:JAVA_HOME/bin
##HADOOP_HOME (HADOOP后面安装用到)
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH= P A T H : PATH: PATH:HADOOP_HOME/bin
export PATH= P A T H : PATH: PATH:HADOOP_HOME/sbin
然后执行
source /etc/profile #使配置立即生效
方法2:
修改**.bash_profile****文件**
这种方法更为安全,它可以把使用这些环境变量的权限控制到用户级别,如果你需要给某个用户权限使用这些环境变量,你只需要修改其个人用户主目录下的.bash_profile文件就可以了。
vi ~/.bash_profile
在.bash_profile文件末尾加入:
export JAVA_HOME=/opt/module/jdk1.8
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
然后执行 :
source ~/.bash_profile #使环境变量配置立即生效
选择方法1或方法2后即可查看jdk是否按照正确使用命令:
java -version #查看java版本号
如果出现:ava version “1.8.0_201” 则说明jdk安装成功
如果出现:
-bash: /opt/module/jdk1.8/bin/java: /lib/ld-linux.so.2: bad ELF interpreter: No such file or directory
则安装失败,失败原因是,系统缺少glibc.i686 安装glibc.i686即可:
yum install glibc.i686
Centos7 安装64位JDK1.8就不会出现上述问题,建议安装64位JDK1.8
Centos7 安装yum install glibc.i686时会出现
Loaded plugins: fastestmirror, langpacks 错误
解决办法:(https://blog.csdn.net/batchaesir5897/article/details/100966007?utm_medium=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control&dist_request_id=&depth_1-utm_source=distribute.pc_relevant_t0.none-task-blog-2%7Edefault%7EBlogCommendFromMachineLearnPai2%7Edefault-1.control)
问题 一
报错环境:
刚使用VMware安装的centos7系统(最小化安装)实验系统,ifconfig时提示没有该命令,安装yum install net-tools时报错Loaded plugins: fastestmirror
注:fastestmirror是yum的一个加速插件,这里是插件提示信息是插件不能用了。
解决办法:先给它禁用了
1.修改配置文件
vim /etc/yum/pluginconf.d/fastestmirror.conf
由enabled = 1修改为enabled = 0 意思是禁用它
vim /etc/yum.conf
修改为plugins=0 不使用插件
3.清除缓存并重新构建yum 源
yum clean all
yum clean dbcache
yum makecache
问题 二
操作完之后如果在使用yum安装提示报错“could not retrieve mirrorlist”
网上解决办法:
vim /etc/sysconfig/network-scripts/ifcfg-ens33
将ONBOOT改为yes,wq!保存退出
重新启动网络
service network restart
然后再用java -version #查看java版本号。
4.把jdk1.8发送到另外两台机器
(1)把jdk1.8文件夹利用scp远程拷贝命令拷贝到其他两台电脑上
hadoop102 、hadoop103 机器的/opt文件夹下分别新建module文件夹
hadoop101 主机转到module目录
命令:
[root@hadoop101 module]#scp -r ./jdk1.8 root@192.168.30.102:/opt/module
或者:
[root@hadoop101 module]# scp -r ./jdk1.8/ root@hadoop103:/opt/module/
(2)分别配置hadoop102 、hadoop103 机器的jdk环境变量
在hadoop102、hadoop103节点分别执行
vi /etc/profile
在profile文件末尾加入:
export JAVA_HOME=/opt/module/jdk1.8
export PATH= J A V A H O M E / b i n : JAVA_HOME/bin: JAVAHOME/bin:PATH
然后执行
source /etc/profile #使配置立即生效
问题:在hadoop102、hadoop103节点查看java版本也是失败的,原因是在hadoop102、hadoop103上没有安装glibc.i686,需要安装glibc.i686,看后面启动yurn会出错。
三、安装hadoop
1.把hadoop-2.7.2 利用rz命令上传到hadoop101系统的/opt /source
文件夹下
(1)cd /opt /source #转到source目录
(2)利用rz工具从windows系统中把hadoop-2.7.2上传到hadoop101系统。
2.解压hadoop-2.7.2.tar压缩包
tar -zxvf hadoop-2.7.2.tar
- 把解压出来的hadoop-2.7.2文件夹移到/opt/module文件夹下
[root@hadoop101 source]# mv ./hadoop-2.7.2 …/module
[root@hadoop101 source]# cd …
[root@hadoop101 opt]# cd module
[root@hadoop101 module]# ls
3.配置hadoop环境变量
1.配置hadoop的环境变量与配置jdk的环境变量类似,也有两种方法:
方法1:
在 hadoop-2.7.2的解压文件中的etc/hadoop/hadoop-env.sh中配置
vi /opt/module/hadoop-2.7.2/etc/hadoop/hadoop-env.sh
修改hadoop-env.sh中下面语句:
export JAVA_HOME=${JAVA_HOME}
为:
export JAVA_HOME=/opt/module/jdk1.8
并在其下添加以下两条语句:
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH= H A D O O P H O M E / b i n : HADOOP_HOME/bin: HADOOPHOME/bin:HADOOP_HOME/sbin:$PATH
方法2:
(1) 在 hadoop-2.7.2的解压文件中的etc/hadoop/hadoop-env.sh中配置
vi /opt/module/hadoop-2.7.2/etc/hadoop/hadoop-env.sh
修改hadoop-env.sh中下面语句:
export JAVA_HOME=${JAVA_HOME}
为:
export JAVA_HOME=/opt/module/jdk1.8
(2) 修改/etc/profile文件,在jdk的配置语句后面添加:(说明中间一句是林子雨的配置中出现的,估计和后面配置spark有关)
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH= H A D O O P H O M E / b i n : HADOOP_HOME/bin: HADOOPHOME/bin:HADOOP_HOME/sbin:$PATH
建议采用方法(2)
4 测试hadoop是否按照成功
配置完后,可以测试hadoop是否按照成功:
[root@hadoop101 hadoop-2.7.2]# mkdir input
[root@hadoop101 hadoop-2.7.2]# cp etc/hadoop/*.xml input
[root@hadoop101hadoop-2.7.2]#bin/hadoop jar
share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output ‘dfs[a-z.]+’
[root@hadoop101 hadoop-2.7.2]# cat output/*
上述的输出结果为:
1 dfsadmin
问题:在hadoop102、hadoop103中没有修改**/etc/profile中hadoop的环境变量,后面运行程序会出错,需要把hadoop101中/etc/profile文件分发到hadoop102****、hadoop103上对应的位置既:/etc/profile。**
5.使用xsync.sh这个脚本向集群中进行分发hadoop
5.1 编写集群分发脚本xsync.sh
在/usr/local/bin这个目录下存放的脚本,可以在系统任何地方直接执行。
(1)在/usr/local/bin目录下创建xsync.sh文件
[root@hadoop101 /]# cd /usr/local/bin
[root@hadoop101 bin]# touch xsync.sh
[root@hadoop101 bin]# vi xsync.sh
(2)输入以下代码:
#!/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=102; host<104; host++)); do
#echo p d i r / pdir/ pdir/fname u s e r @ h a d o o p user@hadoop user@hadoophost:$pdir
echo --------------- hadoop$host ----------------
rsync -rvl p d i r / pdir/ pdir/fname u s e r @ h a d o o p user@hadoop user@hadoophost:$pdir
done
(3)修改脚本 xsync 具有执行权限
[root@hadoop101 bin]# chmod 777 xsync.sh
下面一句不太理解,没有使用该句,xsync.sh也能执行
[root@hadoop101 bin]# chown pojian:pojian xsync
(4)执行xsync.sh脚本 ,把hadoop101中/opt/module目录下的hadoop-2.7.2分发到集群中的另两台机器中 /opt/module目录中
hadoop101机器要先转到/opt/module路径
[root@hadoop101 bin]# cd /opt/module
[root@hadoop101 module]# xsync.sh hadoop-2.7.2 /opt/module
分发profile文件的命令为:
[root@hadoop101 etc]# xsync.sh profile /etc
之后,在hadoop102和hadoop103上都要执行source /etc/profile
四、配置集群免密登录
准备:首先要保证主机名、hosts、防火墙正确设置
1.配置每个节点本身公钥和私钥,即在每个节点执行如下两个命令:
(1)进入到我的家目录
[root@hadoop101 etc]# cd ~/.ssh
(1)生成公钥和私钥:
[root@hadoop101 .ssh]# ssh-keygen -t rsa
执行上述指令,然后敲(三个回车),中间不要输入任何内容,在.ssh目录下就会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
- hadoop101节点登录自身免密,在hadoop101节点执行如下命令:
[root@hadoop101 .ssh]# cat id_rsa.pub >>authorized_keys
该命令把hadoop101节点中生成的id_rsa.pub(公钥)创建并拷贝到authorized_keys文件中,这样就实现了hadoop101节点登录自身免密。
(3)测试hadoop101节点登录自身免密是否成功,执行如下命令
[root@hadoop101 .ssh]# ssh hadoop101
如果不用输入密码,则免密登录成功。
[root@hadoop101 .ssh]# exit
退出ssh远程登录
如果不成功,则需要设置authorized_keys文件的权限,执行如下命令:
[root@hadoop101 .ssh]# chmod 600 authorized_keys
(4)在hadoop102 和hadoop103的节点上分别执行如下命令:
[root@hadoop102 .ssh]# ssh-copy-id -i ~/.ssh/id_rsa.pub hadoop101
则把hadoop102 和hadoop103的节点上的id_rsa.pub都写入hadoop101节点的authorized_keys文件中,这样hadoop101节点的authorized_keys文件中就拥有了hadoop101 ,hadoop102和hadoop103三个节点的id_rsa.pub。
此时,仅实现了,hadoop101自登录、hadoop102和hadoop103登录hadoop101的免密功能,还需要把hadoop101中的authorized_keys文件分发到hadoop102和hadoop103上。
(5)分发authorized_keys文件
可以在hadoop101上执行xsync.sh脚本,hadoop101中的authorized_keys文件分发到hadoop102和hadoop103上。
[root@hadoop101 .ssh]# xsync.sh authorized_keys ~/.ssh
自此,三个节点间的免密登录就实现了。赶紧测试下吧!
注意:分别做9次异地登陆测试,否则后面启动yarn会启动失败!
[root@hadoop101 .ssh]# ssh hadoop101
[root@hadoop101 .ssh]# ssh hadoop102
[root@hadoop101 .ssh]# ssh hadoop103
[root@hadoop102 .ssh]# ssh hadoop101
[root@hadoop102 .ssh]# ssh hadoop102
[root@hadoop102 .ssh]# ssh hadoop103
[root@hadoop103 .ssh]# ssh hadoop101
[root@hadoop103 .ssh]# ssh hadoop102
[root@hadoop103 .ssh]# ssh hadoop103
五、集群部署
hadoop101 hadoop102 hadoop103
HDFS
NameNode SecondaryNameNode
DataNode DataNode DataNode
YARN
NodeManager NodeManager NodeManager
ResourceManager
hadoop101 | hadoop102 | hadoop103 |
---|---|---|
HDFS | ||
NameNode | YARN | SecondaryNameNode |
DataNode | DataNode | DataNode |
NodeManager | NodeManager | NodeManager |
ResourceManager | ||
六、配置hadoop配置文件
1.一共需要配置7个文件,这7个文件都在/opt/module/hadoop-2.7.2/etc/hadoop文件夹下。
把配置信息写在文件的
之间
(1)core-site.xml
[root@hadoop101 hadoop]# vi core-site.xml
在
之间复制下列内容,注释不要复制,只复制下面粗体部分。
fs.defaultFS
hdfs://hadoop101:9000
hadoop.tmp.dir
/opt/module/hadoop-2.7.2/data/tmp
(2)Hdfs 部分有3个文件:
(2.1)hadoop-env.sh
(此文件在安装hadoop时已配置过,故可以省略)
export JAVA_HOME=/opt/module/jdk1.8
(2.2) hdfs-site.xml
[root@hadoop101 hadoop]# vi hdfs-site.xml
dfs.replication
3
dfs.namenode.secondary.http-address
hadoop103:50090
**(2.3)**slaves
[root@hadoop101 hadoop]# vi slaves
把原文件中的localhost删除掉,输入集群节点名:
hadoop101
hadoop102
hadoop103
(3) yarn
(3.1) yarn-env.sh
vi yarn-env.sh
添加以下语句:
修改:
为,jdk的实际路径**😗*
去掉export JAVA_HOME前面的#
export JAVA_HOME=/opt/module/jdk1.8
(3.2)yarn-site.xml
[root@hadoop101 hadoop]# vi yarn-site.xml
添加下面黑体部分
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.resourcemanager.hostname
hadoop102
(4)mapreduce
(4.1)mapred-env.sh
vi mapred-env.sh
修改
为:
export JAVA_HOME=/opt/module/jdk1.8
(4.2) mapred-site.xml
hadoop文件夹下没有mapred-site.xml文件,
但有一个mapred-site.xml.template文件,拷贝一份该文件,并把新拷贝的文件命名为mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
然后再打开mapred-site.xml
vi mapred-site.xml
添加黑体部分
mapreduce.framework.name
yarn
**2.**分发hadoop文件夹
自此,7个文件全部配置完毕,应用xsync.sh脚本把hadoop101节点的hadoop文件夹远程分发到hadoop102,hadoop103上的对应位置,
一定要退到上一级目录/opt/module/hadoop-2.7.2/etc
[root@hadoop101 etc]# xsync.sh ./hadoop /opt/module/hadoop-2.7.2/etc
七、参考Hoop官网,启动服务
1.格式化namenode namenode根据部署规划,在hadoop101节点上。
[root@hadoop101 hadoop-2.7.2]# bin/hdfs namenode -format
2.启动namenode
[root@hadoop101 hadoop-2.7.2]# sbin/start-dfs.sh
通过 jps命令可以查看是否启动
3.在hadoop102节点启动yarn.并用jps命令查看是否启动
[root@hadoop102 hadoop-2.7.2]# sbin/start-yarn.sh
如果hadoop102节点namenode 不能启动,则反复关闭,、启动yarn试试!
关闭进程: kill 4325
4325为进程编号
全部启动成功后,hadoop101节点启动的服务有:
hadoop103节点启动的服务有:
##八、在集群上测试一个jar包 单词统计的功能
1.在本地创建一个word.txt文件
[root@hadoop101 hadoop-2.7.2]# touch word.txt
[root@hadoop101 hadoop-2.7.2]# vi word.txt
输入:
小明 小张 小李 小明
张三 王五 张三 小李
2.在服务器上的跟目录下创建一个 input的文件夹
[root@hadoop101 hadoop-2.7.2]# bin/hdfs dfs -mkdir /input
3.把word.txt文件上传到服务器中的input文件夹中
[root@hadoop101 hadoop-2.7.2]# bin/hdfs dfs -put ./word.txt /input
4.查看是否上传成功
[root@hadoop101 hadoop-2.7.2]# bin/hdfs dfs -ls /input
5.执行wordcount单词统计功能
在执行此命令前,再次确认集群中所有节点的防火墙都已经关闭!
[root@hadoop101 hadoop-2.7.2]# bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /input /output
在服务器的跟目录下就创建了一个output文件夹
output文件夹内有2个文件
[root@hadoop101 hadoop-2.7.2]# bin/hdfs dfs -ls /output
输出output文件夹文件的内容:
[root@hadoop101 hadoop-2.7.2]# bin/hdfs dfs -cat /output/*
Great!兴奋吧,基本的完全分布式已经建立成功了,是不是几天的辛苦很欣慰呀!!!继续加油!!!!
删除删除文件系统上的output文件夹
[root@hadoop101 hadoop-2.7.2]# bin/hdfs dfs -rm -r /output
删除ouput文件夹的件part-r-00000文件:
[root@hadoop101 hadoop-2.7.2]# bin/hdfs dfs -rm /output/ part-r-00000
6.yarn的浏览器页面查看.集群中已执行的任1务。
由于我们的yarn部署在hadoop102节点,该节点的固定IP为192.168.30.102:
所以通过浏览器浏览:http://192.168.30.102:8088/cluster
可以查看yarn上已执行的任务。
查看HDFS文件:在hadoop101节点:192.168.30.101
所以通过浏览器浏览:http://192.168.30.101:50070/dfshealth.html#tab-overview
HDFS页面下载数据文件报错解决
问题解决 将Linux服务器上的 /etc/hosts文件中的集群信息,添加到本地hosts文件中 C:\Windows\System32\drivers\etc\hosts
192.168.30.101 hadoop101
192.168.30.102 hadoop102
192.168.30.103 hadoop103
C:\WINDOWS\system32\drivers\etc\host 文件无法修改
Win7对hosts等文件进行了保护,要修改的话可以如下:
1、单击“开始”,单击“所有程序”,单击“附件”,右键单击“记事本”,然后单击“以管理员身份运行”。(如果系统提示输入管理员密码或进行确认,请键入密码或单击“允许”。
2、系统会运行记事本程序,然后点击记事本窗口上面的文件,选择打开,找到Hosts 文件或 Lmhosts 文件,进行必要的更改,然后单击“编辑”菜单上的“保存”即可。
九:时间同步
执行八时往往会出错,这是因为集群中没有设置时间同步。
- 时间服务器配置(必须root用户)
(1)检查ntp是否安装 (hadoop101、hadoop102、hadoop103都需要安装)
[root@hadoop101 hadoop-2.7.2]# 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
如果没有,或全不全则需安装ntp插件
安装命令:#yum install ntp
[root@hadoop102 etc]# yum install ntp
否则没有下面的ntp.conf文件
选择一台服务器作为时间服务器,如hadoop101
(2)修改ntp配置文件 ((2)-(5)步骤仅仅修改hadoop101节点)
vi /etc/ntp.conf
[root@hadoop101 hadoop-2.7.2]# vi /etc/ntp.conf
修改内容如下
a)修改1(授权192.168.30.0-192.168.1.255网段上的所有机器可以从这台机器上查询和同步时间)
#restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap为
restrict 192.168.30.0 mask 255.255.255.0 nomodify notrap
说明:192.168.30.0为自己集群实际的网段
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@hadoop101 hadoop-2.7.2]# vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
(4)重新启动ntpd服务
[root@hadoop101 hadoop-2.7.2]# service ntpd status
ntpd 已停
[root@hadoop101 hadoop-2.7.2]# service ntpd start
正在启动 ntpd: [确定]
关闭:
[root@hadoop101 hadoop-2.7.2]# service ntpd stop
(5)设置ntpd服务开机启动
Centos6.5****使用:chkconfig ntpd on
[root@hadoop101 hadoop-2.7.2]# chkconfig ntpd on
**Centos7****使用的命令是:**systemctl enable ntpd
设置ntpd服务开机关闭
systemctl disable chronyd
- 其他机器配置(必须root用户)
(1)在其他机器配置10分钟与时间服务器同步一次
[root@hadoop103 Desop]# crontab -e
编写定时任务如下:
*/10 * * * * /usr/sbin/ntpdate hadoop102
如果保存出错,则是因为没有安装crontab
- 确认crontab是否安装:
执行 crontab 命令如果报 command not found,就表明没有安装
- 安装 crontab
执行 yum install -y vixie-cron
- 确认是否安装成功:
执行 crontab -l
- 看是否设置了开机自动启动
chkconfig --list crond 或者chkconfig crond on
- 启动crontab
service crond start
6.添加计划任务
crontab -e
crontab -l
7.脚本sh设置777权限
(2)修改任意机器时间
[root@hadoop103桌面]# date -s “2017-9-11 11:11:11”
(3)十分钟后查看机器是否与时间服务器同步
[root@hadoop103桌面]# date
说明:测试的时候可以将10分钟调整为1分钟,节省时间。
[外链图片转存中…(img-sBZ9vi4J-1704285639421)]
(3)修改/etc/sysconfig/ntpd 文件
[root@hadoop101 hadoop-2.7.2]# vim /etc/sysconfig/ntpd
增加内容如下(让硬件时间与系统时间一起同步)
SYNC_HWCLOCK=yes
[外链图片转存中…(img-5ebs9GXy-1704285639421)]
(4)重新启动ntpd服务
[root@hadoop101 hadoop-2.7.2]# service ntpd status
ntpd 已停
[外链图片转存中…(img-fIxTOv1I-1704285639421)]
[root@hadoop101 hadoop-2.7.2]# service ntpd start
正在启动 ntpd: [确定]
关闭:
[root@hadoop101 hadoop-2.7.2]# service ntpd stop
(5)设置ntpd服务开机启动
Centos6.5****使用:chkconfig ntpd on
[root@hadoop101 hadoop-2.7.2]# chkconfig ntpd on
**Centos7****使用的命令是:**systemctl enable ntpd
设置ntpd服务开机关闭
systemctl disable chronyd
[外链图片转存中…(img-pyYg37F7-1704285639422)]
- 其他机器配置(必须root用户)
(1)在其他机器配置10分钟与时间服务器同步一次
[root@hadoop103 Desop]# crontab -e
编写定时任务如下:
*/10 * * * * /usr/sbin/ntpdate hadoop102
如果保存出错,则是因为没有安装crontab
- 确认crontab是否安装:
执行 crontab 命令如果报 command not found,就表明没有安装
- 安装 crontab
执行 yum install -y vixie-cron
- 确认是否安装成功:
执行 crontab -l
- 看是否设置了开机自动启动
chkconfig --list crond 或者chkconfig crond on
- 启动crontab
service crond start
6.添加计划任务
crontab -e
crontab -l
7.脚本sh设置777权限
(2)修改任意机器时间
[root@hadoop103桌面]# date -s “2017-9-11 11:11:11”
(3)十分钟后查看机器是否与时间服务器同步
[root@hadoop103桌面]# date
说明:测试的时候可以将10分钟调整为1分钟,节省时间。
vm集群 (已安装hadoop spark mysql scala)
https://www.alipan.com/s/MpnF2xWDitv