• 一步步教你搭建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

  • 相关阅读:
    oracle 的一点累积
    ZT: 网页的一些技巧
    ZT: WEB学习资料
    开源java
    倒序显示文本
    plsql使用之debug
    转 一些shell经验
    lpad rpad
    2018.8.19 2018暑假集训之maxnum
    2018.8.17 题解 2018暑假集训之编辑距离
  • 原文地址:https://www.cnblogs.com/weiwei-python/p/11972662.html
Copyright © 2020-2023  润新知