zoukankan      html  css  js  c++  java
  • 一步步教你搭建Hadoop集群

    一、准备工作

    假设现在有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

  • 相关阅读:
    POJ 3468 A Simple Problem with Integers
    BZOJ 4430 Guessing Camels
    POJ 2309 BST
    POJ 1990 MooFest
    cf 822B Crossword solving
    cf B. Black Square
    cf 828 A. Restaurant Tables
    Codefroces 822C Hacker, pack your bags!
    [HDU 2255] 奔小康赚大钱
    [BZOJ 1735] Muddy Fields
  • 原文地址:https://www.cnblogs.com/weiwei-python/p/11972662.html
Copyright © 2011-2022 走看看