您的位置:首页 > 运维架构

Hadoop入门(2)——集群配置

2017-04-13 21:48 344 查看

准备

众所周知Hadoop是分布式存储和计算框架,单机配置的Hadoop不叫Hadoop,集群配置的Hadoop才是真正的Hadoop。

所谓集群就是不能少于三台主机,在正式配置之前首先应该明确我想要配置多大的集群,每个主机用来做什么。一般来说最开始都是使用一台master,三台slave的集群,master作为NameNode和ResourceManager,slaves作为DataNode和NodeManager。

鉴于我是使用云服务器做实验,过多的服务器会造成浪费,所以我决定构建1Master2Slaves的集群。

可以画一张表或者拓扑图,将各个主机的名称(Master/Slave),IP,承担职责,表示出来。

集群免密码登录设置

1,hosts修改

因为之后要在Linux服务器之间传递数据和远程操控,所以首先先将所有服务器的地址记录在本地hosts里。

登录一台服务器
vim /etc/hosts
,向其中添加形如下所示的文本

xxx.xxx.xxx.xxx  master
xxx.xxx.xxx.xxx  node1
xxx.xxx.xxx.xxx  node2


xxx.xxx.xxx.xxx代表服务器的公网ip,给它们起上别名master,node1和node2,之后就可以使用别名进行访问了。

分别在所有服务器上都做以上修改。

2,配置免密码登录

上一篇博客: Hadoop入门(1)——单机配置所述,需要进行免密码登录配置,集群中的服务器,两两间通信都需要免密码。

首先在所有服务器上执行
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
产生id_rsa.pub文件,将这个文件追加到本机的信任目录中:
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
,然后对信任目录附以权限:
chmod 0600 ~/.ssh/authorized_keys


之后使用scp命令将id_rsa.pub文件传输到集群中的其他服务器上:

scp命令的格式是:

scp [-r] file username@hostIP:存储路径


[-r]:是可选值,如果传输的是文件夹,则需要-r属性传递整个文件夹
file:文件名
username:和ssh命令一样是目标主机用户
hostIP:目标主机IP
存储路径:文件要存放到目标主机的位置


scp命令和ssh命令一样需要密码验证。

例如,我要将node1的id_rsa.pub传输到master服务器,因为我们之前配置过hosts表,所以可以这样传输:

scp /root/.ssh/id_rsa.pub root@master:/home


然后登陆master服务器或者通过ssh连接master服务器,将id_rsa.pub加入到信任目录中,即:

cat /home/id_rsa.pub >> /root/.ssh/authorized_keys


这时node1就可以无密码访问master了,scp和ssh命令都不再需要密码验证。如此将集群中服务器都相互配置,就完成了。

在实际操作中,这是一个比较繁琐又容易出错的工作,相对简单的方式是将所有的id_rsa.pub先集中到一个服务器上,配置好这个服务器的authorized_keys,然后将authorized_keys复制到所有其他服务器上,取代原先的文件。

单机配置和文件复制

集群需要多次的重复配置,为了减少重复劳动,可以先在Master主机上将主要配置按单机配置都配好,然后使用scp命令将包括jdk,hadoop文件夹传输到slaves服务器。

Master节点配置

Master节点和Slave节点的配置略有不同,主要体现在HDFS和YARN的配置上,在这里我们将HDFS的NameNode和YARN的ResourceManager放在了同一节点,实际上可以分开,而且在真是工程建议分开。

0,修改hadoop-env.sh

添加:

export JAVA_HOME=/usr/java/jdk


1,修改core-site.xml

<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/opt/hadoop/tmp</value>
<description>Abasefor other temporary directories.</description>
</property>
</configuration>


2,修改hdfs-site.xml

因为是Slave节点,所以删除和NameNode有关配置,配置结果如下:

<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>

<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/opt/hadoop/hadoop_data/hdfs/namenode</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/hadoop_data/hdfs/datanode</value>
</property>

</configuration>


这里设置了临时文件存储目录为/opt/hadoop/tmp 因此要创建这个目录

mkdir /opt/hadoop/tmp


3,修改yarn-site.xml

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.manager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>

<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8035</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
</property>
</configuration>


4,修改mapred-site.xml

修改如下

<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>


5,修改masters和slaves文件

在$HADOOP_HOME/etc/hadoop/文件夹下创建masters文件,键入
master
;

在$HADOOP_HOME/etc/hadoop/文件夹下创建slaves文件,隔行键入

node1
node2
node3


PS:新的3.0.0版本貌似改为了workers

Slaves节点配置

Slaves节点和Master节点配置可以基本相同,在HDFS上将namenode改成datanode即可

修改hdfs-site.xml

因为是Slave节点,所以删除和NameNode有关配置,配置结果如下:

<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>

<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>

<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/opt/hadoop/hadoop_data/hdfs/datanode</value>
</property>
</configuration>


启动集群

1,最后的准备工作

至此配置基本完成,在启动之前,现将各个节点的namenode和datanode的存储文件夹清空或删除(master删掉datanode,slave删掉namenode)。

然后使用jps命令查看java进程,将在调试过程中启动的hadoop相关的进程全部杀掉。

PS:jps会列出进程的PID(进程号)和进程名,杀死进程命令是
kill 9 PID


2,启动

准备工作做好之后,还在Master节点,执行

sh $HADOOP_HOME/sbin/start-all.sh


3,验证

在所有节点执行jps命令看进程有没有如我们想象的一样启动,然后访问master:8080和master:50070来查看集群状态。如图:





至此,集群配置告一段落。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  hadoop