对于Hadoop的集群来讲,可以分成两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。
MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交时JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。
HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。
一、环境
本教程适合于在 CentOS 7.x,系统中安装Hadoop,适用于Hadoop 2.7.7
查看CentOS版本:
1、查看版本号
CentOS的版本号信息一般存放在配置文件当中,在CentOS中,与其版本相关的配置文件中都有centos关键字,该文件一般存放在/etc/目录下,所以说我们可以直接在该文件夹下搜索相关的文件。
$ ll /etc/*centos*
其中存放其版本配置信息的文件为“centos-release”,翻译过来就是“CentOS的发行版”,所以说我们可以在这里查看CentOS相应的版本信息。
查看CentOS的版本号:
$ cat /etc/centos-release
2、查看内核版本
查询操作系统内核版本信息为:
$ uname –r
3、查看操作系统位数
查看指令为:
$ getconf LONG_BIT
4、集群部署规划
切换到root用户,新建一个bigdata用户,,可以通过Xshell的撰写窗格同时对多个节点创建用户。(如下图)
$ useradd bigdata # 创建新用户bigdata
接着使用如下命令修改密码,按提示输入两次密码,可简单的设为 “hadoop”(密码随意指定,若提示“无效的密码,过于简单”则再次输入确认就行):
$ passwd bigdata
可为非root用户增加管理员权限,方便部署,避免一些对新手来说比较棘手的权限问题,执行:
$ visudo
找到 root ALL=(ALL) ALL 这行(应该在第100行,可以先按一下键盘上的 ESC 键,然后输入 :100 (按一下冒号,接着输入100,再按回车键),可以直接跳到第100行 ),然后在这行下面增加一行内容:bigdata ALL=(ALL) ALL (当中的间隔为tab),点击“i”开始编辑,如下图所示:
二、网络配置
1、 修改自己所用节点的IP映射(要对所有节点的/etc/hosts进行修改):
$ sudo yum install -y vim #若没有安装vim,可通过此指令安装
$ sudo vim /etc/hosts
配置好后需要在各个节点上执行如下命令,测试是否相互 ping 得通,如果 ping 不通,后面就无法顺利配置成功:
$ ping westgis191 -c 5
2、 设置SSH免密钥
关于ssh免密码的设置,要求每两台主机之间设置免密码,自己的主机与自己的主机之间也要求设置免密码。
CentOS 默认已安装了 SSH
client、SSH server,打开终端执行如下命令进行检验:
$ rpm -qa | grep ssh
如果返回的结果如下图所示,包含了 SSH client 跟 SSH server,则不需要再安装。
若需要安装,则可以通过 yum 进行安装(安装过程中会让你输入 [y/N],输入 y 即可):
$ sudo yum install openssh-clients
$ sudo yum install openssh-server
在主节点上生成密钥
$ ssh-keygen -t rsa
一直回车如下图
$ cd ~/.ssh
让节点之间能无密码 SSH 本机,在主节点节点上执行:
$ cat ./id_rsa.pub >> ./authorized_keys
$ chmod 600 ./authorized_keys # 修改文件权限
接着从主节点将公匙传输到 各从节点:(原理参考:
https://blog.csdn.net/weixin_42294060/article/details/100701688)
$ scp -r /home/bigdata/.ssh bigdata@10.103.104.191:/home/bigdata/
$ scp -r /home/bigdata/.ssh bigdata@10.103.104.192:/home/bigdata/
scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件,类似于 cp 命令,不过 cp 只能在本机中拷贝。执行 scp 时会要求输入用户的密码,输入完成后会提示传输完毕。
可在 Master 节点上执行如下命令进行检验,如下图所示:
输入exit回到westgis190
三、Java环境安装
首先在oracle官网下载jdk1.7 http://www.oracle.com/technetwork/java/javase/downloads/index.html 接下来进行安装与环境变量配置,根据个人电脑系统选择对应版本。
$ mkdir /home/bigdata/bigdata/java/current #创建jvm文件夹
$ tar -zxvf jdk-8u181-linux-x54.tar.gz # 解压jdk-8u181-linux-x54.tar.gz
$ mv jdk1.8 /home/bigdata/bigdata/java/current
$ vi ~/.bashrc #给JDK配置环境变量
另外推荐使用vim来编辑环境变量,即最后一句使用指令
$ vim ~/.bashrc
如果没有vim,可以使用:
$sudo apt-get install vim
来进行下载。
1、添加环境变量
在~/.bashrc文件添加如下指令:(点击: i 键进入编辑模式)
export JAVA_HOME=/home/bigdata/bigdata/java/current/jdk1.8
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
在文件修改完毕以后(点击:esc 键 + wq! 保存编辑内容)
输入:
$ source ~/.bashrc #使新配置的环境变量生效
$ java -version #检测是否安装成功,查看java版本
这样,主节点的Hadoop 所需的 Java
运行环境就安装好了。
2、配置其它节点的Java环境
将刚才搞好的java分发到各个从节点,
$scp -r java bigdata@10.103.104.191:/home/bigdata/bigdata/
$scp -r java bigdata@10.103.104.192:/home/bigdata/bigdata/
同上方法在配置个从节点的JDK环境变量
四、安装 Hadoop
先下载hadoop-2.7.7.tar.gz,链接如下:
http://mirrors.hust.edu.cn/apache/hadoop/common/
下面进行安装:
$tar -zxvf hadoop-2.7.7.tar.gz #解压hadoop-2.7.7.tar.gz
$mv hadoop-2.7.7 /home/bigdata/bigdata/hadoop/
$sudo chown -R hadoop /home/bigdata/bigdata/hadoop/Hadoop-2.7.7 #sudo#修改文件权限
1、给hadoop配置环境变量
将下面代码添加到~/.bashrc中。
export HADOOP_HOME=/home/bigdata/bigdata/hadoop/hadoop-2.7.7
export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存后执行 source ~/.bashrc 使配置生效
执行 hadoop version 检查
2、配置分布式
集群分布式模式正常启动必须要修改
/hadoop-2.7.7/etc/Hadoop/ 中的5个配置文件:core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 、slaves 。
(1)修改core-site.xml
$ vim core-site.xml
添加:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://westgis190:9000</value> #指定HDFS中NameNode的节点
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/bigdata/bigdata/hadoop/hadoop-2.7.7/tmp</value> #指定hadoop运行产生文件的存储目录
<description>Abase for other temporary directories.</description>
</property>
</configuration>
(2)修改hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>westgis192:50090</value> #设置secondname的端口
</property>
<property>
<name>dfs.replication</name>
<value>2</value> #设置dfs副本数,不设置默认是3个
</property>
<property>
<name>dfs.namenode.name.dir</name> #设置name文件的目录
<value>file:/home/bigdata/bigdata/hadoop/hadoop-2.7.7/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name> #设置data文件的目录
<value>file:/home/bigdata/bigdata/hadoop/hadoop-2.7.7/tmp/dfs/data</value>
</property>
</configuration>
(3)修改mapred-site.xml
$ mv mapred-site.xml.template mapred-site.xml
$ vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>westgis190:10020</value> #指定jobhistory的节点
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>westgis190:19888</value>
</property>
</configuration>
(4)修改yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>westgis190</value> #指定YARN的ResourceManager的节点
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value> #reduce获取数据的方式
</property>
</configuration>
(5)修改slaves
文件 slaves,将作为 DataNode 的主机名写入该文件,每行一个,默认为 localhost,所以在伪分布式配置时,节点即作为 NameNode 也作为 DataNode。分布式配置可以保留 localhost,也可以删掉,让 Master 节点仅作为 NameNode 使用。
本教程让 Master 节点仅作为 NameNode 使用,因此将文件中原来的 localhost 删除,只添加内容:
westgis190、westgis191、westgis192。
$ vim slaves
3、分发hadoop到节点
$ scp -r hadoop bigdata@westgis191:/home/bigdata/bigdata/
$ scp -r hadoop bigdata@westgis192:/home/bigdata/bigdata/
五、启动集群
1、CentOS系统需要关闭防火墙
CentOS系统默认开启了防火墙,在开启 Hadoop 集群之前,需要关闭集群中每个节点的防火墙。有防火墙会导致 ping 得通但 telnet 端口不通,从而导致 DataNode 启动了,但 Live datanodes 为 0 的情况。
CentOS 7,需通过如下命令关闭
$ systemctl stop firewalld.service # 关闭firewall
$ systemctl disable firewalld.service # 禁止firewall开机启动
2、格式化Master 节点
首次启动需要先在 Master 节点执行 NameNode 的格式化:
$ hdfs namenode -format # 首次运行需要执行初始化,之后不需要
3、启动 hadoop
接着可以启动 hadoop 了,启动需要在主节点上进行:
$ start-dfs.sh
$ start-yarn.sh
$ mr-jobhistory-daemon.sh start historyserver
通过命令 jps 可以查看各个节点所启动的进程。正确的话,在westgis190节点上可以看到 NameNode、ResourceManager、、JobHistoryServer 进程,如下图所示:
在westgis191节点可以看到DataNode 和 NodeManager 进程,如下图所示:
在westgis192节点可以看到DataNode、SecondrryNameNode 和NodeManager 进程,如下图所示:
以通过 Web 页面看到查看
DataNode 和 NameNode 的状态:http://westgis190:50070/。如果不成功,可以通过启动日志排查原因。
六、Hadoop启动停止方式
1、 各个模块分开启动或停止(配置ssh是前提)
$ start-dfs.sh
$ start-yarn.sh
$ mr-jobhistory-daemon.sh start historyserver
$ stop-yarn.sh
$ stop-dfs.sh
$ mr-jobhistory-daemon.sh stop historyserver
2、全部启动或停止(不建议使用)
$ start(stop)-all.sh