第二篇 hadoop集群的搭建
步骤概述:
一、linux环境准备
1-网络准备
2-脚本准备
3-ssh准备
二、hadoop环境准备
1-jdk、hadoop、环境变量。
2-四个site和三个evn
3-slaves(workers)
三、集群群启
1-启动hdfs
2-启动yarn
3-web控制台
目录
一、linux环境准备
1-配置网络
运行hadoop集群,我们需要linux配置好以下基础功能:
- vim编辑器已安装(这个是为了方便我们以后的编辑工作)
- rsync工具已安装(这个用于以后我们分发配置文件)
- 防火墙已关闭
- ip应为静态,指定hostname。
在这个linux的准备工作中,重点说一下第三步配置ip,因为我本人的linux基础相当差,一开始进行网络配置时我使用了最笨的方法,就是去编辑 /etc/sysconfig/network-scripts下的网卡配置文件,用编辑器一行一行的写,后来在朋友的指点下学会了使用nmtui工具,强烈推荐大家使用这个工具,配置网络极其方便快捷。这里要配置的几点分别是:1-指定分配方式自动变为手动;2-指定ip、网关、域名解析器。
可爱的nmtui界面:
有时候新装的机器这样配置完还是ping不通,是因为onboot还是no,去修改一下网卡配置文件即可。另外如果想要节省工作量,最好在第一台机器上添加我们的普通用户,并将此用户添加入sudoers列表,这样我们在以后克隆的机器中就不必再重复的添加用户了。
在以上配置完成后,hadoop001号机器就可以作为原点机进行克隆了,我在这里配置了四台机器构成一个集群,克隆之后的三个linux分别需要重复上文中的第四步,修改主机名、ip。保证我们的四台机器能相互ping通地址即可。
2-分发脚本准备
接着我们需要根据rsync工具写一个分发脚本,以后我们分发配置文件的工作就全靠它了,名字随意起,就是不要跟别的执行文件同名就好,我的叫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=101; host<105; host++)); do echo ------------------- hadoop$host -------------- rsync -rvl $pdir/$fname $user@hadoop$host:$pdir done
这个脚本应写在/home/username/bin/下,写完脚本后将它修改为具有执行权限:
chmod 777 xsync
写完之后可以测试一下,我们去配置hosts文件,然后用这个脚本把hosts分发到集群中,hosts文件存储了我们集群中每台机器的主机名和ip的映射,在这个文件中留有身份信息的机器,我们都可以直接用主机名去访问它。修改hosts并分发到各台机器是属于hadoop环境准备中的工作,这里我们为了测试xsync顺便把它给做了。
vim /etc/hosts
添加映射信息(这个映射信息是我们在配置网络时上边自己设置的)
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.200.101 hadoop101
192.168.200.102 hadoop102
192.168.200.103 hadoop103
192.168.200.104 hadoop104
前两行是默认有的,不去管它,后边四行是我们自己添加的,写好以后保存退出,使用xsync脚本分发。
xsync /etc/hosts
这个过程中系统会向我们询问目的机器的密码,这里正常分别输入密码即可,后边配置完ssh以后就可以免去这个麻烦了。执行完毕,我们去其他机器中检查hosts文件,看是否与hadoop101中内容相同,如果信息已经同步,那就证明分发脚本已经ok。没成功的话就根据不同情况debug一下。同步工具必须可用我们才能继续,这里有两个我趟过的坑提一下:第一,不要纠结shell脚本的语法,复制粘贴即可,我们只要看懂,能小改即可,先把集群跑起来别的以后再说;第二,分发脚本找不到命令,这个跟环境变量有关,可以尝试把脚本移到usr/local/bin/目录下。
这步执行完,我们就可以通过 ping hadoop103这样的方式与集群中的机器进行通信了,到此为止,LINUX的环境准备还剩下最后一步:配置ssh。
3-ssh无密登录
这里涉及到免密登录中公钥和私钥的一些知识,在用户家目录下 ll -all 会看到一个.ssh文件夹 这个文件夹中存储着密钥信息,我们这一步要操作的就是这个文件夹,然而实际上我们并不需要去了解其中详细的访问原理就可以完成配置,如果有兴趣的小伙伴可以去看专门介绍ssh的帖子。
用到的两个命令
ssh-keygen -t rsa
ssh-copy-id hadoop102
第一个命令执行后连续三次回车,会生成私钥和公钥(这个时候去.ssh文件中看就会看到id rsa 和id_rsa.pub 两个文件已经生成)。
第二个命令就是将公钥发送到想要实现免密登录的机器上。
这里需要注意的点是,对本机也需要发送配置公钥!
每台机器上都要进行对所有机器的免密公钥发送,其中在hadoop102上切换到root用户再额外进行一次公钥轮发(这里是因为我们选定了hadoop102作为namenode所在机器,后文会再提)。
此时再使用分发脚本分发文件,一键即可完成,再也不需要输入密码。
二、hadoop环境准备
1-jdk&&hadoop
简单说:连接xftp工具,上传jdk和hadoop压缩包到linux,这里建议养成固定的软件存放习惯,安装包的存放目录和软件的安装目录在集群中应该统一。我自己按照老师的要求在/opt/software/下存放安装包,在opt/module/下安装软件。
在一号机上解压两个压缩包。
vim /etc/profile 配置环境变量。如下:
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_231
export PATH=$PATH:$JAVA_HOME/bin
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
重启一下profile,输入hadoop看看配置是否成功,出现hadoop相关信息就代表这一步已经完成了。
接下来把他们分发给所有的机器:
xsync /opt/module
xsync /etc/profile
这里一定要注意的是:要把软件的安装目录更改为普通用户所有,每台机器都要做。
sudo chown username:username -R /opt/module
分别检查,确认。
2-四个site和三个evn
在这一步,我们就开始需要考虑集群的分配了。
这里 以我的分配为例:
--namenode运行在Hadoop102上
--2nn运行在hadoop104上
--resourcemanager运行在hadoop103上
--hdfs副本数设为3份
--hadoop运行时的临时文件存储目录为:/opt/module/hadoop-3.1.4/data/tmp
--reducer获取数据的方式为 shuffle
为实现以上设计,开始配置四个site文件,这些配置文件的存放目录都为/opt/module/hadoop-3.1.4/etc/hadoop/。
第一个site: core-site.xml
写入以下内容:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-3.1.4/data/tmp</value>
</property>
</configuration>
这里指定了namenode的位置,指定了临时文件的存放地址。
第二个site:hdfs-site.xml
写入以下内容
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:50090</value>
</property>
</configuration>
这里指定了副本数和2nn的位置为104。
第三个site:yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
这里指定了resourcemanager的位置和reduce获取数据的方式。
第四个site:mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
这里指定了mapreduce运行在yarn上
三个evn:
在hadoop-evn.sh yarn-evn.sh mapred-env.sh 中 统一添加JAVA_HOME:
JAVA_HOME=/opt/module/jdk1.8.0_231
一共七个配置文件,配置好以后使用分发脚本分发到各台机器,检查,确认无误后进入下一步。
3-slaves(workers)
此文件存放于:/opt/module/hadoop-3.1.4/etc/hadoop/下
用于存放hadoop集群工作单位的信息,老版本名字是slaves,新版本名字是workers,编辑这个文件是要特别注意不能多写空格、换行、制表等字符,否则脚本在读取内容时会读入错误信息,导致运行失败。
hadoop101
hadoop102
hadoop103
hadoop104
只填入主机名,不填写任何额外内容
至此,hadoop的环境准备工作已经完成。
三、集群启动
第一次启动时,要对namenode进行一次格式化,以后就不需要再进行格式化了(这里涉及到namenode和datenode进程号一致的问题,只要不乱搞就不会有麻烦,如果以后需要再进行格式化,一定要先停进程,再删掉logs和data数据,否则会出现问题)。
切换至hadoop根目录下:/opt/module/hadoop-3.1.4/
格式化namenode
bin/hdfs namenode -format
启动hdfs(再namenode所在机器上)
sbin/start-dfs.sh
启动yarn(在resourcemanager所在机器上)
sbin/start-yarn.sh
启动过程中可能会有各种各样的报错,根据提示debug即可。
全部启动后:
在101上jps可见nodedate和nodemanager;
在102上可见namenode、datanode、nodemanager;
在103上可见datanode、resourcemanager、nodemanager;
在104上可见namenode、datanode、nodemanager、secondarynamenode;
到这里集群已经启动,可在web上查看相应的界面。
hdfs控制台:hadoop102:9870
yarn控制台:hadoop103:8088
(想通过主机名访问而不是ip访问,需要在windows中配置windows的hosts文件,目录:C:\Windows\System32\drivers\etc\hosts)
至此,集群搭建并启动完成,可以开始基本的学习和测试。
文中未涉及:日志聚集、时钟同步。
我的老师:哔哩哔哩-尚硅谷(我爱他)。
本文是个人在学习过程中整理的笔记分享,只供初学者参考,如有错误在所难免,望大神们批评指正。