centOS 7-Hadoop3.3.0完全分布式部署
本文内容不乏对各大佬的案例借鉴,侵删。
本次实验用到的有虚拟机,Xshell,Hadoop压缩包和jdk压缩包
hadoop111A:192.168.241.111 | hadoop222B:192.168.241.112 | hadoop333C:192.168.241.113 | |
HDFS |
NameNode DataNode |
DataNode |
secondaryNameNode DataNode |
YARN | NodeManager |
ResourceManager NodeManager |
NodeManager |
我这边用的三台虚拟机和对应的IP是:
hadoop111A 192.168.241.111
hadoop222B 192.168.241.112
hadoop333C 192.168.241.113
先在虚拟机里面安装好一个centOS 7,然后把静态IP配置好
先进入 /etc/sysconfig/network-scripts 里面有个名为 ifcfg-ens33 的文件,修改这个文件。
cd /etc/sysconfig/network-scripts
vim ifcfg-ens33
修改这些配置的时候 会由于权限不够,会报错已保存但未修改,我是直接转换成root用户进行修改的,这样一来比较方便。输入命令:su 转换成root用户
把里面没用的内容删掉,保留有用的,我修改的内容是这样的;复制粘贴的时候记得按 i 转为插入模式
DEVICE=ens33 TYPE=Ethernet ONBOOT=yes NM_CONTROLLED=yes BOOTPROTO=static IPADDR=192.168.241.111 PREFIX=24 GATEWAY=192.168.241.2 DNS1=192.168.241.2 DNS2=8.8.8.8
然后重启网络管理
service NetworkManager restart
现在就可以看看你的IP发生的变化,然后ping一下百度,看看是否能建立数据传输。
现在可以通过xshell链接linux了,接着就是修改主机名
vim /etc/hostname
hadoop111A 就是我这台虚拟机的主机名
这里我们可以先把映射写好,预先写入你另外两台虚拟机的主机名和IP
vim /etc/hosts
然后就是安装Hadoop和jdk,这两个软件包可以去相应的官网下载,值得注意的是,jdk我们要下载1.8版本的,我先前安装的16.0版本的,出现了问题,可能是不兼容吧,我看很多大佬安装的都是1.8版本的,所以我下载了1.8版本安装之后,就没有出现问题了。
我们在Windows上下载好这些软件包之后,可以通过xshell这一些工具传进来,我图方便,就直接拖进虚拟机,然后找到软件包在linux里的位置,进行移动和解压。
安装jdk,因为sentos7自带有jdk,所以我们要将其删除,先查看系统中的jdk
rpm -qa | grep java
这里我们可以看到有1.8和1.7的jdk,我们只需要删除jdk
rpm -e --nodeps jdk名字
软件包的名字可以在上面复制粘贴,运行 rpm -qa | grep java 查看是否删除完毕
现在就是解压jdk了,路径可以自己选,我这边是安装在 /usr/java 里面 用命令解压文件
tar -zxvf jdk软件包名
给jdk添加环境变量,添加在最后面
vim /etc/profile
##JAVA_HOME JAVA_HOME=/usr/java/jdk1.8.0_291 JRE_HOME=$JAVA_HOME/jre PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin CLASSPATH=.:$JAVA_HOME/lib.dt.jar:$JAVA_HOME/lib/tools.jar:$JER_HOME/lib export JAVA_HOME JRE_HOME PATH CLASSPATH
应用profile配置
source /etc/profile
查看jkd
java -version
显示有版本号就说明安装成功了
按Hadoop和定义配置文件
和安装jdk一样,先把Hadoop压缩包解压
添加环境变量
vim /etc/profile
##HADOOP_HOME export HADOOP_HOME=/opt/soft/hadoop/hadoop-3.3.0 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin
进入hadoop的etc里面修改相应的配置文件
配置 core-site.xml
<!--指定namenode的地址--> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop111A:8020</value> </property> <!-- 指定 Hadoop 运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/soft/hadoop/hadoop-3.3.0/data</value> </property>
配置 hadoop-env.sh 如果这个不添加,那么hadoop运行的时候就会报错说找不到jdk的位置
export JAVA_HOME=/usr/java/jdk1.8.0_291
配置 hdfs-site.xml
<!--nn web端访问地址--> <property> <name>dfs.namenode.http-address</name> <value>hadoop111A:9870</value> </property> <!-- 2nn web端访问地址 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop333C:9868</value> </property>
配置 yarn-site.xml
<!-- 指定 MR 走shuffle --> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!-- 指定 YARN 的 ResourceManager 的地址 --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop222B</value> </property>
配置 mapred-site.xml
<!-- 指定 MR 运行在 Yarn 上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
配置 workers
hadoop111A
hadoop222B
hadoop333C
配置完毕后关机,在虚拟机里面完全克隆两台虚拟机,并将其IP和主机名修改好
完事后,进行免密登陆设置,运行指令创建免密登陆密钥
ssh-keygen -t rsa
一路回车下去后,私钥和公钥就在 /root/.ssh 里面建立了
进入这个文件夹就可以看到了
cd /root/.ssh
创建一个名为 authorized_keys 的文件
touch authorized_keys
然后将公钥写进这个文件,三台主机都要进行这样的操作
cat id_rsa.pub >> authorized_keys
期间如果写入不了,那多半是权限不够,这时候我们可以修改下他们的权限
chmod 600 authorized_keys
chmod 700 /root/.ssh
然后用vim打开 authorized_keys 就可以看到密钥了,我就不传来传去了,直接简单粗暴,直接复制粘贴了
然后用ssh链接试试,我这边链接hadoop222B
这样就是链接上了,如个报错说找不到,那就是前面映射没设置好,如果报错无法链接,那就修改下面的配置
修改 /etc/ssh/ssh_config 文件的内容
StrictHostKeyChecking ask打开注释修改为StrictHostKeyChecking no即可
vim /etc/ssh/ssh_config
现在就可以格式化hadoop了
期间没有任何报错,那就是成功了,如果报错意外终止,那就是配置文件里面的标签没打好
在 hadoop/sbin 里面可以看到这些文件
这里我们先启动start-dfs.sh
jps查看一下
hadoop111A启动的是 NameNode 和 DataNode
hadoop222B启动的是 DataNode
hadoop333C启动的是 DataNode 和 SecondaryNameNode
这时候我们就可以打开浏览器访问hadoop111A:9870
然后在hadoop222B中启动
jps查看
对照上面表格的启动项,是一样的就对了,必须要和部署的一摸一样
然后在浏览器里面输入hadoop222B:8088
这样就算是部署好了
如果期间 ResourceManager 启动不了
启动start-dfs.sh报错Attempting to operate on hdfs namenode as root
在/hadoop/sbin路径下:
将start-dfs.sh,stop-dfs.sh两个文件顶部添加以下参数
#!/usr/bin/env bash HDFS_DATANODE_USER=root HADOOP_SECURE_DN_USER=hdfs HDFS_NAMENODE_USER=root HDFS_SECONDARYNAMENODE_USER=root
还有,start-yarn.sh,stop-yarn.sh顶部也需添加以下:
#!/usr/bin/env bash YARN_RESOURCEMANAGER_USER=root HADOOP_SECURE_DN_USER=yarn YARN_NODEMANAGER_USER=root