hadoop 集群 多 nameservices 多节点 集群搭建 过程---第二版

来源:互联网 发布:腾讯微信数据报告 编辑:程序博客网 时间:2024/06/15 22:33

环境:
centos7.4
jkd1.7.0_80
hadoop2.6.4
在 /etc/profile中配置java,hadoop,zookeeper的export和PATH,方便启动调用
结构:

cluster1:   mini0   mini1cluster2:   mini7   mini8zkfc    :   mini0   mini1   mini7   mini8resourcemanager:    mini4   mini6journalnode,zookeeper,datanode: mini2   mini3   mini6

文件:
hadoop-env.sh:
修改java位置:
export JAVA_HOME=/usr/local/jdk1.7.0_80

core-site.xml:    <?xml version="1.0" encoding="UTF-8"?>    <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>    <configuration>      <property>        <name>fs.defaultFS</name>        <value>viewfs:///</value>      </property>       <!-- 第一套namenode集群 -->       <property>        <name>fs.viewfs.mounttable.c1.link./tmp</name>        <value>hdfs://bi1/</value>      </property>      <!-- 第二套namenode集群 -->       <property>        <name>fs.viewfs.mounttable.c1.link./tmp1</name>        <value>hdfs://bi2/</value>      </property>      <!-- zookeeper集群 -->       <property>        <name>ha.zookeeper.quorum</name>        <value>mini2:2181,mini3:2181,mini6:2181</value>      </property>      <!-- 数据总目录,其他需要生成日志,数据的目录都在这个目录下 -->       <property>        <name>hadoop.tmp.dir</name>        <value>/home/hadoop/apps/hadoop/tmp</value>      </property>    </configuration>hdfs-site.xml:    <configuration>      <!-- 两套namenode集群的名字 -->       <property>        <name>dfs.nameservices</name>        <value>bi1,bi2</value>      </property>      <!-- bi1下面有两个NameNode,逻辑地址,分别是nn1,nn2 -->      <property>        <name>dfs.ha.namenodes.bi1</name>        <value>nn1,nn2</value>      </property>      <!-- nn1的RPC通信地址 -->      <property>        <name>dfs.namenode.rpc-address.bi1.nn1</name>        <value>mini0:9000</value>      </property>      <!-- nn1的http通信地址 -->      <property>        <name>dfs.namenode.http-address.bi1.nn1</name>        <value>mini0:50070</value>      </property>      <!-- nn2的RPC通信地址 -->      <property>        <name>dfs.namenode.rpc-address.bi1.nn2</name>        <value>mini1:9000</value>      </property>      <!-- nn2的http通信地址 -->      <property>        <name>dfs.namenode.http-address.bi1.nn2</name>        <value>mini1:50070</value>      </property>      <!-- 配置失败自动切换实现方式,zkfc,一个类 -->      <property>        <name>dfs.client.failover.proxy.provider.bi1</name>        <value>         org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider        </value>      </property>      <!-- bi2下面有两个NameNode,逻辑地址,分别是nn3,nn4 -->      <property>        <name>dfs.ha.namenodes.bi2</name>        <value>nn3,nn4</value>      </property>      <!-- nn1的RPC通信地址 -->      <property>        <name>dfs.namenode.rpc-address.bi2.nn3</name>        <value>mini8:9000</value>      </property>      <!-- nn1的http通信地址 -->      <property>        <name>dfs.namenode.http-address.bi2.nn3</name>        <value>mini8:50070</value>      </property>      <!-- nn2的RPC通信地址 -->      <property>        <name>dfs.namenode.rpc-address.bi2.nn4</name>        <value>mini7:9000</value>      </property>      <!-- nn2的http通信地址 -->      <property>        <name>dfs.namenode.http-address.bi2.nn4</name>        <value>mini7:50070</value>      </property>      <!-- 配置失败自动切换实现方式,zkfc,一组一个 -->      <property>        <name>dfs.client.failover.proxy.provider.bi2</name>        <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>      </property>      <property>        <name>dfs.namenode.name.dir</name>        <value>/home/hadoop/apps/hadoop/tmp/namedir</value>      </property>    <!-- 指定NameNode的edits元数据在JournalNode上的存放位置         因为这里具体设置了不同节点的具体位置,可以一同复制该配置给其他机器而不影响使用,        另一种配置:            集群1,下面4个具体的dfs.namenode.shared.edits.dir配置可改为这里的1个配置,集群1的两台namenode配置这个            <property>                 <name>dfs.namenode.shared.edits.dir</name>                 <value>qjournal://mini2:8485;mini3:8485;mini6:8485/bi1</value>             </property>            集群2,对应的下面4个dfs.namenode.shared.edits.dir配置同理,改为这里的1个,集群2的两台namenode配置这个            <property>                 <name>dfs.namenode.shared.edits.dir</name>                 <value>qjournal://mini2:8485;mini3:8485;mini6:8485/bi2</value>             </property>        这种方式在两个集群配置两个,多个集群略有不变,不能一同传输给其他机器,喜好随自己.后面的启动操作都一样    -->      <property>        <name>dfs.namenode.shared.edits.dir.bi1.nn1</name>        <value>qjournal://mini2:8485;mini3:8485;mini6:8485/bi1</value>      </property>      <property>        <name>dfs.namenode.shared.edits.dir.bi1.nn2</name>        <value>qjournal://mini2:8485;mini3:8485;mini6:8485/bi1</value>      </property>      <property>        <name>dfs.namenode.shared.edits.dir.bi2.nn3</name>        <value>qjournal://mini2:8485;mini3:8485;mini6:8485/bi2</value>      </property>      <property>        <name>dfs.namenode.shared.edits.dir.bi2.nn4</name>        <value>qjournal://mini2:8485;mini3:8485;mini6:8485/bi2</value>      </property>    <!-- 开启NameNode失败自动切换 -->      <property>        <name>dfs.ha.automatic-failover.enabled</name>        <value>true</value>      </property>      <!-- 指定JournalNode在本地磁盘存放数据的位置 -->      <property>        <name>dfs.journalnode.edits.dir</name>        <value>/home/hadoop/apps/hadoop/tmp/journaldata</value>      </property>      <!-- 配置隔离fence机制方法,多个机制用换行分割,即每个机制暂用一行-->      <property>        <name>dfs.ha.fencing.methods</name>        <value>            sshfence            shell(/bin/true)        </value>      </property>      <!-- 使用sshfence隔离机制时需要ssh免登陆 -->      <property>        <name>dfs.ha.fencing.ssh.private-key-files</name>        <value>/home/hadoop/.ssh/id_rsa</value>      </property>      <!-- 配置sshfence隔离机制超时时间 -->      <property>        <name>dfs.ha.fencing.ssh.connect-timeout</name>        <value>30000</value>      </property>      <property>        <name>dfs.datanode.data.dir</name>        <value>/home/hadoop/apps/hadoop/tmp/datadir</value>      </property>      <property>        <name>ha.zookeeper.session-timeout.ms</name>        <value>5000</value>      </property      <property>        <name>dfs.replication</name>        <value>2</value>      </property>      <!-- true,则打开前文所述的权限系统。如果是 false,权限检查 就是关闭的-->      <property>        <name>dfs.permission</name>        <value>false</value>      </property>      <!--webhdfs的LISTSTATUS、LISTFILESTATUS等需要列出文件、文件夹状态的命令-->      <property>        <name>dfs.webhdfs.enabled</name>        <value>true</value>      </property>      <!--给文件追加内容-->      <property>        <name>dfs.support.append</name>        <value>true</value>      </property>      <property>        <name>hadoop.proxyuser.hduser.hosts</name>        <value>*</value>      </property>      <property>        <name>hadoop.proxyuser.hduser.groups</name>        <value>*</value>      </property>    </configuration>mapred-site.xml:    <configuration>      <!--mapreduce运行平台的名字,mapreduce运行时,需要将之设置为yarn -->      <property>        <name>mapreduce.framework.name</name>        <value>yarn</value>      </property>    </configuration>yarn-site.xml:    <configuration>      <property>        <name>yarn.resourcemanager.ha.enabled</name>        <value>true</value>      </property>      <!-- 指定RM的cluster id -->      <property>        <name>yarn.resourcemanager.cluster-id</name>        <value>yrc</value>      </property>      <!-- 指定RM的名字 -->      <property>        <name>yarn.resourcemanager.ha.rm-ids</name>        <value>rm1,rm2</value>      </property>      <!-- 分别指定RM的地址 -->      <property>        <name>yarn.resourcemanager.hostname.rm1</name>        <value>mini4</value>      </property>      <property>        <name>yarn.resourcemanager.hostname.rm2</name>        <value>mini6</value>      </property>      <!-- 指定zk集群地址 -->      <property>        <name>yarn.resourcemanager.zk-address</name>        <value>mini2:2181,mini3:2181,mini6:2181</value>      </property>      <property>        <name>yarn.nodemanager.aux-services</name>        <value>mapreduce_shuffle</value>      </property>    </configuration>

启动步骤较严格,且使用start-all.sh有较大的出错几率,宜单个具体操作,注意每一步的测试,具体测试请看
http://www.cnblogs.com/meiyuanbao/p/3545929.html
这里有具体测试操作(非常感谢这位大神,帮了很多)

    1,启动zookeeper集群    这里,将mini2,mini3,mini6执行        ~/apps/zookeeper/bin/zkServer.sh start    2,格式化ZooKeeper集群,ZooKeeper集群上建立HA的相应节点,完成后zk中的hadoop集群目录为hadoop-ha    mini1和mini8上执行        hdfs zkfc –formatZK    3,启动JournalNode集群    在对应的JournalNode节点,这里是mini2,mini3,mini6上执行        hadoop-daemon.sh start journalnode    4,格式化集群cluster1的一个NameNode        4.1从mini0和mini1中任选一个即可如在mini0上执行            hdfs namenode -format -clusterId c1        4.2启动mini0的namenode            hadoop-daemon.sh start namenode                ----hadoop-daemon.sh start zkfc        4.3将namenode格式化后的文件传给相同集群的另一个主机,mini1.            这里的文件指在hdfs-site.xml配置中的dfs.namenode.name.dir所配置的目录传给mini1,core-site.xml中也配置了临时目录,看上面路径配置,            scp -r /home/hadoop/apps/hadoop/tmp mini1:/home/hadoop/apps/hadoop        上文的测试指导连接中使用的方式时在需要被传递文件的主机上,这里是mini1上执行        hdfs namenode –bootstrapStandby操作,我这里没有效果,不能启动namenode,所以传文件到该节点.        4.4启动另一个namenode节点的namenode            mini1上执行                hadoop-daemon.sh start namenode    5,集群cluster2上的执行        5.1从mini8和mini7中任选一个即可        如在mini8上执行,这里的clusterId 和cluster1的clusterId 名称一致,成功启动后2个namenode集群共享datanode,            hdfs namenode -format -clusterId c1        5.2启动mini8的namenode            hadoop-daemon.sh start namenode        5.3将namenode格式化后的文件传给相同集群的另一个主机,mini7.        这里的文件指在hdfs-site.xml配置中的dfs.namenode.name.dir所配置的目录传给mini7,core-site.xml中也配置了临时目录,            scp -r /home/hadoop/apps/hadoop/tmp mini7:/home/hadoop/apps/hadoop        上文的测试指导连接中使用的方式时在需要被传递文件的主机上,这里是mini7上执行hdfs namenode –bootstrapStandby操作,我这里没有效果,不能启动namenode,所以传文件到该节点.        5.4启动另一个namenode节点的namenode        mini7上执行            hadoop-daemon.sh start namenode    6,启动所有的DataNode    在mini0上执行        hadoop-daemons.sh start datanode    7,启动Yarn    在resourcemanager集群的对应主机mini4上执行        start-yarn.sh    因为ssh的操作情况,无法启动另一台resourcemanager,需要手动在mini6上执行        yarn-daemon.sh start resourcemanager    8,启动ZooKeeperFailoverController    在所有的namenode节点上执行,这里是mini0,mini1,mini8,mini7        hadoop-daemon.sh start zkfc    9,测试hadfs和yarn    因为配置了不同的集群目录,tmp和tmp1,所以在做任何的hadoop操作需要指定集群存储    测试hdfs:        hadoop fs -put -p 要上传的文件位置 /tmp1/hdfs的目录        这里的tmp就是集群位置,core配置了tmp为cluster1的数据目录,tmp1为cluster2的数据目录    测试yarn        hadoop jar /home/hadoop/apps/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.4.jar wordcount /tmp1/文件目录 /tmp1/结果输出目录        --- 一定要指明哪个集群存储注意:    hdfs://mini1:9000/wordCount        当指定namenode服务器时,不需要指定tmp还是tmp1    hdfs dfs -ls /        Found 2 items        -r-xr-xr-x   - hadoop hadoop          0 2017-09-20 18:34 /tmp        -r-xr-xr-x   - hadoop hadoop          0 2017-09-20 18:34 /tmp1        打印结果为tmp,tmp1,两个namenode点的目录    hdfs dfs -mkdir -p /fileDirectory1        提示:            mkdir: InternalDir of ViewFileSystem is readonly; operation=mkdirsPath=/fileDirectory1    hdfs dfs -mkdir -p /tmp/fileDirectory1        成功

..
此为第二版,日后再做修正

原创粉丝点击