大数据之高可用Hadoop集群环境搭建

  首先我们要明确一点,高可用的Hadoop环境之所以被称之为高可用,就是因为它所具备的容灾性更强,对分布式计算的能力更出众,来达到一种高可用的状态,那么就必然会有多个NameNode,ResourceManager的出现。那么我们的高可用的Hadoop环境资源分配如下图:

  

搭建集群

 

 

 第一步:我们依然是把我们下载的安装包上传并解压。这里就不在详解了,之前写的文章反复写到了。

 第二步:配置文件的修改,高可用与普通学习版差别就是在各个配置文件的内容中。

  修改core-site.xml

  

 1 <configuration>
 2   <!-- 指定NameNode的HA高可用的zk地址  -->
 3     <property>
 4         <name>ha.zookeeper.quorum</name>
 5         <value>node01:2181,node02:2181,node03:2181</value>
 6     </property>
 7    <!-- 指定HDFS访问的域名地址  -->
 8     <property>
 9         <name>fs.defaultFS</name>
10         <value>hdfs://ns</value>
11     </property>
12    <!-- 临时文件存储目录  -->
13     <property>
14         <name>hadoop.tmp.dir</name>
15         <value>/export/servers/hadoop-2.7.5/data/tmp</value>
16     </property>
17      <!-- 开启hdfs垃圾箱机制,指定垃圾箱中的文件七天之后就彻底删掉
18             单位为分钟
19      -->
20     <property>
21         <name>fs.trash.interval</name>
22         <value>10080</value>
23     </property>
24 </configuration>

  修改hdfs-site.xml

  1 <configuration>
  2 <!--  指定命名空间  -->
  3     <property>
  4         <name>dfs.nameservices</name>
  5         <value>ns</value>
  6     </property>
  7 <!--  指定该命名空间下的两个机器作为我们的NameNode  -->
  8     <property>
  9         <name>dfs.ha.namenodes.ns</name>
 10         <value>nn1,nn2</value>
 11     </property>
 12 
 13     <!-- 配置第一台服务器的namenode通信地址  -->
 14     <property>
 15         <name>dfs.namenode.rpc-address.ns.nn1</name>
 16         <value>node01:8020</value>
 17     </property>
 18     <!--  配置第二台服务器的namenode通信地址  -->
 19     <property>
 20         <name>dfs.namenode.rpc-address.ns.nn2</name>
 21         <value>node02:8020</value>
 22     </property>
 23     <!-- 所有从节点之间相互通信端口地址 -->
 24     <property>
 25         <name>dfs.namenode.servicerpc-address.ns.nn1</name>
 26         <value>node01:8022</value>
 27     </property>
 28     <!-- 所有从节点之间相互通信端口地址 -->
 29     <property>
 30         <name>dfs.namenode.servicerpc-address.ns.nn2</name>
 31         <value>node02:8022</value>
 32     </property>
 33     
 34     <!-- 第一台服务器namenode的web访问地址  -->
 35     <property>
 36         <name>dfs.namenode.http-address.ns.nn1</name>
 37         <value>node01:50070</value>
 38     </property>
 39     <!-- 第二台服务器namenode的web访问地址  -->
 40     <property>
 41         <name>dfs.namenode.http-address.ns.nn2</name>
 42         <value>node02:50070</value>
 43     </property>
 44     
 45     <!-- journalNode的访问地址,注意这个地址一定要配置 -->
 46     <property>
 47         <name>dfs.namenode.shared.edits.dir</name>
 48         <value>qjournal://node01:8485;node02:8485;node03:8485/ns1</value>
 49     </property>
 50     <!--  指定故障自动恢复使用的哪个java类 -->
 51     <property>
 52         <name>dfs.client.failover.proxy.provider.ns</name>
 53         <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
 54     </property>
 55     
 56     <!-- 故障转移使用的哪种通信机制 -->
 57     <property>
 58         <name>dfs.ha.fencing.methods</name>
 59         <value>sshfence</value>
 60     </property>
 61     
 62     <!-- 指定通信使用的公钥  -->
 63     <property>
 64         <name>dfs.ha.fencing.ssh.private-key-files</name>
 65         <value>/root/.ssh/id_rsa</value>
 66     </property>
 67     <!-- journalNode数据存放地址  -->
 68     <property>
 69         <name>dfs.journalnode.edits.dir</name>
 70         <value>/export/servers/hadoop-2.7.5/data/dfs/jn</value>
 71     </property>
 72     <!-- 启用自动故障恢复功能 -->
 73     <property>
 74         <name>dfs.ha.automatic-failover.enabled</name>
 75         <value>true</value>
 76     </property>
 77     <!-- namenode产生的文件存放路径 -->
 78     <property>
 79         <name>dfs.namenode.name.dir</name>
 80         <value>file:///export/servers/hadoop-2.7.5/data/dfs/nn/name</value>
 81     </property>
 82     <!-- edits产生的文件存放路径 -->
 83     <property>
 84         <name>dfs.namenode.edits.dir</name>
 85         <value>file:///export/servers/hadoop-2.7.5/data/dfs/nn/edits</value>
 86     </property>
 87     <!-- dataNode文件存放路径 -->
 88     <property>
 89         <name>dfs.datanode.data.dir</name>
 90         <value>file:///export/servers/hadoop-2.7.5/data/dfs/dn</value>
 91     </property>
 92     <!-- 关闭hdfs的文件权限 -->
 93     <property>
 94         <name>dfs.permissions</name>
 95         <value>false</value>
 96     </property>
 97     <!-- 指定block文件块的大小 默认128M-->
 98     <property>
 99         <name>dfs.blocksize</name>
100         <value>134217728</value>
101     </property>
102 </configuration>

修改yarn-site.xml,注意三台机器都不一样,注释中有些,要细心。

  1 <configuration>
  2 <!-- Site specific YARN configuration properties -->
  3 <!-- 是否启用日志聚合.应用程序完成后,日志汇总收集每个容器的日志,这些日志移动到文件系统,例如HDFS. -->
  4 <!-- 用户可以通过配置"yarn.nodemanager.remote-app-log-dir"、"yarn.nodemanager.remote-app-log-dir-suffix"来确定日志移动到的位置 -->
  5 <!-- 用户可以通过应用程序时间服务器访问日志 -->
  6 
  7 <!-- 启用日志聚合功能,应用程序完成后,收集各个节点的日志到一起便于查看 -->
  8     <property>
  9             <name>yarn.log-aggregation-enable</name>
 10             <value>true</value>
 11     </property>
 12  
 13 
 14 <!--开启resource manager HA,默认为false--> 
 15 <property>
 16         <name>yarn.resourcemanager.ha.enabled</name>
 17         <value>true</value>
 18 </property>
 19 <!-- 集群的Id,使用该值确保RM不会做为其它集群的active -->
 20 <property>
 21         <name>yarn.resourcemanager.cluster-id</name>
 22         <value>mycluster</value>
 23 </property>
 24 <!--配置resource manager  命名-->
 25 <property>
 26         <name>yarn.resourcemanager.ha.rm-ids</name>
 27         <value>rm1,rm2</value>
 28 </property>
 29 <!-- 配置第一台机器的resourceManager -->
 30 <property>
 31         <name>yarn.resourcemanager.hostname.rm1</name>
 32         <value>node03</value>
 33 </property>
 34 <!-- 配置第二台机器的resourceManager -->
 35 <property>
 36         <name>yarn.resourcemanager.hostname.rm2</name>
 37         <value>node02</value>
 38 </property>
 39 
 40 <!-- 配置第一台机器的resourceManager通信地址 -->
 41 <property>
 42         <name>yarn.resourcemanager.address.rm1</name>
 43         <value>node03:8032</value>
 44 </property>
 45 <property>
 46         <name>yarn.resourcemanager.scheduler.address.rm1</name>
 47         <value>node03:8030</value>
 48 </property>
 49 <property>
 50         <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
 51         <value>node03:8031</value>
 52 </property>
 53 <property>
 54         <name>yarn.resourcemanager.admin.address.rm1</name>
 55         <value>node03:8033</value>
 56 </property>
 57 <property>
 58         <name>yarn.resourcemanager.webapp.address.rm1</name>
 59         <value>node03:8088</value>
 60 </property>
 61 
 62 <!-- 配置第二台机器的resourceManager通信地址 -->
 63 <property>
 64         <name>yarn.resourcemanager.address.rm2</name>
 65         <value>node02:8032</value>
 66 </property>
 67 <property>
 68         <name>yarn.resourcemanager.scheduler.address.rm2</name>
 69         <value>node02:8030</value>
 70 </property>
 71 <property>
 72         <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
 73         <value>node02:8031</value>
 74 </property>
 75 <property>
 76         <name>yarn.resourcemanager.admin.address.rm2</name>
 77         <value>node02:8033</value>
 78 </property>
 79 <property>
 80         <name>yarn.resourcemanager.webapp.address.rm2</name>
 81         <value>node02:8088</value>
 82 </property>
 83 <!--开启resourcemanager自动恢复功能-->
 84 <property>
 85         <name>yarn.resourcemanager.recovery.enabled</name>
 86         <value>true</value>
 87 </property>
 88 <!--在node3上配置rm1,在node2上配置rm2,在node1上不配置。根据你要搭建的集群框架来。注意:一般都喜欢把配置好的文件远程复制到其它机器上,
     但这个在YARN的另一个机器上一定要修改
--> 89 <property> 90 <name>yarn.resourcemanager.ha.id</name> 91 <value>rm1</value> 92 <description>If we want to launch more than one RM in single node, we need this configuration</description> 93 </property> 94 95 <!--用于持久存储的类。尝试开启--> 96 <property> 97 <name>yarn.resourcemanager.store.class</name> 98 <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> 99 </property> 100 <property> 101 <name>yarn.resourcemanager.zk-address</name> 102 <value>node02:2181,node03:2181,node01:2181</value> 103 <description>For multiple zk services, separate them with comma</description> 104 </property> 105 <!--开启resourcemanager故障自动切换,指定机器--> 106 <property> 107 <name>yarn.resourcemanager.ha.automatic-failover.enabled</name> 108 <value>true</value> 109 <description>Enable automatic failover; By default, it is enabled only when HA is enabled.</description> 110 </property> 111 <property> 112 <name>yarn.client.failover-proxy-provider</name> 113 <value>org.apache.hadoop.yarn.client.ConfiguredRMFailoverProxyProvider</value> 114 </property> 115 <!-- 允许分配给一个任务最大的CPU核数,默认是8 --> 116 <property> 117 <name>yarn.nodemanager.resource.cpu-vcores</name> 118 <value>4</value> 119 </property> 120 <!-- 每个节点可用内存,单位MB --> 121 <property> 122 <name>yarn.nodemanager.resource.memory-mb</name> 123 <value>1024</value> 124 </property> 125 <!-- 单个任务可申请最少内存,默认1024MB --> 126 <property> 127 <name>yarn.scheduler.minimum-allocation-mb</name> 128 <value>1024</value> 129 </property> 130 <!-- 单个任务可申请最大内存,默认8192MB,根据你虚拟机的内存来,我虚拟机是4G,那么最多给它3G,不然其他软件运行容易出问题 --> 131 <property> 132 <name>yarn.scheduler.maximum-allocation-mb</name> 133 <value>3072</value> 134 </property> 135 <!--多长时间聚合删除一次日志 此处--> 136 <property> 137 <name>yarn.log-aggregation.retain-seconds</name> 138 <value>2592000</value><!--30 day--> 139 </property> 140 <!--时间在几秒钟内保留用户日志。只适用于如果日志聚合是禁用的--> 141 <property> 142 <name>yarn.nodemanager.log.retain-seconds</name> 143 <value>604800</value><!--7 day--> 144 </property> 145 <!--指定文件压缩类型用于压缩汇总日志--> 146 <property> 147 <name>yarn.nodemanager.log-aggregation.compression-type</name> 148 <value>gz</value> 149 </property> 150 <!-- nodemanager本地文件存储目录--> 151 <property> 152 <name>yarn.nodemanager.local-dirs</name> 153 <value>/export/servers/hadoop-2.7.5/yarn/local</value> 154 </property> 155 <!-- resourceManager 保存最大的任务完成个数 --> 156 <property> 157 <name>yarn.resourcemanager.max-completed-applications</name> 158 <value>1000</value> 159 </property> 160 <!-- 逗号隔开的服务列表,列表名称应该只包含a-zA-Z0-9_,不能以数字开始--> 161 <property> 162 <name>yarn.nodemanager.aux-services</name> 163 <value>mapreduce_shuffle</value> 164 </property> 165 166 <!--rm失联后重新链接的时间--> 167 <property> 168 <name>yarn.resourcemanager.connect.retry-interval.ms</name> 169 <value>2000</value> 170 </property> 171 </configuration>

修改mapred-site.xml

 1 <configuration>
 2 <!--指定运行mapreduce的环境是yarn -->
 3 <property>
 4         <name>mapreduce.framework.name</name>
 5         <value>yarn</value>
 6 </property>
 7 <!-- MapReduce JobHistory Server IPC host:port -->
 8 <property>
 9         <name>mapreduce.jobhistory.address</name>
10         <value>node03:10020</value>
11 </property>
12 <!-- MapReduce JobHistory Server Web UI host:port -->
13 <property>
14         <name>mapreduce.jobhistory.webapp.address</name>
15         <value>node03:19888</value>
16 </property>
17 <!-- The directory where MapReduce stores control files.默认 ${hadoop.tmp.dir}/mapred/system -->
18 <property>
19         <name>mapreduce.jobtracker.system.dir</name>
20         <value>/export/servers/hadoop-2.7.5/data/system/jobtracker</value>
21 </property>
22 <!-- The amount of memory to request from the scheduler for each map task. 默认 1024-->
23 <property>
24         <name>mapreduce.map.memory.mb</name>
25         <value>1024</value>
26 </property>
27 <!-- <property>
28                 <name>mapreduce.map.java.opts</name>
29                 <value>-Xmx1024m</value>
30         </property> -->
31 <!-- The amount of memory to request from the scheduler for each reduce task. 默认 1024-->
32 <property>
33         <name>mapreduce.reduce.memory.mb</name>
34         <value>1024</value>
35 </property>
36 <!-- <property>
37                <name>mapreduce.reduce.java.opts</name>
38                <value>-Xmx2048m</value>
39         </property> -->
40 <!-- 用于存储文件的缓存内存的总数量,以兆字节为单位。默认情况下,分配给每个合并流1MB,给个合并流应该寻求最小化。默认值100-->
41 <property>
42         <name>mapreduce.task.io.sort.mb</name>
43         <value>100</value>
44 </property>
45  
46 <!-- <property>
47         <name>mapreduce.jobtracker.handler.count</name>
48         <value>25</value>
49         </property>-->
50 <!-- 整理文件时用于合并的流的数量。这决定了打开的文件句柄的数量。默认值10-->
51 <property>
52         <name>mapreduce.task.io.sort.factor</name>
53         <value>10</value>
54 </property>
55 <!-- 默认的并行传输量由reduce在copy(shuffle)阶段。默认值5-->
56 <property>
57         <name>mapreduce.reduce.shuffle.parallelcopies</name>
58         <value>25</value>
59 </property>
60 <property>
61         <name>yarn.app.mapreduce.am.command-opts</name>
62         <value>-Xmx1024m</value>
63 </property>
64 <!-- MR AppMaster所需的内存总量。默认值1536-->
65 <property>
66         <name>yarn.app.mapreduce.am.resource.mb</name>
67         <value>1536</value>
68 </property>
69 <!-- MapReduce存储中间数据文件的本地目录。目录不存在则被忽略。默认值${hadoop.tmp.dir}/mapred/local-->
70 <property>
71         <name>mapreduce.cluster.local.dir</name>
72         <value>/export/servers/hadoop-2.7.5/data/system/local</value>
73 </property>
74 </configuration>

修改slaves

1 node01
2 node02
3 node03
修改hadoop-env.sh
1 export JAVA_HOME=/export/servers/jdk1.8.0_141

  第一台机器环境已经配好,然后scp 拷贝到其他两台机器,切记一定要记得去修改yarn-site.xml 三台机器都不一样。

启动集群的过程,记住一步一步来,不要跳过,否则各种错的你心态爆炸

启动集群

  启动HDFS过程

1 cd   /export/servers/hadoop-2.7.5
2 bin/hdfs zkfc -formatZK
3 sbin/hadoop-daemons.sh start journalnode
4 #这一步只在第一次搭建完启动的时候执行,其他时候切记不可执行,否则数据全部格式化
5 bin /hdfs namenode -format
6 bin/hdfs namenode -initializeSharedEdits -force
7 sbin/start-dfs.sh

  node02上面执行

cd   /export/servers/hadoop-2.7.5
#让第二台NameNode为Standby状态
bin/hdfs namenode -bootstrapStandby
#后台启动NameNode
sbin/hadoop-daemon.sh start namenode

  启动yarn过程

  node03执行

1 cd   /export/servers/hadoop-2.7.5
2 sbin/start-yarn.sh

  node02执行

cd   /export/servers/hadoop-2.7.5
sbin/start-yarn.sh

  查看ResourceManager状态

  node03执行

cd   /export/servers/hadoop-2.7.5
bin/yarn rmadmin -getServiceState rm1

  查询结果为Active就说明成功了

  node02执行

1 cd   /export/servers/hadoop-2.7.5
2 bin/yarn rmadmin -getServiceState rm2

  查询结果为Active就说明成功了

  启动jobHistory服务

1 cd /export/servers/hadoop-2.7.5
2 sbin/mr-jobhistory-daemon.sh start historyserver

检查集群启动情况

  三台机器分别输入命令jps 

  第一台机器进程中应该具备NameNode、DataNode、JournalNode、NodeManager、DFSZKFailoverController这些进程,否则就可能是哪里启动失败了,看少了哪个进程。NameNode HDFS 主节点进程、DataNode HDFS 从节点进程、JournalNode HDFS共享数据进程、NodeManager yarn 从节点进程、DFSZKFailoverController Zookeeper资源调度进程。

  第二台机器进程中应该具备NameNode、DataNode、JournalNode、ResourceManager、NodeManager、DFSZKFailoverController这些进程,否则就可能是哪里启动失败了,看少了哪个进程。NameNode HDFS 主节点进程、DataNode HDFS 从节点进程、JournalNode HDFS共享数据进程ResourceManager yarn 主节点进程、NodeManager yarn 从节点进程、DFSZKFailoverController Zookeeper资源调度进程。

  第三台机器进程中应该具备DataNode、JournalNode、ResourceManager、NodeManager、DFSZKFailoverController、JobHistoryServer这些进程,否则就可能是哪里启动失败了,看少了哪个进程。NameNode HDFS 主节点进程、DataNode HDFS 从节点进程、JournalNode HDFS共享数据进程ResourceManager yarn 主节点进程、NodeManager yarn 从节点进程、DFSZKFailoverController Zookeeper资源调度进程、JobHistoryServer任务执行历史进程

这些进程缺一不可,缺少了任何一个Hadoop集群都说明集群搭建出了问题。确认无误之后,就在Windows主机上访问以下网站,进行进一步的确认。

  node01机器查看hdfs状态

 

    http://node01:50070/dfshealth.html#tab-overview

 

  node02机器查看hdfs状态

 

    http://node02:50070/dfshealth.html#tab-overview

 

   yarn集群访问查看

 

    http://node03:8088/cluster

 

    历史任务浏览界面

 

    页面访问:

 

    http://192.168.111.220:19888/jobhistory

如果上面的地址都能正常打开,说明这次你的高可用Hadoop集群就搭建成功了。

 

    

posted @ 2014-01-25 13:41  笑城戈  阅读(293)  评论(0编辑  收藏  举报