Hadoop2.x部署之完全分布式集群环境搭建
2018-03-31 15:57
1146 查看
一、分布式部署概述
Hadoop环境的搭建有三种方式:本地环境搭建 伪分布式环境搭建 完全分布式环境搭建集群
在前面的文章中,详细描述了如何搭建本地环境【https://blog.csdn.net/qq_37142346/article/details/78927584】及伪分布式环境【https://blog.csdn.net/qq_37142346/article/details/79673710】。在这两种模式中,都是在一台机器中运行着所有进程,这里,我们讲解一下如何搭建Hadoop集群,所谓集群就是在多台机器上运行这些进程。
下面让我们来总结一下Hadoop三大组件的配置文件:
hdfs:
hadoop-env.sh | 【jdk环境的配置】 |
---|---|
hdfs-site.xml | 【Hadoop备份文件,secondaryNameNode】 |
core-site.xml | 【namenode】 |
slaves | 【DataNode节点】 |
yarn-env.sh | 【jdk环境配置】 |
---|---|
yarn-site.xml | 【resourcemanager,日志聚集,节点资源配置】 |
slaves | 【nodemanager节点配置】 |
mapred-env.sh | 【jdk环境配置】 |
---|---|
mapred-site.xml | 【job运行方式(yarn或者local),jobhistoryserver】 |
下面,让我们来看看如何搭建Hadoop集群。
二、搭建Hadoop集群
1.预备工作在前面我们搭建了一台虚拟机来运行Hadoop,这里为了搭建集群,我们用之前的虚拟机来克隆两台虚拟机。
克隆好虚拟机之后,我们就要设置这三台虚拟机在同一个网关中,并且修改主机名以及ip与主机名之间的映射(etc/hosts文件)。
hostname hadoop-senior02.shinelon.com hostname hadoop-senior03.shinelon.com
另外,还要到每一台虚拟机etc/sysconfig/network文件中去修改主机名,不然下次启动会恢复到之前的主机名。
下面是我的三台虚拟机的主机名机器ip地址映射,读者可以自行设置自己的ip地址,主机名,只要保证在同一个网关下即可(因为后面要通过ssh协议来向各个节点分发资源文件)。
xxx.xxx.xxx.110 hadoop-senior.shinelon.com hadoop-senior |
---|
xxx.xxx.xxx.111 hadoop-senior02.shinelon.com hadoop-senior02 |
xxx.xxx.xxx.112 hadoop-senior03.shinelon.com hadoop-senior03 |
接着,我们来给每一个节点分配一下cpu以及内存:
主机名 | hadoop-senior.shinelon | hadoop-senior02.com | hadoopp-senior03.com |
---|---|---|---|
CPU | 1 | 1 | 1 |
内存 | 1.5G | 1G | 1G |
到这里我们的准备工作已经准备的差不多了,下面我们来详细讲解一下怎样来搭建集群。
2.搭建集群
现在我们有三台虚拟机,所以我们要每一个虚拟机来分配任务。来构建一个集群。下面是为每一个机器分配的进程 :
主机名 | hadoop-senior.shinelon | hadoop-senior02.com | hadoopp-senior03.com |
---|---|---|---|
HDFS | NameNode,DataNode | DataNode | DataNode,SecondaryNameNode |
YARN | NodeManager | ReourceManager,NodeManager | NodeManager |
MapReduce | JobHistoryServer |
(1)、修改配置文件
首先,在每一台虚拟机下的opt目录下新建一个文件夹来作为hadoop安装目录。
mkdir app
这里我将之前在opt/softwares文件夹下的hadoop压缩包解压到该app目录下(该操作只在hadoop-senior.shinelon.com主机上进行)
tar -zxf /opt/softwares/hadoop-2.5.0.tar.gz -C /opt/app/
然后切换到hadoop的安装目录下的etc/hadoop目录下修改配置文件:
[shinelon@hadoop-senior app]$ cd hadoop-2.5.0/etc/hadoop/
下面,我们安装上面总结的配置文件依次修改文件:
hadoop-env.sh:配置jdk
export JAVA_HOME=/opt/modules/jdk1.7.0_79
hdfs-site.xml:
<property> <name>dfs.namenode.secondary.http-address</name> <value>hadoop-senior03.shinelon.com:50090</value> </property>
core-site.xml:
<property> <name>fs.defaultFS</name> <value>hdfs://hadoop-senior.shinelon.com:8020</value> </property> <!--Hadoop的数据临时存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/opt/app/hadoop-2.5.0/data/tmp</value> </property> <!--垃圾回收 --> <property> <name>fs.trash.interval</name> <value>420</value> </property>
slaves文件:(注意下面的每一行是一个节点主机名)
hadoop-senior.shinelon.com hadoop-senior02.shinelon.com hadoop-senior03.shinelon.com
yarn-env.sh:
# some Java parameters export JAVA_HOME=/opt/modules/jdk1.7.0_79
yarn-site.xml:
<!-- Site specific YARN configuration properties --> <property> <name>yarn.resourcemanager.hostname</name> <value>hadoop-senior02.shinelon.com</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <!--Nodemanager resource --> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>4096</value> </property> <property> <name>yarn.nodemanager.resource.cpu-vcores</name> <value>4</value> </property> <!--开启日志功能,默认为false --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!--日志在HDFS上存放的最大时间,以秒为单位,这里是存放七天 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>640800</value> </property>
NodeManager已经在上面的slaves文件中配置过了。
mapred-env.sh:
export JAVA_HOME=/opt/modules/jdk1.7.0_79
mapred-site.xml:
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <!--jobhistoryserver --> <property> <name>mapreduce.jobhistory.address</name> <value>hadoop-senior.shinelon.com:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>hadoop-senior.shinelon.com:19888</value> </property>
(2)配置主节点(NameNode和ResourceManager)到每一个从节点的SSH免密匙登录
因为在hadoop-senior.shinelon.com这台主机上已经设置好了ssh密匙,因此这里通过ssh-copy-id命令将密匙拷贝到每一台节点上。(在.ssh/目录下执行,该目录在用户主目录下)
ssh-copy-id hadoop-senior02.shinelon.com ssh-copy-id hadoop-senior03.shinelon.com
然后通过scp将之前压缩并且配置好的文件拷贝到每一个节点的opt/app目录下:
scp -r ./hadoop/ shinelon@hadoop-senior02.shinelon.com:/opt/app/ scp -r ./hadoop/ shinelon@hadoop-senior03.shinelon.com:/opt/app/
这时,我们在NameNode(hadoop-senior.shinelon.com)主节点上到其他从节点的SSH免密匙登录已经配置好。我们可以通过测试验证:
接下来我们来配置ResourceManager(hadoop-senior02.shinelon.com)主节点到每一个从节点的免密匙登录(不然在启动NodeManager是要一个个启动)。
由于之前为了从主节点分配资源到各个从节点通过ssh-copy-id到每一个从节点,这里为了防止之前的出问题,我们删除hadoop-senior02..,hadoop-senior03..从节点上的ssh密匙重新拷贝:
[shinelon@hadoop-senior02 .ssh]$ rm -rf ./* [shinelon@hadoop-senior03 .ssh]$ rm -rf ./*
删除后重新从hadoop-senior.shinelon.com主机上拷贝密钥:
ssh-copy-id hadoop-senior02.shinelon.com ssh-copy-id hadoop-senior03.shinelon.com
拷贝好后,我们就可以开始在resourcemanager主节点上配置到hadoop-senior.shinelon.com 和hadoop-senior03.shinelon.com节点上无密匙登录操作:
首先在主节点hadoop-senior02.shinelon.com上生成密匙,输入下面密令,连续按四次回车键:
[shinelon@hadoop-senior02 .ssh]$ ssh-keygen -t rsa
如下图所示:
然年和上面namenode配置原理一样,拷贝到每一个从节点:
[shinelon@hadoop-senior02 .ssh]$ ssh-copy-id hadoop-senior02.shinelon.com [shinelon@hadoop-senior02 .ssh]$ ssh-copy-id hadoop-senior03.shinelon.com [shinelon@hadoop-senior02 .ssh]$ ssh-copy-id hadoop-senior.shinelon.com
这时,我们可以通过测试ssh登录即可验证免密匙登录成功。
通过上面的一些操作,我们集群的搭建终于要接近最后阶段,下面让我们来启动集群并且测试。
(3)启动hadoop集群并且测试
在主节点上格式化hdfs:
[shinelon@hadoop-senior hadoop-2.5.0]$ bin/hdfs namenode -format
然后启动hdfs:
[shinelon@hadoop-senior hadoop-2.5.0]$ sbin/start-dfs.sh
启动jobhistoryserver:
[shinelon@hadoop-senior hadoop-2.5.0]$ sbin/mr-jobhistory-daemon.sh start historyserver
如果在上面启动过程中遇到错误启动不了datanode,可以通过hdfs命令逐个节点来启动datanode。
在resourcemanager主节点上启动yarn:
[shinelon@hadoop-senior02 hadoop-2.5.0]$ sbin/start-yarn.sh
在上面启动完毕后我们可以通过jps命令来查看各个节点的各个进程是否启动成功。另外可以在web页面上看见集群状态:
如果都启动成功,下面我们来测试该集群:
首先在nameNode主节点上测试hdfs命令创建文件,读写文件:
bin/hdfs dfs -mkdir -p /user/shinelon/tmp/conf bin/hdfs dfs -put etc/hadoop/*-site.xml /user/shinelon/tmp/conf bin/hdfs dfs -text /user/shinelon/tmp/conf/core-site.xml
测试完毕之后,我们来在在集群上运行mapreduce程序:
先创建一个文件夹:
[shinelon@hadoop-senior hadoop-2.5.0]$ bin/hdfs dfs -mkdir -p /user/shinelon/mapreduce/wordcount/input
然后上传文件:
[shinelon@hadoop-senior hadoop-2.5.0]$ bin/hdfs dfs -put /opt/modules/hadoop-2.5.0/upload.input /user/shinelon/mapreduce/wordcount/input
运行mapreduce程序:
[shinelon@hadoop-senior hadoop-2.5.0]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0.jar wordcount /user/shinelon/mapreduce/wordcount/input /user/shinelon/mapreduce/wordcount/output
等程序运行完毕我们可以登录到yarn的web管理界面去查看状况:
至此,我们已经搭建好了hadoop集群,上面如有不足之处还望各位大佬指出来,如果你再搭建过程中遇到什么问题,也欢迎留言讨论。谢谢!
相关文章推荐
- Hadoop-2.7.3完全分布式环境搭建及环境部署脚本编写
- 从零开始搭建hadoop分布式集群环境:(五)hadoop完全分布式集群环境配置
- HADOOP 2.x 完全分布式集群环境搭建
- (配置Hadoop2.x 环境搭建)完全分布式集群
- Hadoop 2.6 集群搭建从零开始之4 Hadoop的安装与配置(完全分布式环境)
- Hadoop集群完全分布式模式环境部署
- hadoop集群环境搭建之完全分布式集群环境搭建(二)
- 搭建3个节点的hadoop集群(完全分布式部署)--2安装mysql及hive
- Hadoop完全分布式集群环境搭建
- 搭建3个节点的hadoop集群(完全分布式部署)5 flume安装及flume导数据到hdfs
- hadoop 2.5.2 完全分布式集群环境搭建 (2)
- Hadoop集群完全分布式模式环境部署和管理的5大工具
- hadoop集群环境搭建----完全分布式
- 基于vmware workstations 10 、centos6.4和hadoop-2.7.1的hadoop完全分布式集群的开发环境搭建
- [参考]Hadoop集群完全分布式模式环境部署
- CentOS7搭建Hadoop2.6完全分布式集群环境
- hadoop 2.5.2 完全分布式集群环境搭建 (3)
- Hadoop完全分布式集群环境搭建及测试
- hadoop2.x完全分布式环境搭建 | 适用于hadoop完全分布式集群环境搭建