hadoop学习【11】——hadoop-2.4.1集群真实环境部署文档

时间:2022-09-16 22:10:32

前言】由于运气不错在学校机房申请得到了几台PC机用于尝试部署真实环境下的hadoop集群,花了几个小时的时间终于大功告成,现在将安装部署的详细步骤记录如下,希望对大家有所帮助!

一、机房环境描述:

1.1、PC配置:

4G内存 i3-2130处理器 主频:3.40GHz  硬盘:500GB

PC共9台(两个用于namenode结点(HA:高可靠)配置的自动切换HA而不是手工切换)

1.2、操作系统:

centos6.5 64位版本(充分模拟企业集群环境)(其中为后期调试方便,9台机器中一台安装的是软件开发平台模式,其余的均安装的basic server模式,为了充分腾出内存和硬盘资源给应用程序使用和数据存储)

二、配置细则

2.1、linux系统安装

依然采用的U盘模式安装(简单快捷),后期需要设置每台机器自动开机时间,然集群自动开启和方便远程关闭

个磁盘上的磁盘信息:

nn1和nn2上的磁盘信息:

hadoop学习【11】——hadoop-2.4.1集群真实环境部署文档

d1~d7节点上的磁盘信息:

hadoop学习【11】——hadoop-2.4.1集群真实环境部署文档

2.2、用户和用户组:

为了方便集群管理在每台机器上创建hadoop用户组和grid用户,用户密码:

创建命令:groupadd hadoop  //添加用户组

                     useradd –g hadoop –G root grid  //添加用户,主组:hadoop 附属组:root

2.3、网络配置

为了方便后期能在校内网访问,这次配置全部使用的校内网IP,因为经过前面的验证,即使使用校内的IP地址,由于机房的电脑是出于同一个局域网中的,所以数据的传输还是在局域网内传输。

Ip地址

hostname

hadoop节点类型

HA

YARN

10.106.0.200

nn1

NameNode1

 

Resourcemanager

10.106.0.201

nn2

NameNode2

 

 

10.106.0.202

d1

Datanode

Zookeeper

nodemanager

10.106.0.203

d2

Datanode

Zookeeper

nodemanager

10.106.0.204

d3

Datanode

Zookeeper

nodemanager

10.106.0.205

d4

Datanode

Journalnode

nodemanager

10.106.0.206

d5

Datanode

Journalnode

nodemanager

10.106.0.207

d6

Datanode

Journalnode

nodemanager

10.106.0.208

d7

Datanode

 

nodemanager

 

网络配置方法:

修改/etc/sysconfig/network-scripts/ifcfg-eth0

DEVICE=eth0
HWADDR=74:27:EA:18:2E:DF
TYPE=Ethernet
UUID=941f8064-cc11-4348-bf2a-17a694d3577f
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=10.106.0.200
NETMASK=255.255.0.0
GATEWAY=10.106.1.254
DNS1=10.4.1.30
DNS2=10.4.1.31


         这些信息在linux下的查询方式:

                   在dhcp条件下,查看下网关、DNS,查看命令:

Route –n 查看网关

查看文件/etc/resolv.conf查看DNS

hadoop学习【11】——hadoop-2.4.1集群真实环境部署文档

2.4、设置hostname与ip绑定

hadoop学习【11】——hadoop-2.4.1集群真实环境部署文档

2.5、关闭iptables防火墙服务

chkconfig–level 2345 iptables off 关闭2、3、4、5运行级别的防火墙服务然后重启即可

2.6、(重启后)配置免密码nn1和nn2到其余结点的免密码访问

(1)执行命令ssh-keygen-t rsa产生公钥私钥文件,产生的文件位于~/.ssh目录下

(2)执行命令ssh-copy-id-i 主机名 复制公钥文件到对方  主机名   中authorized_keys中去了。(主节点到每个节点都是做一样的操作,后面考虑使用shell脚本来完成,当机器多了之后)

(3)执行ssh 主机名(上面操作过的主机),就可以实现真正的免密码登录了。

只需要实现主节点(chaoren1)到从节点(chaoren3\chaoren4\chaoren5)的免密码登录即可,不必要实现从节点到主节点的免密码登录。

(注:这里本来写了个脚本的,但是因为是在root下进行设置,所以每次还要输入root的密码,显得比较麻烦)

2.7、jdk安装

将下载好的linux 32版本的jdk1.7复制到/usr/目录下,用vi打开/etc/profile文件,添加

exportJAVA_HOME=/usr/jdk1.8.0_11

exportCLASS_PATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib:$CLASSPATH

export PATH= $JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

这里可以使用脚本一次写入,然后分发

2.8、hadoop2安装和配置

下载和解压hadoop-2.4.1到/home/grid目录下,然后建立软连接:ln –s hadoop-2.4.1 hadoop2

shell暂时还没有配置

2.9、hadoop配置文件配置(包含自动切换HA的配置)

(1)搭建zookeeper集群,并启动

(zookeeper占用资源是非常少的,只要不部署在像namenode、resourcemanager这样的节点上都问题不大)zookeeper简单的说就是实现数据共享的,能保证数据传输到集群后,客户端访问的时候的唯一性

(1.1)在d1 机器上的/home/grid上解压缩,重命名为zookeeper,把conf/zoo_sample.cfg重命名为conf/zoo.cfg(使用mv 命令即可)

(1.2)修改文件conf/zoo.cfg

  (1.2.1)dataDir=/home/grid/zookeeper/data   //这个data文件夹是没有的

  (1.2.2)增加以下内容(直接在末尾加就行)

     server.1=d1:2888:3888   server后面的点后面是对集群起名一个标识

     server.2=d2:2888:3888

     server.3=d3:2888:3888

     将zookeeper文件夹拷贝到其他的两个节点上

     scp -rq zookeeper

  (1.2.3)创建目录mkdirzookeeper/data

  再将zookeeper标识写进去即可(每个节点都需要这么弄,可以写shell脚本来做这个事情)

  (1.2.4)写入文件echo 1 >zookeeper/data/myid(注意路径根据具体情况来写)

 

  (1.2.5)复制zookeeper文件夹到d2、d3上

         scp -rq zookeeper  d2:/home/grid/

        scp -rq zookeeper  d3:/home/grid/

 

  在d2上执行命令echo 2zookeeper/data/myid

  在d3上执行命令echo 3zookeeper/data/myid

(1.3)启动

  在d1、d2、d3上,分别执行命令zookeeper/bin/zkServer.sh start(这一步一定要先有,才能继续下面的步骤,前面有点着急了,才启动了一个就继续下面的步骤,然后就出问题了)

hadoop学习【11】——hadoop-2.4.1集群真实环境部署文档

(1.4)验证

  执行命令zookeeper/bin/zkCli.sh  观察welcome tozookeeper

  进入后执行ls /    可以看到zookeeper节点,默认的

 (2)配置文件(hadoop-env.sh、core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml、slaves)

2.1、hadoop-env.sh

exportJAVA_HOME=/usr/jdk1.8.0_11

2.2、core-site.xml

<property>
<name>fs.defaultFS</name>
<value>hdfs://cluster1</value>  //这里就是给集群起了个名字,如果配置
</property>

<property>
<name>hadoop.tmp.dir</name>
<value>/home/grid/hadoop-2.4.1/tmp</value>
</property>

<property>
<name>ha.zookeeper.quorum</name>
<value>d1:2181,d2:2181,d3:2181</value>
</property>

2.3hdfs-site.xml

<property>
<name>dfs.replication</name>
<value>2</value>
</property>

<property>
<name>dfs.nameservices</name>
<value>cluster1</value>
</property>

<property>
<name>dfs.ha.namenodes.cluster1</name>
<value>nn1,nn2</value>
</property>

<property>
<name>dfs.namenode.rpc-address.cluster1.nn1</name>
<value>nn1:9000</value>
</property>

<property>
<name>dfs.namenode.http-address.cluster1.nn1</name>
<value>nn1:50070</value>
</property>

<property>
<name>dfs.namenode.rpc-address.cluster1.nn2</name>
<value>nn2:9000</value>
</property>

<property>
<name>dfs.namenode.http-address.cluster1.nn2</name>
<value>nn2:50070</value>
</property>

<property>
<name>dfs.ha.automatic-failover.enabled.cluster1</name>
<value>true</value>
</property>

<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://d4:8485;d5:8485;d6:8485/cluster1</value>
</property>

<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/grid/hadoop-2.4.1/tmp/journal</value>
</property>

<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>

<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/grid/.ssh/id_rsa</value>
</property>

<property>
<name>dfs.client.failover.proxy.provider.cluster1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>

2.4yarn-site.xml

<property>
<name>yarn.resourcemanager.hostname</name>
<value>nn1</value>
</property>

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>

2.5mapred-site.xml

<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>

2.6slaves

d1
d2
d3
d4
d5
d6
d7
(3)删除其他节点的hadoop-2.4.1文件夹,然后把nn1上的hadoop-2.4.1文件夹复制到nn2、d1、d2、d3、。。。节点

(4)格式化zk集群

  在nn1上执行hadoop2/bin/hdfs zkfc –formatZK

(5) 启动journalnode集群

  在d4、d5、d6上分别执行hadoop2/sbin/hadoop-daemon.sh start journalnode

(6) 格式化namenode、启动namenode

  在nn1上执行hadoop2/bin/hdfsnamenode -format

  在nn1上分别执行hadoop2/sbin/hadoop-daemon.shstart namenode

  在nn2上执行hadoop2/bin/hdfsnamenode –bootstrapStandby   //这里千万要注意,这里不是跟上面一样的格式化,而是数据同步//这里同步数据能否执行多次,就是如果关掉集群了,下次还能不能再次执行??

  在nn2上分别执行hadoop2/sbin/hadoop-daemon.sh start namenode

(7) 启动datanode

  在nn1上分别执行hadoop2/sbin/hadoop-daemons.sh start datanode

(8)启动ZKFC(专门用来实现自动切换的,zookeeper 。。。控制器)哪里有namenode,在哪里就要启动ZKFC

  在nn1、nn2上 启动zkfc,执行命令hadoop2/sbin/hadoop-daemon.shstart zkfc

2.7 启动resourcemanager和nodemanager

  在nn1上执行hadoop/sbin/start-yarn.sh start resourcemanager

(9)sbin/mr-jobhistory-daemon.sh start historyserver

hadoop学习【11】——hadoop-2.4.1集群真实环境部署文档

运行效果截图:

hadoop学习【11】——hadoop-2.4.1集群真实环境部署文档