VM版本:15.0.4 build-12990004
Linux: 7.9.2009 (Core)
Hadoop: hadoop-2.8.0
JDK: jdk1.8.0_161
1、创建一台虚拟机进行基本配置
这里就不进行虚拟机的创建了。这里额外创建了一个evil用户,之后利用evil用户进行hadoop的相关操作。
-
网络配置
命令: vim /etc/sysconfig/network-scripts/ifcfg-ens33
-
赋予evil用户root权限
修改/etc/sudoers文件,找到下面的内容,在root下面添加一行 evil ALL=(ALL) ALL。命令: vim /etc/sudoers
## Allow root to run any commands anywhere root ALL=(ALL) ALL evil ALL=(ALL) ALL
注意:
①可能这个文件不具备写的权限,利用 chmod 744 /etc/sudoers 命令使文件具备写的权限;
②如果的创建的是其他用户,请将evil换成相应的用户;
③这里使用root用户进行操作,接下来如果换用其他用户会进行说明; -
主机映射
vim /etc/hosts
将之后要用到的ip和主机名加入这个文件,我这里是三台机器
注意:主机名后面不要有多余的空格
2、 安装jdk和hadoop
-
在/opt目录下创建两个文件 software module,分别用来放压缩包和软件,这两个的用户和组都改为evil
jdk安装包
链接:https://pan.baidu.com/s/1IBH4CuVH32i1aY_74I1P5w
提取码:v7wshadoop安装包
链接:https://pan.baidu.com/s/1YI2_rYF9p1pQnSk8s0fZog
提取码:stlz -
安装和环境配置
将两个安装包传输到software,下面进入software目录进行安装到指定的module目录下
命令:
tar -zxvf hadoop-2.8.0.tar.gz -C /opt/module/ tar -zxvf jdk-8u161-linux-x64.tar.gz -C /opt/module/
编辑/etc/profile文件,添加jdk和hadoop环境变量
命令:vim /etc/profile
3、克隆两台虚拟机
-
将之前的虚拟机关闭,克隆出两台虚拟机
-
配置这两台虚拟机
①修改主机名
命令:vim /etc/hostname
这里我分别把主机名改为了hadoop103、hadoop104②配置网络
关于这一步网上有着大量说法,配mac地址、删除UUID(每台机器的唯一标识)、改ip等等。不过,这里我改了ip和删除了UUID,结果三台虚拟机能正常的网络连接。CentOS7只需配IP和删除UUID即可(亲测有用),7以下的版本就要繁琐一点,这里就不介绍了。
命令:vim /etc/sysconfig/network-scripts/ifcfg-ens33
相应的我把ip改成了192.168.1.103和192.168.1.104,再强调一遍要根据自己的实际的网络配置来改。③重启虚拟机,同时也把之前的hadoop102开启。
④配置ssh免密码登入
设置免密登入是为了后面集群群起用的,和在使用xsync分发脚本时不再需要重复输入密码,提高效率。我们配置的这个集群,hadoop102是namenode、hadoop103是resourcemanage,所以我们需要为这两个机器配置免密登入。
免登录原理
配置密钥前我们进入hadoop102的/home/evil/.ssh目录
1、 生成公钥和私钥命令:ssh-keygen -t rsa。执行后连续三下回车即可
2、将公钥拷贝到要免密登录的目标机器上:ssh-copy-id hadoop102 ssh-copy-id hadoop103 ssh-copy-id hadoop104 分别在hadoop102上执行这三个命令。打开每个hadoop中/home/evil/.ssh下有一个authorized_keys文件,说明拷贝成功。3、免密登入测试
在hadoop102上使用命令: ssh hadoop104(102、103) 登入hadoop104,第一次登入需要密码,第二次就不需要密码就说明成功hadoop102免密登入成功。
4、在hadoop103上进行同上的免密登录配置,因为resourcemanage在hadoop103上,到时候要进行manage的开启注意:我遇到过这种问题:文件配置好后,进行免密登入时,遇到了hadoop102登入到hadoop103、hadoop104免密登入成功,hadoop102登入到hadoop102失败的情况。 日志中出现了: Authentication refused: bad ownership or modes for directory 要解决,请点这里
-
xsync分发脚本的设置
设置这个脚本方便于后面分布式系统配置文件的统一分发,提高效率。现在转化为evil用户,hadoop102进入/home/evil,创建一个bin文件;在文件中创建一个文件,将shell脚本写入。
命令:mkdir bin //进入/home/evil,创建bin目录 vim xsync //创建bin文件并编辑
将下面的脚本复制到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
注意:这个脚本是根据三台虚拟机编写的,且每台的主机名分别是hadoop102、hadoop103、hadoop104;如果不太一样,将循环那改一下就可以了。
4、分布式系统配置
前面的三步都可以说是为这一步做准备的,下面进行分布式系统配置。
现在我们都以evil用户登入Linux,在hadoop102上进入 /opt/module/hadoop-2.8.0/etc/hadoop hadoop的配置文件的目录下。这里有很多配置文件
接下来进行一些的文件的配置,这里集群部署如下:
-
slaves
配置这个文件是为了可以群起集群。在这个文件添加这个集群的所有主机名称。注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行。hadoop102 hadoop103 hadoop104
-
core-site.xml
配置NameNode的地址和Hadoop运行时产生文件的存储目录<!-- 指定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.8.0/data/tmp</value> </property>
-
hdfs-site.xml
<!-- 指定Hadoop的副本数 --> <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定Hadoop辅助名称节点主机配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop104:50090</value> </property>
-
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>
-
mapred-site.xml
这里往往只有一个mapred-site.xml的模板文件mapred-site.xml.template,将这个文件重命名即可<!-- 指定MR运行在Yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
-
hadoop-env.sh、yarn-env.sh、mapred-env.sh
这三个文件,均只要在里面配置jdk的环境变量即可。
-
xsync分发配置文件
xsync slaves
xsync core-site.xml
xsync hdfs-site.xml
xsync yarn-site.xml
xsync mapred-site.xml
xsync hadoop-env.sh
xsync yarn-env.sh
xsync mapred-env.sh
5、启动分布式系统
-
格式化NameNode和群起namenode
如果集群是第一次启动,需要格式化NameNode(注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除data和log数据)。在hadoop102上,进入/opt/module/hadoop-2.8.0/目录下,
①执行 bin/hdfs namenode -format
②执行 sbin/start-dfs.sh -
群起yarn
在hadoop103上,进入/opt/module/hadoop-2.8.0/目录下,
①执行 sbin/start-yarn.sh -
每个Linux上执行jps命令查看进程
成功
-
查看 namenode的web 和 yarn的web
成功
注意:若看不起web端,①检查进程是否启动 ②防火墙是否关闭
防火墙关闭
systemctl stop firewalld