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

准备

众所周知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来查看集群状态。如图:

这里写图片描述

这里写图片描述

至此,集群配置告一段落。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值