1.   我们知道hadoop1.x之前的namenode存在两个主要的问题:1namenode内存瓶颈的问题,2namenode的单点故障的问题。针对这两个问题,hadoop2.x都对它进行改进和解决。其中,问题1中对namenode内存瓶颈的问题采用扩展namenode的方式来解决。对于问题2中的namenode的单点故障问题hadoop2.x采用的是HA的解决方案。apache hadoop 官方网站上提供了两种解决HDFS High Availability Using the Quorum Journal Manager High Availability with NFS
  2.  
  3.   本文是采用HDFS High Availability Using the Quorum Journal Manager 方案来实现HA。并且实现namenode单点故障自动切换的功能,这就需要借助与zookeeper集群来实现。下面详细的讲解一下通过zookeeper来实现HDFS High Availability Using the Quorum Journal Manager 单点故障自动切换的方案。
  4.  
  5.   在介绍之前,首先说明一下我的集群规模:2namenodehadoop1,hadoop5),3datanodehadoop2hadoop3hadoop4)。
  6.  
  7.   ------------------------------------------------------------------------------------------------
  8.  
  9.   | IP地址 | 主机名 | NameNode | journalNode | DataNode | zookeeper |
  10.  
  11.   | 192.168.1.21 | hadoop1 |    |  是    |  否   |  是   |
  12.  
  13.   | 192.168.1.22 | hadoop2 |    |  是    |  是   |  是   |
  14.  
  15.   | 192.168.1.23 | hadoop3 |    |  是    |  是   |  是   |
  16.  
  17.   | 192.168.1.24 | hadoop4 |    |  是    |  是   |  是   |
  18.  
  19.   | 192.168.1.25 | hadoop5 |    |  是    |  否   |  是   |
  20.  
  21.   --------------------------------------------------------------------------------------------------
  22.  
  23. 1、首先当然是安装zookeeper的集群了
  24.  
  25.   对于该集群的安装可以参考另一篇文章: http://www.cnblogs.com/ljy2013/p/4510143.html 。这篇文章详细介绍了zookeeper的安装
  26.  
  27. 2、安装好了zookeeper集群之后,下一步就需要部署你自己的hadoop2.x的集群了。
  28.  
  29.   对于hadoop2.x的集群,我部署的是hadoop2.6.0的集群,部署方法可以参考文章:http://www.cnblogs.com/ljy2013/articles/4345172.html 。这篇文章当中详细介绍了如何安装和部署简单的hadoop的集群。
  30.  
  31. 3、这里对journalnode进行说明一下,这个节点是一个轻量级的进行,可以与hadoop的集群部署在同一台机器上,并且,它的部署只需要添加hadoop相应的配置参数即可。
  32.  
  33. 4、修改hadoop集群的配置文件,这里需要修改的配置文件较多,修改的参数更多,并且比较重要。
  34.  
  35.   1)修改core-site.xml文件
  36.  
  37. <?xml version="1.0" encoding="UTF-8"?>
  38. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  39. <!--
  40. Licensed under the Apache License, Version 2.0 (the "License");
  41. you may not use this file except in compliance with the License.
  42. You may obtain a copy of the License at
  43.  
  44. http://www.apache.org/licenses/LICENSE-2.0
  45.  
  46. Unless required by applicable law or agreed to in writing, software
  47. distributed under the License is distributed on an "AS IS" BASIS,
  48. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  49. See the License for the specific language governing permissions and
  50. limitations under the License. See accompanying LICENSE file.
  51. -->
  52.  
  53. <!-- Put site-specific property overrides in this file. -->
  54.  
  55. <configuration>
  56. <property>
  57. <name>fs.defaultFS</name>
  58. <value>hdfs://mycluster</value>
  59. </property>
  60. <property>
  61. <name>ha.zookeeper.quorum</name>
  62. <value>hadoop1:2181,hadoop2:2181,hadoop3:2181,hadoop4:2181,hadoop5:2181</value>
  63. </property>
  64. <!--
  65. <property>
  66. <name>dfs.ha.automatic-failover.enabled</name>
  67. <value>true</value>
  68. </property>
  69.  
  70. <property>
  71. <name>dfs.ha.fencing.methods</name>
  72. <value>sshfence</value>
  73. </property>
  74.  
  75. <property>
  76. <name>dfs.ha.fencing.ssh.private-key-files</name>
  77. <value>/home/grid/.ssh/id_rsa_nn</value>
  78. </property>
  79. -->
  80. <property>
  81. <name>ha.zookeeper.session-timeout.ms</name>
  82. <value>60000</value>
  83. </property>
  84. <property>
  85. <name>ha.failover-controller.cli-check.rpc-timeout.ms</name>
  86. <value>60000</value>
  87. </property>
  88. <property>
  89. <name>ipc.client.connect.timeout</name>
  90. <value>20000</value>
  91. </property>
  92.  
  93. </configuration>
  94.   
  95. 2)修改hdfs-site.xml文件
  96.  
  97. <?xml version="1.0" encoding="UTF-8"?>
  98. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  99. <!--
  100. Licensed under the Apache License, Version 2.0 (the "License");
  101. you may not use this file except in compliance with the License.
  102. You may obtain a copy of the License at
  103.  
  104. http://www.apache.org/licenses/LICENSE-2.0
  105.  
  106. Unless required by applicable law or agreed to in writing, software
  107. distributed under the License is distributed on an "AS IS" BASIS,
  108. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  109. See the License for the specific language governing permissions and
  110. limitations under the License. See accompanying LICENSE file.
  111. -->
  112.  
  113. <!-- Put site-specific property overrides in this file. -->
  114.  
  115. <configuration>
  116. <property>
  117. <name>dfs.nameservices</name>
  118. <value>mycluster</value>
  119. </property>
  120. <property>
  121. <name>dfs.ha.namenodes.mycluster</name>
  122. <value>nn1,nn2</value>
  123. </property>
  124. <property>
  125. <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  126. <value>hadoop1:9000</value>
  127. </property>
  128. <property>
  129. <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  130. <value>hadoop5:9000</value>
  131. </property>
  132. <property>
  133. <name>dfs.namenode.http-address.mycluster.nn1</name>
  134. <value>hadoop1:50070</value>
  135. </property>
  136. <property>
  137. <name>dfs.namenode.http-address.mycluster.nn2</name>
  138. <value>hadoop5:50070</value>
  139. </property>
  140. <property>
  141. <name>dfs.namenode.servicerpc-address.mycluster.nn1</name>
  142. <value>hadoop1:53310</value>
  143. </property>
  144. <property>
  145. <name>dfs.namenode.servicerpc-address.mycluster.nn2</name>
  146. <value>hadoop5:53310</value>
  147. </property>
  148. <property>
  149. <name>dfs.ha.automatic-failover.enabled</name>
  150. <value>true</value>
  151. </property>
  152. <property>
  153. <name>dfs.namenode.shared.edits.dir</name>
  154. <value>qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485;hadoop4:8485;hadoop5:8485/mycluster</value>
  155. </property>
  156. <property>
  157. <name>dfs.journalnode.edits.dir</name>
  158. <value>/home/grid/hadoop-2.6.0/journal/data</value>
  159. </property>
  160. <property>
  161. <name>dfs.client.failover.proxy.provider.mycluster</name>
  162. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  163. </property>
  164. <property>
  165. <name>dfs.replication</name>
  166. <value>3</value>
  167. </property>
  168. <property>
  169. <name>dfs.namenode.name.dir</name>
  170. <value>file:///home/grid/hadoop-2.6.0/dfs/name</value>
  171. </property>
  172. <property>
  173. <name>dfs.datanode.data.dir</name>
  174. <value>file:///home/grid/hadoop-2.6.0/dfs/data</value>
  175. </property>
  176. <property>
  177. <name>dfs.webhdfs.enabled</name>
  178. <value>true</value>
  179. </property>
  180. <property>
  181. <name>dfs.permissions.enable</name>
  182. <value>false</value>
  183. </property>
  184. <property>
  185. <name>dfs.permissions</name>
  186. <value>false</value>
  187. </property>
  188. <property>
  189. <name>dfs.image.transfer.bandwidthPerSec</name>
  190. <value>1048576</value>
  191. </property>
  192. <property>
  193. <name>dfs.ha.fencing.methods</name>
  194. <value>shell(/bin/true)</value>
  195. </property>
  196. <!--
  197. <property>
  198. <name>dfs.ha.fencing.ssh.private-key-files</name>
  199. <value>/home/grid/.ssh/id_rsa_nn</value>
  200. </property>
  201. -->
  202. </configuration>
  203.   
  204. 在这个文件中需要说明的有两点:
  205.  
  206.   第一、在官网上,我查看了hdfs-default.xml文件中,并没有参数dfs.ha.fencing.methods 这个参数,范围这个参数是在core-default.xml文件中有,那么按照官网上的意思是dfs.ha.fencing.methods 这个参数的配置是通过core-site.xml文件来设置的。但是实际上,这个参数是需要在hdfs-site.xml文件中设置的。否则就会出错,错误就是hadoop-daemon.sh start zkfc 启动DFSZKFailoverController进程时,无法启动。
  207.  
  208.   第二、官网上都是通过设置下面两个参数来实现,出现故障时,通过哪种方式登录到另一个namenode上进行接管工作。如果采用下面的参数的话,我设置集群就会报错。显示错误信息的是无法连接,也就是梁一个namenode连接被拒绝了。
  209.  
  210. <property>
  211. <name>dfs.ha.fencing.methods</name>
  212. <value>sshfence</value>
  213. </property>
  214.  
  215. <property>
  216. <name>dfs.ha.fencing.ssh.private-key-files</name>
  217. <value>/home/grid/.ssh/id_rsa_nn</value>
  218. </property>
  219. 所以,我换用了另一个值,如下:
  220. <property>
  221. <name>dfs.ha.fencing.methods</name>
  222. <value>shell(/bin/true)</value>
  223. </property>
  224.   此时针对HDFSHA的配置工作已经完成,对应的yarn-site.xmlmapred-site.xml可以采用 http://www.cnblogs.com/ljy2013/articles/4345172.html 一文中的方式来设置即可。在这里我还设置了ResourceManager进行了热备。于是我的文件如下:
  225. 3Yarn-site.xml文件的修改,该文件的配置对于不同的机器需要做出相应的修改工作。
  226. <?xml version="1.0"?>
  227. <!--
  228. Licensed under the Apache License, Version 2.0 (the "License");
  229. you may not use this file except in compliance with the License.
  230. You may obtain a copy of the License at
  231.  
  232. http://www.apache.org/licenses/LICENSE-2.0
  233.  
  234. Unless required by applicable law or agreed to in writing, software
  235. distributed under the License is distributed on an "AS IS" BASIS,
  236. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  237. See the License for the specific language governing permissions and
  238. limitations under the License. See accompanying LICENSE file.
  239. -->
  240. <configuration>
  241.  
  242. <!-- Site specific YARN configuration properties -->
  243.  
  244. <property>
  245. <name>yarn.resourcemanager.connect.retry-interval.ms</name>
  246. <value>60000</value>
  247. </property>
  248. <property>
  249. <name>yarn.resourcemanager.ha.enabled</name>
  250. <value>true</value>
  251. </property>
  252. <property>
  253. <name>yarn.resourcemanager.cluster-id</name>
  254. <value>rm-cluster</value>
  255. </property>
  256. <property>
  257. <name>yarn.resourcemanager.ha.rm-ids</name>
  258. <value>rm1,rm2</value>
  259. </property>
  260. <property>
  261. <name>yarn.resourcemanager.ha.id</name> //不同的节点只需要对这个参数做出相应的修改即可,也就是在热备的另一个节点上,该参数设置为rm2.即两个备份机器上的yarn-site.xml文件就是该参数不同。
  262. <value>rm1</value>
  263. </property>
  264. <property>
  265. <name>yarn.resourcemanager.hostname.rm1</name>
  266. <value>hadoop1</value>
  267. </property>
  268. <property>
  269. <name>yarn.resourcemanager.hostname.rm2</name>
  270. <value>hadoop5</value>
  271. </property>
  272. <property>
  273. <name>yarn.resourcemanager.recovery.enabled</name>
  274. <value>true</value>
  275. </property>
  276. <property>
  277. <name>yarn.resourcemanager.store.class</name>
  278. <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  279. </property>
  280. <property>
  281. <name>yarn.resourcemanager.zk-address</name>
  282. <value>hadoop1:2181,hadoop2:2181,hadoop3:2181,hadoop4:2181,hadoop5:2181</value>
  283. </property>
  284. <property>
  285. <name>yarn.resourcemanager.address.rm1</name>
  286. <value>${yarn.resourcemanager.hostname.rm1}:23140</value>
  287. </property>
  288. <property>
  289. <name>yarn.resourcemanager.scheduler.address.rm1</name>
  290. <value>${yarn.resourcemanager.hostname.rm1}:23130</value>
  291. </property>
  292. <property>
  293. <name>yarn.resourcemanager.webapp.https.address.rm1</name>
  294. <value>${yarn.resourcemanager.hostname.rm1}:23189</value>
  295. </property>
  296. <property>
  297. <name>yarn.resourcemanager.webapp.address.rm1</name>
  298. <value>${yarn.resourcemanager.hostname.rm1}:23188</value>
  299. </property>
  300. <property>
  301. <name>yarn.resourcemanager.resource-tracker.address.rm1</name>
  302. <value>${yarn.resourcemanager.hostname.rm1}:23125</value>
  303. </property>
  304. <property>
  305. <name>yarn.resourcemanager.admin.address.rm1</name>
  306. <value>${yarn.resourcemanager.hostname.rm1}:23141</value>
  307. </property>
  308.  
  309. <property>
  310. <name>yarn.resourcemanager.address.rm2</name>
  311. <value>${yarn.resourcemanager.hostname.rm2}:23140</value>
  312. </property>
  313. <property>
  314. <name>yarn.resourcemanager.scheduler.address.rm2</name>
  315. <value>${yarn.resourcemanager.hostname.rm2}:23130</value>
  316. </property>
  317. <property>
  318. <name>yarn.resourcemanager.webapp.https.address.rm2</name>
  319. <value>${yarn.resourcemanager.hostname.rm2}:23189</value>
  320. </property>
  321. <property>
  322. <name>yarn.resourcemanager.webapp.address.rm2</name>
  323. <value>${yarn.resourcemanager.hostname.rm2}:23188</value>
  324. </property>
  325. <property>
  326. <name>yarn.resourcemanager.resource-tracker.address.rm2</name>
  327. <value>${yarn.resourcemanager.hostname.rm2}:23125</value>
  328. </property>
  329. <property>
  330. <name>yarn.resourcemanager.admin.address.rm2</name>
  331. <value>${yarn.resourcemanager.hostname.rm2}:23141</value>
  332. </property>
  333. <property>
  334. <name>yarn.nodemanager.local-dirs</name>
  335. <value>/home/hadoop/logs/yarn_local</value>
  336. </property>
  337. <property>
  338. <name>yarn.nodemanager.log-dirs</name>
  339. <value>/home/hadoop/logs/yarn_log</value>
  340. </property>
  341. <property>
  342. <name>yarn.nodemanager.remote-app-log-dir</name>
  343. <value>/home/hadoop/logs/yarn_remotelog</value>
  344. </property>
  345. <property>
  346. <name>yarn.log-aggregation-enable</name>
  347. <value>true</value>
  348. </property>
  349. <property>
  350. <name>yarn.nodemanager.resource.memory-mb</name>
  351. <value>2048</value>
  352. </property>
  353. <property>
  354. <name>yarn.nodemanager.vmem-pmem-ratio</name>
  355. <value>4.2</value>
  356. </property>
  357. <property>
  358. <name>yarn.nodemanager.resource.cpu-vcores</name>
  359. <value>2</value>
  360. </property>
  361. <property>
  362. <name>yarn.nodemanager.aux-services</name>
  363. <value>mapreduce_shuffle</value>
  364. </property>
  365. <property>
  366. <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
  367. <value>org.apache.hadoop.mapred.ShuffleHandler</value>
  368. </property>
  369. </configuration>
  370. 4mapred-site.xml文件的修改
  371. <?xml version="1.0"?>
  372. <?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
  373. <!--
  374. Licensed under the Apache License, Version 2.0 (the "License");
  375. you may not use this file except in compliance with the License.
  376. You may obtain a copy of the License at
  377.  
  378. http://www.apache.org/licenses/LICENSE-2.0
  379.  
  380. Unless required by applicable law or agreed to in writing, software
  381. distributed under the License is distributed on an "AS IS" BASIS,
  382. WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  383. See the License for the specific language governing permissions and
  384. limitations under the License. See accompanying LICENSE file.
  385. -->
  386.  
  387. <!-- Put site-specific property overrides in this file. -->
  388.  
  389. <configuration>
  390. <property>
  391. <name>mapreduce.framework.name</name>
  392. <value>yarn</value>
  393. </property>
  394. <property>
  395. <name>mapreduce.jobhistory.address</name>
  396. <value>hadoop1:10020,hadoop5:10020</value>
  397. </property>
  398. <property>
  399. <name>mapreduce.jobhistory.webapp.address</name>
  400. <value>hadoop1:19888,hadoop5:19888</value>
  401. </property>
  402. <property>
  403. <name>yarn.app.mapreduce.am.staging-dir</name>
  404. <value>/tmp/hadoop-yarn/staging</value>
  405. </property>
  406. <property>
  407. <name>mapreduce.jobhistory.done-dir</name>
  408. <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
  409. </property>
  410. <property>
  411. <name>mapreduce.jobhistory.intermediate-done-dir</name>
  412. <value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
  413. </property>
  414. <property>
  415. <name>mapreduce.task.io.sort.factor</name>
  416. <value>100</value>
  417. </property>
  418. <property>
  419. <name>mapreduce.reduce.shuffle.parallelcopies</name>
  420. <value>10</value>
  421. </property>
  422. </configuration>
  423. Ok了!至此,所有的配置文件修改工作都完成了。下面就是介绍一下如何启动了
  424. 5、启动
  425.   1)首先启动zookeeper集群
  426.   由于我的节点是5个,所以我是将所有的节点都用来作为zookeeper来作为zookeeper的集群。因此在各节点上执行如下命令即可。
  427.         zkServer.sh start
  428.   所有的节点都启动zookeeper服务之后,zookeeper集群就已经启动了。
  429.   2)对zookeeper集群进行格式化
  430.     hdfs zkfc -formatZK
  431.   3)启动JournalNode进程,注意这个在第一次的时候必须要按照这个顺序执行。否则后面hdfs格式化不了。
  432.     同样,我也是将所有的节点都作为了journalnode的节点,于是在所有的节点上执行下面的命令来启动journalnode
  433.       hadoop-daemon.sh start journalnode
  434.   (4)格式化hadoop的集群,注意,第一次格式化必须首先启动上面的journalnode进程。并且,hadoop格式化的执行在某一个namenode节点上进行,在这里我选择的是hadoop1上执行。
  435.         hdfs namenode -format mycluster
  436.   5)启动第(4)步格式化之后的namenode
  437.       也就是说在第(4)步上面格式化后的namenode节点上启动namenode进程。
  438.         hadoop-daemon.sh start namenode
  439.   6)在另外一个namenode节点上按顺序执行如下两个命令来启动namenode进程。(本文中是hadoop5上执行)
  440.       hdfs namenode -bootstrapStandby
  441.       hadoop-daemon.sh start namenode
  442.   7)在一个namenode节点上执行一下两个命令启动所有的进程:
  443.       start-dfs.sh
  444.       start-yarn.sh
  445.   8)此时启动完之后,我们可以通过下面的命令来查看两个namenode的状态是否是standby或者是active
  446.       hdfs haadmin -getServiceState nn1
  447.       standby
  448.       hdfs haadmin -getServiceState nn2
  449.       active
  450.     这里的nn1nn2就是上面的配置文件中所设置的。nn1对应的就是hadoop1nn2对应的就是hadoop5
  451. 6、检验自动切换,通过kill activenamenode来验证namenode是否能自动切换。
  452.   1)通过上面步骤(8)查看到对应的那个namenode的状态是active,在该namenode节点上查看所有的进程。如下所示:
  453.  
  454.   2)在activenamenode节点上,执行 kill -9 7048 。实际上这一步可以直接将该节点重启也可以。
  455.   3)在standbynamenode节点上查看其状态的改变。
  456.      hdfs haadmin -getServiceState nn1
  457.    我们可以看到其对应的状态从standby的状态转变为active的状态了。
  458. 7、通过上传文件来检测HDFS的健康状态
  459.   执行 hadoop fs -put /hadoop-2.6.0/etc/hadoop/hdfs-site.xml /
  460.   然后可以通过web查看hdfs-site.xml
  461.  
  462. 8、测试在作业运行时,namendoe挂掉了是否能自动切换,并且还能正常执行作业?
  463. 准备一个2G的文件,我准备了一不电影zr.MP42.13G准备上传上HDFS中,在上传的过程中kill activenamenode 查看最终的运行结果。
  464.   通过在在standbynamenode节点上执行:hadoop fs -put zr.mp4 /
  465.   在它执行的过程中,在activenamenode节点上执行:kill -9 7048 (这里的7048就是namenode进程ID)。在执行过程中,我们可以看到如下图所示:
  466.  
  467. 通过上图可以看出,最终zr.mp4上传成功了。至此HDFSHA方案已经完成。完全可以投入使用。
  468.   

hadoop2.x通过Zookeeper来实现namenode的HA方案以及ResourceManager单点故障的解决方案的更多相关文章

  1. hadoop2.x配合ZooKeeper集群环境搭建

    前期准备就不详细说了,课堂上都介绍了1.修改Linux主机名2.修改IP3.修改主机名和IP的映射关系 ######注意######如果你们公司是租用的服务器或是使用的云主机(如华为用主机.阿里云主机 ...

  2. 基于zookeeper的高可用Hadoop HA集群安装

    (1)hadoop2.7.1源码编译 http://aperise.iteye.com/blog/2246856 (2)hadoop2.7.1安装准备 http://aperise.iteye.com ...

  3. hadoop在zookeeper上的高可用HA

    (参考文章:https://www.linuxprobe.com/hadoop-high-available.html) 一.技术背景 影响HDFS集群不可用主要包括以下两种情况:一是NameNode ...

  4. NameNode的HA

    HDFS中的NameNode的HA怎么实现?(一言以蔽之) 在Hadoop集群中配置并启动两个NameNode进程,一个作为Active节点对外提供服务,另一个作为Standby的节点,两个NameN ...

  5. 通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置

    通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置 配置H ...

  6. ActiveMQ笔记(2):基于ZooKeeper的HA方案

    activemq官网给出了3种master/slave的HA方案,详见:http://activemq.apache.org/masterslave.html,基于共享文件目录,db,zookeepe ...

  7. NameNode配置HA后及其反过程Hive路径不正确的问题解决

    在CDH5.7下,配置了NameNode的HA后,Hive无正常查询数据了,但是其他的组件HDFS , HBase ,Spark都正常的.Hive新建表出现如下异常: CREATE TABLE `x_ ...

  8. 使用Cloudera Manager搭建zookeeper集群及HDFS HA实战篇

    使用Cloudera Manager搭建zookeeper集群及HDFS HA实战篇 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.使用Cloudera Manager搭建zo ...

  9. hadoop NameNode 手动HA

    官网配置地址:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabilityWit ...

随机推荐

  1. 集成代码编辑器ACE的经验

    ACE是最流行的在线代码编辑器之一,在CanTK的集成开发环境GameBuilder里也使用了ACE.ACE的功能非常强大,但是由于使用方法不当,大家反映GameBuilder的代码编辑器不好用.最近 ...

  2. 设置DIV最小高度以及高度自适应随着内容的变化而变化

    <!--退租账单--> <div id="bilsli" onmouseover="showBill(this)"> #bilsli{ ...

  3. 浅谈线程池(中):独立线程池的作用及IO线程池

    原文地址:http://blog.zhaojie.me/2009/07/thread-pool-2-dedicate-pool-and-io-pool.html 在上一篇文章中,我们简单讨论了线程池的 ...

  4. [bootstrap] 栅格系统和布局

    1.简介 栅格系统(grid systems),也称为“网格系统”,运用固定的格子设计版面布局,风格工整简洁.是从平面栅格系统演变而来. Bootstrap建立在12列栅格系统.布局.组件之上.以规则 ...

  5. struts2在pom.xml中的配置

    <dependencies> <dependency> <groupId>org.apache.struts</groupId> <artifac ...

  6. javascript 函数调用方式

    1. 通过函数名直接调用 函数名(实际参数): 2. 通过指向函数的变量去调用 var 变量=函数名: 变量(实际参数):

  7. content.boundingRectWithSize计算出来的高度不准

      计算出来的高度会少一行的高度,最后一行会显示不全.减掉padding会解决这个问题.   let padding = self.reviewText.textContainer.lineFragm ...

  8. 初始maven

    Apache Maven 是一个软件项目管理和综合工具.基于项目对象模型 (POM) 的概念,Maven 可以管理一个项目的生成. 报告和文档从一块中央的信息.在JavaEE中,我们可以使用Maven ...

  9. SAP smartforms之Zebra print control language

    因为在做个小标签的时候需要将部分字符旋转180度,在scn上找了很久也发布了自己的提问,不过最终的结果却不尽人意.Rotated text in smartforms need use the PCL ...

  10. Android Bundle、Handler和Message类介绍

    Bundle是一个载体,可以存放基本数据类型.对象等内容,相当于一辆汽车,可以装载很多东西,然后运到需要的地方,例如: Bundle mBundle=new Bundle(); mBundle.put ...