一步步教你搭建Hadoop集群

落花浮王杯 提交于 2019-12-06 08:33:00

一、准备工作

假设现在有4台机器,分别是:192.168.1.101,192.168.1.102,192.168.1.103,192.168.1.104。

这里以Centos7系统为例 (不同版本的Linux系统在做某些操作时命令不一样,可自行百度) 四个节点都有登录账户hadoop。

我们计划这么配置:

先关闭防火墙

  1. systemctl stop firewalld.service

  2. systemctl stop iptables.service

然后再检查各机器的22端口是否开放

这里我们把ip映射成主机名,执行如下命令:

  1. vi /etc/hosts

在hosts文件中,编辑以下内容

  1. 192.168.1.101 node1

  2. 192.168.1.102 node2

  3. 192.168.1.103 node3

  4. 192.168.1.104 node4

保存退出

检查node1的3306端口是否开放

然后将hosts文件发送到其它节点上

  1. scp /etc/hosts hadoop@node2:/etc/

  2. scp /etc/hosts hadoop@node3:/etc/

  3. scp /etc/hosts hadoop@node4:/etc/

在发送的过程中需要输入hadoop用户的密码

二、配置免密码登录

然后在家目录下执行 ssh-keygen-t rsa命令,不用管提示,一路回车,直到命令执行完成

再去其他节点执行相同的操作

例如: ssh node2 (跳转到node2节点)

此时每个节点的家目录下都有一个.ssh目录,里面有idrsa(私钥)和idrsa.pub(公钥)两个文件,将node2,node3,node4三个节点的id_rsa.pub复制一份发送到node1的家目录下

  1. scp .ssh/id_rsa.pub hadoop@node1:~/pub2

  2. scp .ssh/id_rsa.pub hadoop@node1:~/pub3

  3. scp .ssh/id_rsa.pub hadoop@node1:~/pub4

把node1的公钥文件也复制一份到家目录下

  1. cp .ssh/id_rsa.pub pub1

在node1的家目录下新建一个文件

  1. touch authorized_keys

将4个节点的公钥文件内容全部输入到authorized_keys中

  1. cat pub1 >> authorized_keys

  2. cat pub2 >> authorized_keys

  3. cat pub3 >> authorized_keys

  4. cat pub4 >> authorized_keys

然后将authorized_keys文件发送到每个节点的.ssh文件夹下

  1. cp authorized_keys .ssh/

  2. scp authorized_keys hadoop@node2:~/

  3. scp authorized_keys hadoop@node3:~/

  4. scp authorized_keys hadoop@node4:~/

将下面这段话复制到每个节点的/etc/ssh/ssh_config文件中

  1. Host *

  2. StrictHostKeyChecking no

  3. UserKnownHostsFile=/dev/null

至此,各节点之间切换就不需要输入密码了

三、安装JDK

下载jdk1.8

下载完后上传到node1的家目录上,输入以下命令解压

  1. tar -zxvf jdk-8u131-linux-x64.tar.gz

解压完后删除压缩包,然后将解压后的文件夹改名为jdk

  1. mv jdk1.8.0_131 jdk

配置环境变量:

  1. vi .bashrc

在文件中编写以下内容

  1. export JAVA_HOME=/home/hadoop/jdk

  2. export PATH=$PATH:$JAVA_HOME/bin

保存退出

执行以下命令重新编译.bashrc文件,使之生效

  1. source .bashrc

将jdk文件夹和.bashrc文件发送到其它节点,并source其它节点的.bashrc文件

  1. scp r jdk/ hadoop@node2:~/

四、安装zookeeper

下载zookeeper之后上传到node1的家目录上,输入以下命令解压

  1. tar -zxvf zookeeper-3.4.8.tar.gz

解压完后删除压缩包,并修改文件夹名称

  1. mv zookeeper-3.4.8 zookeeper

配置环境变量,在.bashrc文件中,export PATH这一句上面加一句

  1. export ZOOKEEPER=/home/hadoop/zookeeper

然后在export PATH这一句的末尾追加 :

  1. :$ZOOKEEPER_HOME/bin

保存退出,再 source.bashrc一下

进入zookeeper配置文件目录

  1. cd zookeeper/conf

修改配置文件名称

  1. mv zoo_sample.cfg zoo.cfg

编辑配置文件

  1. vi zoo.cfg

将下面这段话写进配置文件

  1. server.1=node1:2888:3888

  2. server.2=node2:2888:3888

  3. server.3=node3:2888:3888

然后找到dataDir并修改其值

  1. dataDir=/home/hadoop/tmp/zookeeper

保存退出

刚才配置的/home/hadoop/tmp/zookeeper这个文件夹如果不存在,要手动创建一下

然后在目录下创建myid文件,myid中写上对应的数字,数字要和zoo.cfg文件里配置的数字对应上,如node1的myid文件里写1,其他节点以此类推,最后保存退出。

将.bashrc和zookeeper文件夹发送到node2和node3节点的hadoop家目录下并source 一下.bashrc文件

在node1,node2,node3三个节点分别执行 zkServer.sh start

提示启动成功

三个节点都启动成功后,在其中某个节点执行 zkServer.sh status

如果有提示follower或者leader,则表示zookeeper安装成功

五、安装Hadoop

下面这个地址下载hadoop2.7.3版本 http://apache.fayea.com/hadoop/common/hadoop-2.7.3/hadoop-2.7.3.tar.gz

然后上传到node1的家目录上,输入以下命令解压

  1. tar -zxvf hadoop-2.7.3.tar.gz

解压完后删除压缩包,并修改文件夹名称

  1. mv hadoop-2.7.3 hadoop

配置环境变量,在.bashrc文件中,export PATH这一句上面加一句

  1. export HADOOP_HOME=/home/hadoop/hadoop

然后在export PATH这一句的末尾追加 :

  1. :$ HADOOP_HOME /bin:$ HADOOP_HOME /sbin

保存退出,再 source.bashrc一下

进入hadoop的配置文件目录,修改以下配置文件

1. vi hadoop-env.sh

  1. export JAVA_HOME=/home/hadoop/jdk

2. vi hdfs-site.xml

  1. <configuration>

  2. <!--block块存放副本的个数 -->

  3. <property>

  4. <name>dfs.replication</name>

  5. <value>3</value>

  6. </property>

  7. <!--nameNode集群的名称 -->

  8. <property>

  9. <name>dfs.nameservices</name>

  10. <value>hwua</value>

  11. </property>

  12. <!--nameNode集群对应有几个namenode在这里可以填很多个 -->

  13. <property>

  14. <name>dfs.ha.namenodes.hwua </name>

  15. <value>nn1,nn2</value>

  16. </property>

  17. <!--nameNode程序rpc的通信 -->

  18. <property>

  19. <name>dfs.namenode.rpc-address.hwua.nn1</name>

  20. <value>node1:8020</value>

  21. </property>

  22. <!--nameNode程序rpc的通信 -->

  23. <property>

  24. <name>dfs.namenode.rpc-address.hwua.nn2</name>

  25. <value>node2:8020</value>

  26. </property>

  27. <!--nameNode程序http的通信 -->

  28. <property>

  29. <name>dfs.namenode.http-address.hwua.nn1</name>

  30. <value>node1:50070</value>

  31. </property>

  32. <!--nameNode程序http的通信 -->

  33. <property>

  34. <name>dfs.namenode.http-address.hwua.nn2</name>

  35. <value>node2:50070</value>

  36. </property>

  37. <!--这里那几台机器启动了journalNode服务 -->

  38. <property>

  39. <name>dfs.namenode.shared.edits.dir</name>

  40. <value>qjournal://node2:8485;node3:8485;node4:8485/hwua</value>

  41. </property>

  42. <!--nameNode的active和standby在切换时候,提供的一个API -->

  43. <property>

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

  45. </property>

  46. <!--当一个namenode挂了,那么standby状态的接管,会在要断没断时将通过ssh到active上将其进程杀死 ,自己接管即:当NN2failover接管时,将通过ssh到namenode里面去,kill process(namenode),防止脑裂-->

  47. <property>

  48. <name>dfs.ha.fencing.methods</name>

  49. <value>sshfence</value>

  50. </property>

  51. <!--通过钥匙去登录别的服务器,开启其它的服务,如DataNode -->

  52. <property>

  53. <name>dfs.ha.fencing.ssh.private-key-files</name>

  54. <value>/home/hadoop/.ssh/id_rsa</value>

  55. </property>

  56. <!--journal存放edits文件的地方 -->

  57. <property>

  58. <name>dfs.journalnode.edits.dir</name>

  59. <value>/usr/hadoopsoft/journal</value>

  60. </property>

  61. <!--当一台nameNode挂了,可以自动的切换 -->

  62. <property>

  63. <name>dfs.ha.automatic-failover.enabled</name>

  64. <value>true</value>

  65. </property>

  66. </configuration>

3. vi core-site.xml

  1. <configuration>

  2. <!-- 指定hdfs的nameservice为namenode -->

  3. <property>

  4. <name>fs.defaultFS</name>

  5. <value>hdfs://hwua</value>

  6. </property>

  7. <!-- 指定hadoop临时目录,如果没有请手动创建 -->

  8. <property>

  9. <name>hadoop.tmp.dir</name>

  10. <value>/home/hadoop/tmp/hadoop</value>

  11. </property>

  12. <!-- 指定zookeeper所在的机器 -->

  13. <property>

  14. <name>ha.zookeeper.quorum</name>

  15. <value>node1:2181,node2:2181,node3:2181</value>

  16. </property>

  17. </configuration>

4. mv mapred-site.xml.template mapred-site.xml

然后 vi mapred-site.xml

  1. <property>

  2. <name>mapreduce.framework.name</name>

  3. <value>yarn</value>

  4. </property>

5. vi yarn-site.xml

  1. <property>

  2. <name>yarn.nodemanager.aux-services</name>

  3. <value>mapreduce_shuffle</value>

  4. </property>

  5. <property>

  6. <name>yarn.resourcemanager.hostname</name>

  7. <value>node1</value>

  8. </property>

6. vi slaves

  1. node2

  2. node3

  3. node4

填的是dataNode所在的节点:node2 node3 node4

而在完全分布式中设置的masters给删除掉,因为完全分布式中设置的secondaryNameNode节点ip,而这里有了高可用,不用secondaryNameNode,而被nn2替换掉了

7. 将hadoop的所有目录都拷贝到其它节点

  1. scp -r /usr/hadoopsoft/hadoop-2.5.1 node2:/usr/hadoopsoft/

  2. scp -r /usr/hadoopsoft/hadoop-2.5.1 node3:/usr/hadoopsoft/

  3. scp -r /usr/hadoopsoft/hadoop-2.5.1 node4:/usr/hadoopsoft/

修改完所有文件后,先启动journalnode

  1. Hadoop-deamonsh start journalnode

在其中一个namenode上格式化:hdfs namenode -format

把刚刚格式化之后的元数据拷贝到另一个namenode上

  • 启动刚刚格式化的namenode

  • 在没有格式化的namenode上执行:hdfs namenode –bootstrapStandby

  • 启动第二个namenode

在其中一个namenode上初始化zkfc: hdfs zkfc –formatZK

停止上面的节点:stop-dfs.sh

最后,全面启动Hadoop: start-all.sh

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!