Centos7安装Hadoop-2.9.2及相应配置
1.环境准备
- 安装centos
不会安装系统的可以参考
安装Centos系统(服务器安装和虚拟机安装)
如果是搭建集群,可以采用克隆虚拟机的方式,配置多台机器。需要修改克隆虚拟机的静态IP、修改主机名、关闭防火墙。
如果只有一台真实机器,我们需要搭建的为伪分布式运行模式即只有一个节点上叫做伪分布式。
- 建议使用xshell工具进行操作,因为生产过程中大部分都是远程操作。
Centos7安装、配置SSH服务远程登录
2.安装Hadoop-2.9.2
2.1.1创建hadoop用户
sudo adduser hadoop
默认创建用户的时候会同时创建一个同名的用户组,前边是用户,后边是用户组
-
切换用户:su
比如切换到hadoop用户:su hadoop -
用户设置密码:passwd
为hadoop用户设置密码:passwd hadoop,然后按回车输入两次密码即可。 -
配置用户具有sudo权限
用户在执行某些系统命令时会出现用户权限不够的问题,需要切换到root用户下执行,频繁的切换会很麻烦,而且也很容易导致权限问题。所以最好为用户配置sudo权限。所有的操作都可以在该用户下操作,出现权限不够的问题只需要在命令前边加上sudo即可
1)修改配置文件
修改 /etc/sudoers 文件,找到下面一行,在 root 下面添加一行,如下所示:
##Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) ALL
或者配置成采用 sudo 命令时,不需要输入密码
##Allow root to run any commands anywhere
root ALL=(ALL) ALL
hadoop ALL=(ALL) NOPASSWD:ALL
修改完毕,现在可以用 hadoop帐号登录
2.1.2虚拟机主机名的配置
hostname查看主机名
sudo hostname abc
临时性修改的方法当虚拟机重启的时候就不生效了,而且不会改变命令提示符中的主机名,所以为临时性修改。
我们需要进行永久性修改
方法1:修改配置文件
主机名保存在/etc/hostname文件里,所以我们可以打开这个文件,手动编辑主机名。
修改hostname文件(路径:/etc/hostname):
$ sudo nano /etc/hostname
把hostname文件里面所有原来的名称改成你想改成的名称,保存文件就行了。要注意大小写
主机名同时也保存在/etc/hosts文件中,需要把当前IP地址对应的主机名修改为hostname文件中的名称。
$ sudo nano /etc/hosts
最后重启机器:
$ reboot
方法2:hostnamectl命令
命令语法为:
sudo hostnamectl set-hostname <newhostname>
这条命令会删除/etc/hostname文件中的主机名,然后替换为新的主机名。和第一种方法一样,我们也需要更新/etc/hosts文件。
两种方法本质都是一样的。
2.2 在/opt目录下创建文件夹
(1)在/opt目录下创建module、software文件夹,分别为软件运行目录和文件下载目录,如果不能创建,则需要使用root账户创建,但是需要修改其所有者
sudo mkdir module
sudo mkdir software
(2)修改module、software文件夹的所有者cd
sudo chown hadoop:hadoop module/ software/
2.3安装JDK
为了方便管理,我们可以将jdk下载到software文件(下载到本地Downloads也可以),主要是需要解压到/opt/module下方便管理。
tar -zxvf jdk-8u251-linux-x64.tar.gz -C /opt/module/
配置环境变量
打开/etc/profile文件,
sudo vi /etc/profile
在本地环境变量文件中添加
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
:wq 保存后退出
让修改后的文件生效
source /etc/profile
测试是否安装成功
java -version
2.3下载、解压Hadoop-2.9.2
1.https://archive.apache.org/dist/hadoop/common/hadoop-2.9.2/
进入到Hadoop安装包路径下
2.将hadoop-2.9.2.tar.gz解压到安装文件到/opt/module
tar -zxvf hadoop-2.9.2.tar.gz -C /opt/module/
2.4将Hadoop添加到环境变量
1.打开/etc/profile文件
sudo vi /etc/profile
在profile文件末尾添加Hadoop路径:
##HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.9.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
:wq保存后退出
2.将修改后的文件生效
source /etc/profile
3.查看是否安装成功
出现版本型号则成功
hadoop version
重启(如果Hadoop命令不能用再重启)
sudo reboot
2.5Hadoop重要目录
(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例
3.伪分布式运行模式
3.1配置集群
1.配置:hadoop-env.sh
[matt@centos7 hadoop-2.9.2]$ cd etc/hadoop/
[matt@centos7 hadoop]$ vi hadoop-env.sh
修改JAVA_HOME 路径:
export JAVA_HOME=/opt/module/jdk1.8.0_144
2.配置:core-site.xml
<!-- 指定HDFS中NameNode的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://centos7:9000</value>
#centos7为主机名,需要查看自己机器的主机名,并且在host配置地址映射,我们本地的为localhost
</property>
<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.9.2/data/tmp</value>
</property>
<property>
<name>dfs.http.address</name>
<value>0.0.0.0:50070</value>
</property>
Centos7修改host文件
3.配置:hdfs-site.xml
我们只有一个节点所以设置为1,根据实际情况设置。
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
3.2启动集群(NameNode、DataNode)
1.格式化NameNode(第一次启动时格式化,以后就不要总格式化)
如果要第二次格式化,则需要将之前/opt/module/hadoop-2.9.2/data/tmp/dfs中的data和name目录删除再重新格式化。
bin/hdfs namenode -format
2.启动NameNode
sbin/hadoop-daemon.sh start namenode
3.启动DataNode
sbin/hadoop-daemon.sh start datanode
4.查看集群是否启动成功
jps是JDK中的命令,不是Linux命令。不安装JDK不能使用jps
[matt@centos7 hadoop]$ jps
13586 NameNode
13668 DataNode
13786 Jps
5.web端查看HDFS文件系统
http://centos7:50070/dfshealth.html#tab-overview
主机访问需要将centos7改为映射的IP地址,查看服务器50070端口是否开启,或者就是直接关闭防火墙。
3.3启动YARN
1.配置yarn-env.sh
配置一下JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
2.配置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>centos7</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>0.0.0.0:8088</value>
</property>
3.配置:mapred-env.sh
配置一下JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
配置: (对mapred-site.xml.template重新命名为) mapred-site.xml
hadoop]$ mv mapred-site.xml.template mapred-site.xml
hadoop]$ vi mapred-site.xml
<!-- 指定MR运行在YARN上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
3.4启动集群(ResourceManager、NodeManager)
启动前必须保证NameNode和DataNode已经启动
1.启动ResourceManager
sbin/yarn-daemon.sh start resourcemanager
2.启动NodeManager
sbin/yarn-daemon.sh start nodemanager
3.查看是否运行
jps
WEB端:http://centos7:8088/cluster
3.5配置历史服务器
1.我们为了查看程序的历史运行情况,需要配置一下历史服务器。
vi mapred-site.xml
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>centos7:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>0.0.0.0:19888</value>
</property>
2.启动历史服务器
sbin/mr-jobhistory-daemon.sh start historyserver
3.查看JobHistory
http://192.168.11.125:19888/jobhistory
3.6配置日志的聚集
日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
1.vi yarn-site.xml
<!-- 日志聚集功能使能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 日志保留时间设置7天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
2.重启NodeManager 、ResourceManager和HistoryManager
#关闭
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/mr-jobhistory-daemon.sh stop historyserver
#开启
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver
3.查看日志
http://192.168.11.125:19888/jobhistory
4.Hadoop启动命令
start-all.sh 启动所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、JobTracker、 TaskTrack
stop-all.sh 停止所有的Hadoop守护进程。包括NameNode、 Secondary NameNode、DataNode、JobTracker、 TaskTrack
start-dfs.sh 启动Hadoop HDFS守护进程NameNode、SecondaryNameNode和DataNode
stop-dfs.sh 停止Hadoop HDFS守护进程NameNode、SecondaryNameNode和DataNode
hadoop-daemons.sh start namenode 单独启动NameNode守护进程
hadoop-daemons.sh stop namenode 单独停止NameNode守护进程
hadoop-daemons.sh start datanode 单独启动DataNode守护进程
hadoop-daemons.sh stop datanode 单独停止DataNode守护进程
hadoop-daemons.sh start secondarynamenode 单独启动SecondaryNameNode守护进程
hadoop-daemons.sh stop secondarynamenode 单独停止SecondaryNameNode守护进程
start-mapred.sh 启动Hadoop MapReduce守护进程JobTracker和TaskTracker
stop-mapred.sh 停止Hadoop MapReduce守护进程JobTracker和TaskTracker
hadoop-daemons.sh start jobtracker 单独启动JobTracker守护进程
hadoop-daemons.sh stop jobtracker 单独停止JobTracker守护进程
hadoop-daemons.sh start tasktracker 单独启动TaskTracker守护进程
hadoop-daemons.sh stop tasktracker 单独启动TaskTracker守护进程
如果Hadoop集群是第一次启动,可以用start-all.sh。比较常用的启动方式是一个一个守护进程来启动,启动的步骤如下。
1.启动Hadoop的HDFS模块里的守护进程
HDFS里面的守护进程启动也有顺序,即:
1)启动NameNode守护进程;
2)启动DataNode守护进程;
3)启动SecondaryNameNode守护进程。
2.启动MapReduce模块里面的守护进程
MapReduce的守护进程启动也是有顺序的,即:
1)启动 JobTracker守护进程;
2)启动TaskTracker守护进程。
关闭的步骤正好相反,
在虚拟机搭建hadoop集群后没有停止服务就关闭了虚拟机。导致hdfs失效,namenod和datanode丢失,解决方法
删除掉损坏的 namenode数据和datanode数据,具体过程如下
删除所有节点下 ~/dfs/data 文件夹下的所有内容
删除所有节点下 ~/dfs/name 文件夹下的所有内容
删除所有节点下 ~/tmp 文件夹下的所有内容
重新初始化 namenode: 在namenode节点上hadoop安装文件夹下执行 ./bin/hdfs namenode -format
重启dfs和yarn服务 :在namenode节点上hadoop安装文件夹下执行 ./sbin/start-dfs.sh 然后执行 ./sbin/start-yarn.sh
在服务器中搭建完hadoop集群后一定要注意关闭服务后再关闭电源,以免hadoop集群无法正常启动:
1.关闭dfs和yarn服务:在namenode节点上hadoop安装文件夹下执行 ./sbin/stop-dfs.sh 然后执行 ./sbin/stop-yarn.sh
2.关闭系统