集群配置
该集群有102、103、104三台机器。
hadoop102 | hadoop103 | hadoop104 | |
---|---|---|---|
HDFS | NameNode、DataNode | DataNode | SecondaryNameNode、DataNode |
YARN | NodeManager | ResourceManager、NodeManager | NodeManager |
xsync脚本
先创建文件,放在bin目录下
[root@hadoop102 ~]# mkdir bin
[root@hadoop102 bin]# touch xsync
文件如下
[root@hadoop102 bin]# vim 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 ------------------- cdh$host --------------
rsync -rvl $pdir/$fname $user@cdh$host:$pdir
done
给权限
[root@hadoop102 bin]# chmod 777 xsync
配置102
首先每个机器的名称和ip匹配,进入/etc/hosts输入ip和服务名称。每台机器都要写。
[root@hadoop102 ~]# vim /etc/hosts
192.168.133.131 hadoop102
192.168.133.132 hadoop103
192.168.133.133 hadoop104
先配置hadoop102,进入hadoop
[root@hadoop102 /]# cd /opt/module/hadoop-2.8.2/
[root@hadoop102 hadoop-2.8.2]# cd etc/hadoop/
配置HDFS
修改hadoop-env.sh,改JAVA_HOME位置,先获取位置
[root@hadoop102 ~]# echo $JAVA_HOME
/opt/module/jdk1.8.0_261
再修改
[root@hadoop102 hadoop]# vim hadoop-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_261
接着修改core-site.xml文件
[root@hadoop102 hadoop]# vim core-site.xml
添加
<configuration>
<!--指定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.2/data/tmp</value>
</property>
</configuration>
修改HDFS配置文件hdfs-site.xml
[root@hadoop102 hadoop]# vim hdfs-site.xml
<configuration>
<!--指定Hadoop辅助名称节点主机配置-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
</configuration>
配置yarn
修改yarn-env.sh文件
[root@hadoop102 hadoop]# vim yarn-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_261
修改yarn-site.xml
[root@hadoop102 hadoop]# vim 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>
配置MapReduce
修改mapred-env.sh文件
[root@hadoop102 hadoop]# vim mapred-env.sh
export JAVA_HOME=/opt/module/jdk1.8.0_261
修改mapred-site.xml,先把mapred-site.xml.template复制到mapred-site.xml再修改
[root@hadoop102 hadoop]# cp mapred-site.xml.template mapred-site.xml
[root@hadoop102 hadoop]# vim mapred-site.xml
<configuration>
<!--指定MR运行在yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
将上述配置同步到103、104,xsync是前面编写的脚本。
[root@hadoop102 hadoop]# cd ..
[root@hadoop102 etc]# xsync hadoop/
启动HDFS
先格式化,删除文件,102\103\104里面都要删(如果已经启动了,要先停止节点再删除文件)
[root@hadoop102 hadoop-2.8.2]# rm -rf data/ logs/
[root@hadoop102 hadoop-2.8.2]# bin/hdfs namenode -format
102上启动
[root@hadoop102 hadoop-2.8.2]# sbin/hadoop-daemon.sh start namenod
[root@hadoop102 hadoop-2.8.2]# sbin/hadoop-daemon.sh start datanode
103上启动
[root@hadoop102 hadoop-2.8.2]# sbin/hadoop-daemon.sh start datanode
104上启动
[root@hadoop102 hadoop-2.8.2]# sbin/hadoop-daemon.sh start datanode
然后本机浏览器上访问http://hadoop102:50070成功。
配置ssh
102上有NameNode,所以它需要访问其他机器,要配置免密登录。
在102进入ssh文件
[root@hadoop102 ~]# ls -all
[root@hadoop102 ~]# cd .ssh/
获取秘钥
[root@hadoop102 .ssh]# ssh-keygen -t rsa
回车后,三次回车
这时.ssh/下面多了两个文件,id_rsa存放私钥,id_rsa.pub存放公钥,known_hosts存放授权过的无密码登录服务器公钥。
[root@hadoop102 .ssh]# ll
总用量 12
-rw-------. 1 root root 1679 10月 22 08:57 id_rsa
-rw-r--r--. 1 root root 396 10月 22 08:57 id_rsa.pub
-rw-r--r--. 1 root root 374 10月 21 17:42 known_hosts
拷贝至103
[root@hadoop102 .ssh]# ssh-copy-id hadoop103
回车后第一次需要输入103的密码
此时,发现103的.ssh/下多了文件authorized_keys,里面存放的是102的公钥
[root@hadoop103 .ssh]# ll
总用量 4
-rw-------. 1 root root 396 10月 22 09:02 authorized_keys
同样的做法拷贝到102(自身也需要拷贝)、104 。
现在102访问103和104就不需要密码了,实现免密通信。
此外,103上面有ResourceManager,也需要配置ssh。
群起集群
配置slaves
进入102,修改slaves
[root@hadoop103 .ssh]# cd /opt/module/hadoop-2.8.2/etc/hadoop/
[root@hadoop103 hadoop]# vim slaves
hadoop102
hadoop103
hadoop104
删除文件里其他内容,添加机器名称(这里不能有多余的空格)。
先查看运行的进程
[root@hadoop102 hadoop-2.8.2]# jps
56437 NameNode
67051 Jps
56543 DataNode
把DataNode、NameNode退出
[root@hadoop102 hadoop-2.8.2]# sbin/hadoop-daemon.sh stop datanode
[root@hadoop102 hadoop-2.8.2]# sbin/hadoop-daemon.sh stop namenode
进入103、104,退出DataNode
[root@hadoop102 hadoop-2.8.2]# sbin/hadoop-daemon.sh stop datanode
这样所有的节点就都正常退出了。
启动HDFS
在102群起
[root@hadoop102 hadoop-2.8.2]# sbin/start-dfs.sh
启动yarn
在103上启动yarn,在另外两个上启动会直接挂,因为ResourceManager配在103上。
[root@hadoop103 hadoop-2.8.2]# sbin/start-yarn.sh
集群测试
传文件测试,将README.txt上传到/目录下
[root@hadoop102 hadoop-2.8.2]# bin/hdfs dfs -put README.txt /
访问http://hadoop102:50070/
这里可以看到上传的文件,
这里数据其实是存储在Linux上的,在下面的目录blk_1073741825文件
[root@hadoop102 subdir0]# pwd
/opt/module/hadoop-2.8.2/data/tmp/dfs/data/current/BP-1924141108-192.168.133.131-1603273870979/current/finalized/subdir0/subdir0