HDFS只是Hadoop最基本的一个服务,很多其他服务,都是基于HDFS展开的。所以部署一个HDFS集群,是很核心的一个动作,也是大数据平台的开始。
安装Hadoop集群,首先需要有Zookeeper才可以完成安装。如果没有Zookeeper,请先部署一套Zookeeper。另外,JDK以及物理主机的一些设置等。请参考:
<a href="http://hsbxxl.blog.51cto.com/181620/1971241" target="_blank"></a>
<a href="http://hsbxxl.blog.51cto.com/181620/1971241" target="_blank">Hadoop集群(一) Zookeeper搭建</a>
<a href="http://hsbxxl.blog.51cto.com/181620/1971501" target="_blank">Hadoop集群(三) Hbase搭建</a>
<a href="http://hsbxxl.blog.51cto.com/181620/1976472" target="_blank">Hadoop集群(四) Hadoop升级</a>
下面开始HDFS的安装
HDFS主机分配
1
2
3
<code>192.168.67.101 c6701 </code><code>--Namenode+datanode</code>
<code>192.168.67.102 c6702 </code><code>--datanode</code>
<code>192.168.67.103 c6703 </code><code>--datanode</code>
1. 安装HDFS,解压hadoop-2.6.0-EDH-0u2.tar.gz
我同时下载2.6和2.7版本的软件,先安装2.6,然后在执行2.6到2.7的升级步骤
4
5
6
7
8
9
10
11
12
13
14
15
16
<code>useradd hdfs</code>
<code>echo </code><code>"hdfs:hdfs"</code> <code>| chpasswd</code>
<code>su - hdfs</code>
<code>cd /tmp/software</code>
<code>tar -zxvf hadoop-2.6.0-EDH-0u2.tar.gz -C /home/hdfs/</code>
<code>mkdir -p /data/hadoop/</code><code>temp</code>
<code>mkdir -p /data/hadoop/journal </code>
<code>mkdir -p /data/hadoop/hdfs/</code><code>name</code>
<code>mkdir -p /data/hadoop/hdfs/data</code>
<code>chown -R hdfs:hdfs /data/hadoop</code>
<code>chown -R hdfs:hdfs /data/hadoop/</code><code>temp</code>
<code>chown -R hdfs:hdfs /data/hadoop/journal </code>
<code>chown -R hdfs:hdfs /data/hadoop/hdfs/</code><code>name</code>
<code>chown -R hdfs:hdfs /data/hadoop/hdfs/data </code>
<code>$ pwd</code>
<code>/home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop</code>
2. 修改core-site.xml对应的参数
17
18
19
20
21
22
23
<code>$ cat core-site.xml</code>
<code><configuration></code>
<code> </code><code><!</code><code>-- 指定hdfs的nameservice为ns --></code>
<code> </code><code><property> </code>
<code> </code><code><</code><code>name</code><code>>fs.defaultFS</</code><code>name</code><code>> </code>
<code> </code><code><value>hdfs://ns</value> </code>
<code> </code><code></property></code>
<code> </code><code><!</code><code>--指定hadoop数据临时存放目录--></code>
<code> </code><code><property></code>
<code> </code><code><</code><code>name</code><code>>hadoop.tmp.dir</</code><code>name</code><code>></code>
<code> </code><code><value>/data/hadoop/</code><code>temp</code><code></value></code>
<code> </code><code></property> </code>
<code> </code>
<code> </code><code><</code><code>name</code><code>>io.file.buffer.</code><code>size</code><code></</code><code>name</code><code>> </code>
<code> </code><code><value>4096</value> </code>
<code> </code><code><!</code><code>--指定zookeeper地址--></code>
<code> </code><code><</code><code>name</code><code>>ha.zookeeper.quorum</</code><code>name</code><code>></code>
<code> </code><code><value>c6701:2181,c6702:2181,c6703:2181</value></code>
<code> </code><code></configuration></code>
3. 修改hdfs-site.xml对应的参数
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
<code>cat hdfs-site.xml</code>
<code> </code><code><!</code><code>--指定hdfs的nameservice为ns,需要和core-site.xml中的保持一致,并且ns如果改,整个文件中,全部的ns要都修改,保持统一 --> </code>
<code> </code><code><property> </code>
<code> </code><code><</code><code>name</code><code>>dfs.nameservices</</code><code>name</code><code>> </code>
<code> </code><code><value>ns</value> </code>
<code> </code><code></property> </code>
<code> </code><code><!</code><code>-- ns下面有两个NameNode,分别是nn1,nn2 --></code>
<code> </code><code><property></code>
<code> </code><code><</code><code>name</code><code>>dfs.ha.namenodes.ns</</code><code>name</code><code>></code>
<code> </code><code><value>nn1,nn2</value></code>
<code> </code><code></property></code>
<code> </code><code><!</code><code>-- nn1的RPC通信地址 --></code>
<code> </code><code><</code><code>name</code><code>>dfs.namenode.rpc-address.ns.nn1</</code><code>name</code><code>></code>
<code> </code><code><value>c6701:9000</value></code>
<code> </code><code><!</code><code>-- nn1的http通信地址 --></code>
<code> </code><code><</code><code>name</code><code>>dfs.namenode.http-address.ns.nn1</</code><code>name</code><code>></code>
<code> </code><code><value>c6701:50070</value></code>
<code> </code><code><!</code><code>-- nn2的RPC通信地址 --></code>
<code> </code><code><</code><code>name</code><code>>dfs.namenode.rpc-address.ns.nn2</</code><code>name</code><code>></code>
<code> </code><code><value>c6702:9000</value></code>
<code> </code><code><!</code><code>-- nn2的http通信地址 --></code>
<code> </code><code><</code><code>name</code><code>>dfs.namenode.http-address.ns.nn2</</code><code>name</code><code>></code>
<code> </code><code><value>c6702:50070</value></code>
<code> </code><code><!</code><code>-- 指定NameNode的元数据在JournalNode上的存放位置 --></code>
<code> </code><code><</code><code>name</code><code>>dfs.namenode.shared.edits.dir</</code><code>name</code><code>></code>
<code> </code><code><value>qjournal://c6701:8485;c6702:8485;c6703:8485/ns</value></code>
<code> </code><code><!</code><code>-- 指定JournalNode在本地磁盘存放数据的位置 --></code>
<code> </code><code><</code><code>name</code><code>>dfs.journalnode.edits.dir</</code><code>name</code><code>></code>
<code> </code><code><value>/data/hadoop/journal</value></code>
<code> </code><code><!</code><code>-- 开启NameNode故障时自动切换 --></code>
<code> </code><code><</code><code>name</code><code>>dfs.ha.automatic-failover.enabled</</code><code>name</code><code>></code>
<code> </code><code><value></code><code>true</code><code></value></code>
<code> </code><code><!</code><code>-- 配置失败自动切换实现方式 --></code>
<code> </code><code><</code><code>name</code><code>>dfs.client.failover.proxy.provider.ns</</code><code>name</code><code>></code>
<code> </code><code><value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value></code>
<code> </code><code><!</code><code>-- 配置隔离机制 --></code>
<code> </code><code><</code><code>name</code><code>>dfs.ha.fencing.methods</</code><code>name</code><code>></code>
<code> </code><code><value>sshfence</value></code>
<code> </code><code><!</code><code>-- 使用隔离机制时需要ssh免登陆 --></code>
<code> </code><code><</code><code>name</code><code>>dfs.ha.fencing.ssh.private-</code><code>key</code><code>-files</</code><code>name</code><code>></code>
<code> </code><code><value>/home/hdfs/.ssh/id_rsa</value></code>
<code> </code>
<code> </code><code><</code><code>name</code><code>>dfs.namenode.</code><code>name</code><code>.dir</</code><code>name</code><code>> </code>
<code> </code><code><value>/data/hadoop/hdfs/</code><code>name</code><code></value> </code>
<code> </code><code></property> </code>
<code> </code>
<code> </code><code><</code><code>name</code><code>>dfs.datanode.data.dir</</code><code>name</code><code>> </code>
<code> </code><code><value>/data/hadoop/hdfs/data</value> </code>
<code> </code><code><</code><code>name</code><code>>dfs.replication</</code><code>name</code><code>> </code>
<code> </code><code><value>2</value> </code>
<code> </code><code><!</code><code>-- 在NN和DN上开启WebHDFS (REST API)功能,不是必须 --> </code>
<code> </code><code><</code><code>name</code><code>>dfs.webhdfs.enabled</</code><code>name</code><code>> </code>
<code> </code><code><value></code><code>true</code><code></value> </code>
<code></configuration></code>
4. 添加slaves文件
<code>$ more slaves</code>
<code>c6701</code>
<code>c6702</code>
<code>c6703</code>
--- 安装C6702的hdfs---
5. 创建c6702的用户,并为hdfs用户ssh免密
<code>ssh c6702 </code><code>"useradd hdfs"</code>
<code>ssh c6702 </code><code>"echo "</code><code>hdfs:hdfs</code><code>" | chpasswd"</code>
<code>ssh-copy-id hdfs@c6702</code>
6. 拷贝软件
<code>scp -r /tmp/software/hadoop-2.6.0-EDH-0u2.tar.gz root@c6702:/tmp/software/.</code>
<code>ssh c6702 </code><code>"chmod 777 /tmp/software/*"</code>
7. 创建目录,解压软件
<code>ssh hdfs@c6702 </code><code>"mkdir hdfs"</code>
<code>ssh hdfs@c6702 </code><code>"tar -zxvf /tmp/software/hadoop-2.6.0-EDH-0u2.tar.gz -C /home/hdfs"</code>
<code>ssh hdfs@c6702 </code><code>"ls -al hdfs"</code>
<code>ssh hdfs@c6702 </code><code>"ls -al hdfs/hadoop*"</code>
复制配置文件
<code>ssh hdfs@c6702 </code><code>"rm -rf /home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/core-site.xml"</code>
<code>ssh hdfs@c6702 </code><code>"rm -rf /home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/hdfs-site.xml"</code>
<code>scp -r /home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/core-site.xml hdfs@c6702:/home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/core-site.xml</code>
<code>scp -r /home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/hdfs-site.xml hdfs@c6702:/home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/hdfs-site.xml</code>
<code>scp -r /home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/slaves hdfs@c6702:/home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/slaves</code>
创建hdfs需要的目录
<code>ssh root@c6702 </code><code>"mkdir -p /data/hadoop"</code>
<code>ssh root@c6702 </code><code>" chown -R hdfs:hdfs /data/hadoop"</code>
<code>ssh hdfs@c6702 </code><code>"mkdir -p /data/hadoop/temp"</code>
<code>ssh hdfs@c6702 </code><code>"mkdir -p /data/hadoop/journal"</code>
<code>ssh hdfs@c6702 </code><code>"mkdir -p /data/hadoop/hdfs/name"</code>
<code>ssh hdfs@c6702 </code><code>"mkdir -p /data/hadoop/hdfs/data"</code>
--- 安装C6703的hdfs---
8. 创建c6703的用户,并为hdfs用户ssh免密
<code>ssh c6703 </code><code>"useradd hdfs"</code>
<code>ssh c6703 </code><code>"echo "</code><code>hdfs:hdfs</code><code>" | chpasswd"</code>
<code>ssh-copy-id hdfs@c6703</code>
9. 拷贝软件
<code>scp -r /tmp/software/hadoop-2.6.0-EDH-0u2.tar.gz root@c6703:/tmp/software/.</code>
<code>ssh c6703 </code><code>"chmod 777 /tmp/software/*"</code>
<code>10. 创建目录,解压软件</code>
<code>ssh hdfs@c6703 </code><code>"mkdir hdfs"</code>
<code>ssh hdfs@c6703 </code><code>"tar -zxvf /tmp/software/hadoop-2.6.0-EDH-0u2.tar.gz -C /home/hdfs"</code>
<code>ssh hdfs@c6703 </code><code>"ls -al hdfs"</code>
<code>ssh hdfs@c6703 </code><code>"ls -al hdfs/hadoop*"</code>
<code>ssh hdfs@c6703 </code><code>"rm -rf /home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/core-site.xml"</code>
<code>ssh hdfs@c6703 </code><code>"rm -rf /home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/hdfs-site.xml"</code>
<code>scp -r /home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/core-site.xml hdfs@c6703:/home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/core-site.xml</code>
<code>scp -r /home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/hdfs-site.xml hdfs@c6703:/home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/hdfs-site.xml</code>
<code>scp -r /home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/slaves hdfs@c6703:/home/hdfs/hadoop-2.6.0-EDH-0u2/etc/hadoop/slaves</code>
<code>ssh root@c6703 </code><code>"mkdir -p /data/hadoop"</code>
<code>ssh root@c6703 </code><code>" chown -R hdfs:hdfs /data/hadoop"</code>
<code>ssh hdfs@c6703 </code><code>"mkdir -p /data/hadoop/temp"</code>
<code>ssh hdfs@c6703 </code><code>"mkdir -p /data/hadoop/journal"</code>
<code>ssh hdfs@c6703 </code><code>"mkdir -p /data/hadoop/hdfs/name"</code>
<code>ssh hdfs@c6703 </code><code>"mkdir -p /data/hadoop/hdfs/data"</code>
11. 启动HDFS,先启动三个节点的journalnode
/home/hdfs/hadoop-2.6.0-EDH-0u2/sbin/hadoop-daemon.sh start journalnode
检查状态
<code>$ jps</code>
<code>3958 Jps</code>
<code>3868 JournalNode</code>
12. 然后启动namenode,首次启动namenode之前,先在其中一个节点(主节点)format namenode信息,信息会存在于dfs.namenode.name.dir指定的路径中
<code> </code><code><</code><code>name</code><code>>dfs.namenode.</code><code>name</code><code>.dir</</code><code>name</code><code>> </code>
<code> </code><code><value>/data/hadoop/hdfs/</code><code>name</code><code></value></code>
<code>$ ./hdfs namenode -format</code>
<code>17/09/26 07:52:17 INFO namenode.NameNode: STARTUP_MSG:</code>
<code>/************************************************************</code>
<code>STARTUP_MSG: Starting NameNode</code>
<code>STARTUP_MSG: host = c6701.python279.org/192.168.67.101</code>
<code>STARTUP_MSG: args = [-format]</code>
<code>STARTUP_MSG: version = 2.6.0-EDH-0u2</code>
<code>STARTUP_MSG: classpath = /home/hdfs/hadoop-2.6.0-EDHxxxxxxxxxx</code>
<code>STARTUP_MSG: build = http://gitlab-xxxxx</code>
<code>STARTUP_MSG: java = 1.8.0_144</code>
<code>************************************************************/</code>
<code>17/09/26 07:52:17 INFO namenode.NameNode: registered UNIX signal handlers </code><code>for</code> <code>[TERM, HUP, </code><code>INT</code><code>]</code>
<code>17/09/26 07:52:17 INFO namenode.NameNode: createNameNode [-format]</code>
<code>17/09/26 07:52:18 WARN common.Util: Path /data/hadoop/hdfs/</code><code>name</code> <code>should be specified </code><code>as</code> <code>a URI </code><code>in</code> <code>configuration files. Please </code><code>update</code> <code>hdfs configuration.</code>
<code>Formatting using clusterid: CID-b2f01411-862f-44b2-a6dc-7d17bd48d522</code>
<code>17/09/26 07:52:18 INFO namenode.FSNamesystem: </code><code>No</code> <code>KeyProvider found.</code>
<code>17/09/26 07:52:18 INFO namenode.FSNamesystem: fsLock </code><code>is</code> <code>fair:</code><code>true</code>
<code>17/09/26 07:52:18 INFO blockmanagement.DatanodeManager: dfs.block.invalidate.limit=1000</code>
<code>17/09/26 07:52:18 INFO blockmanagement.DatanodeManager: dfs.namenode.datanode.registration.ip-hostname-</code><code>check</code><code>=</code><code>true</code>
<code>17/09/26 07:52:18 INFO blockmanagement.BlockManager: dfs.namenode.startup.delay.block.deletion.sec </code><code>is</code> <code>set</code> <code>to</code> <code>000:00:00:00.000</code>
<code>17/09/26 07:52:18 INFO blockmanagement.BlockManager: The block deletion will start around 2017 Sep 26 07:52:18</code>
<code>17/09/26 07:52:18 INFO util.GSet: Computing capacity </code><code>for</code> <code>map BlocksMap</code>
<code>17/09/26 07:52:18 INFO util.GSet: VM type = 64-</code><code>bit</code>
<code>17/09/26 07:52:18 INFO util.GSet: 2.0% </code><code>max</code> <code>memory 966.7 MB = 19.3 MB</code>
<code>17/09/26 07:52:18 INFO util.GSet: capacity = 2^21 = 2097152 entries</code>
<code>17/09/26 07:52:18 INFO blockmanagement.BlockManager: dfs.block.access.token.enable=</code><code>false</code>
<code>17/09/26 07:52:18 INFO blockmanagement.BlockManager: defaultReplication = 2</code>
<code>17/09/26 07:52:18 INFO blockmanagement.BlockManager: maxReplication = 512</code>
<code>17/09/26 07:52:18 INFO blockmanagement.BlockManager: minReplication = 1</code>
<code>17/09/26 07:52:18 INFO blockmanagement.BlockManager: maxReplicationStreams = 2</code>
<code>17/09/26 07:52:18 INFO blockmanagement.BlockManager: shouldCheckForEnoughRacks = </code><code>false</code>
<code>17/09/26 07:52:18 INFO blockmanagement.BlockManager: replicationRecheckInterval = 3000</code>
<code>17/09/26 07:52:18 INFO blockmanagement.BlockManager: encryptDataTransfer = </code><code>false</code>
<code>17/09/26 07:52:18 INFO blockmanagement.BlockManager: maxNumBlocksToLog = 1000</code>
<code>17/09/26 07:52:18 INFO namenode.FSNamesystem: fsOwner = hdfs (auth:SIMPLE)</code>
<code>17/09/26 07:52:18 INFO namenode.FSNamesystem: supergroup = supergroup</code>
<code>17/09/26 07:52:18 INFO namenode.FSNamesystem: isPermissionEnabled = </code><code>true</code>
<code>17/09/26 07:52:18 INFO namenode.FSNamesystem: Determined nameservice ID: ns</code>
<code>17/09/26 07:52:18 INFO namenode.FSNamesystem: HA Enabled: </code><code>true</code>
<code>17/09/26 07:52:18 INFO namenode.FSNamesystem: Append Enabled: </code><code>true</code>
<code>17/09/26 07:52:18 INFO util.GSet: Computing capacity </code><code>for</code> <code>map INodeMap</code>
<code>17/09/26 07:52:18 INFO util.GSet: 1.0% </code><code>max</code> <code>memory 966.7 MB = 9.7 MB</code>
<code>17/09/26 07:52:18 INFO util.GSet: capacity = 2^20 = 1048576 entries</code>
<code>17/09/26 07:52:18 INFO namenode.NameNode: Caching file names occuring more than 10 times</code>
<code>17/09/26 07:52:18 INFO util.GSet: Computing capacity </code><code>for</code> <code>map cachedBlocks</code>
<code>17/09/26 07:52:18 INFO util.GSet: 0.25% </code><code>max</code> <code>memory 966.7 MB = 2.4 MB</code>
<code>17/09/26 07:52:18 INFO util.GSet: capacity = 2^18 = 262144 entries</code>
<code>17/09/26 07:52:18 INFO namenode.FSNamesystem: dfs.namenode.safemode.threshold-pct = 0.9990000128746033</code>
<code>17/09/26 07:52:18 INFO namenode.FSNamesystem: dfs.namenode.safemode.</code><code>min</code><code>.datanodes = 0</code>
<code>17/09/26 07:52:18 INFO namenode.FSNamesystem: dfs.namenode.safemode.extension = 30000</code>
<code>17/09/26 07:52:18 INFO namenode.FSNamesystem: Retry cache </code><code>on</code> <code>namenode </code><code>is</code> <code>enabled</code>
<code>17/09/26 07:52:18 INFO namenode.FSNamesystem: Retry cache will use 0.03 </code><code>of</code> <code>total heap </code><code>and</code> <code>retry cache entry expiry </code><code>time</code> <code>is</code> <code>600000 millis</code>
<code>17/09/26 07:52:18 INFO util.GSet: Computing capacity </code><code>for</code> <code>map NameNodeRetryCache</code>
<code>17/09/26 07:52:18 INFO util.GSet: 0.029999999329447746% </code><code>max</code> <code>memory 966.7 MB = 297.0 KB</code>
<code>17/09/26 07:52:18 INFO util.GSet: capacity = 2^15 = 32768 entries</code>
<code>17/09/26 07:52:18 INFO namenode.NNConf: ACLs enabled? </code><code>false</code>
<code>17/09/26 07:52:18 INFO namenode.NNConf: XAttrs enabled? </code><code>true</code>
<code>17/09/26 07:52:18 INFO namenode.NNConf: Maximum </code><code>size</code> <code>of</code> <code>an xattr: 16384</code>
<code>17/09/26 07:52:19 INFO namenode.FSImage: Allocated new BlockPoolId: BP-144216011-192.168.67.101-1506412339757</code>
<code>17/09/26 07:52:19 INFO common.Storage: Storage directory /data/hadoop/hdfs/</code><code>name</code> <code>has been successfully formatted.</code>
<code>17/09/26 07:52:20 INFO namenode.NNStorageRetentionManager: Going </code><code>to</code> <code>retain 1 images </code><code>with</code> <code>txid >= 0</code>
<code>17/09/26 07:52:20 INFO util.ExitUtil: Exiting </code><code>with</code> <code>status 0</code>
<code>17/09/26 07:52:20 INFO namenode.NameNode: SHUTDOWN_MSG:</code>
<code>SHUTDOWN_MSG: Shutting down NameNode </code><code>at</code> <code>c6701.python279.org/192.168.67.101</code>
13. standby namenode需要先执行bootstrapstandby,输出如下
<code>[hdfs@c6702 sbin]$ ../bin/hdfs namenode -bootstrapstandby</code>
<code>17/09/26 09:44:58 INFO namenode.NameNode: STARTUP_MSG:</code>
<code>STARTUP_MSG: host = c6702.python279.org/192.168.67.102</code>
<code>STARTUP_MSG: args = [-bootstrapstandby]</code>
<code>STARTUP_MSG: classpath = /home/hdfs/haxxx</code>
<code>STARTUP_MSG: build = http://gitlab-xxxx</code>
<code>17/09/26 09:44:58 INFO namenode.NameNode: registered UNIX signal handlers </code><code>for</code> <code>[TERM, HUP, </code><code>INT</code><code>]</code>
<code>17/09/26 09:44:58 INFO namenode.NameNode: createNameNode [-bootstrapstandby]</code>
<code>17/09/26 09:44:59 WARN common.Util: Path /data/hadoop/hdfs/</code><code>name</code> <code>should be specified </code><code>as</code> <code>a URI </code><code>in</code> <code>configuration files. Please </code><code>update</code> <code>hdfs configuration.</code>
<code>=====================================================</code>
<code>About </code><code>to</code> <code>bootstrap Standby ID nn2 </code><code>from</code><code>:</code>
<code> </code><code>Nameservice ID: ns</code>
<code> </code><code>Other Namenode ID: nn1</code>
<code> </code><code>Other NN</code><code>'s HTTP address: http://c6701:50070</code>
<code> </code><code>Other NN'</code><code>s IPC address: c6701/192.168.67.101:9000</code>
<code> </code><code>Namespace ID: 793662207</code>
<code> </code><code>Block pool ID: BP-144216011-192.168.67.101-1506412339757</code>
<code> </code><code>Cluster ID: CID-b2f01411-862f-44b2-a6dc-7d17bd48d522</code>
<code> </code><code>Layout version: -60</code>
<code>Re-format filesystem </code><code>in</code> <code>Storage Directory /data/hadoop/hdfs/</code><code>name</code> <code>? (Y </code><code>or</code> <code>N) y</code>
<code>17/09/26 09:45:16 INFO common.Storage: Storage directory /data/hadoop/hdfs/</code><code>name</code> <code>has been successfully formatted.</code>
<code>17/09/26 09:45:16 WARN common.Util: Path /data/hadoop/hdfs/</code><code>name</code> <code>should be specified </code><code>as</code> <code>a URI </code><code>in</code> <code>configuration files. Please </code><code>update</code> <code>hdfs configuration.</code>
<code>17/09/26 09:45:17 INFO namenode.TransferFsImage: Opening </code><code>connection</code> <code>to</code> <code>http://c6701:50070/imagetransfer?getimage=1&txid=0&storageInfo=-60:793662207:0:CID-b2f01411-862f-44b2-a6dc-7d17bd48d522</code>
<code>17/09/26 09:45:17 INFO namenode.TransferFsImage: Image Transfer timeout configured </code><code>to</code> <code>60000 milliseconds</code>
<code>17/09/26 09:45:17 INFO namenode.TransferFsImage: Transfer took 0.01s </code><code>at</code> <code>0.00 KB/s</code>
<code>17/09/26 09:45:17 INFO namenode.TransferFsImage: Downloaded file fsimage.ckpt_0000000000000000000 </code><code>size</code> <code>351 bytes.</code>
<code>17/09/26 09:45:17 INFO util.ExitUtil: Exiting </code><code>with</code> <code>status 0</code>
<code>17/09/26 09:45:17 INFO namenode.NameNode: SHUTDOWN_MSG:</code>
<code>SHUTDOWN_MSG: Shutting down NameNode </code><code>at</code> <code>c6702.python279.org/192.168.67.102</code>
14. 检查状态,namenode还没有启动
<code>[hdfs@c6702 sbin]$ jps</code>
<code>4539 Jps</code>
15. 启动standby namenode,命令和master启动的方式相同
<code>[hdfs@c6702 sbin]$ ./hadoop-daemon.sh start namenode</code>
<code>starting namenode, logging </code><code>to</code> <code>/home/hdfs/hadoop-2.6.0-EDH-0u2/logs/hadoop-hdfs-namenode-c6702.python279.org.</code><code>out</code>
16. 再次检查,namenode已经启动
<code>4640 Jps</code>
<code>4570 NameNode</code>
17. 格式化zkfc,让在zookeeper中生成ha节点,在master上执行如下命令,完成格式化
<code>[hdfs@c6701 bin]$ ./hdfs zkfc -formatZK</code>
<code>17/09/26 09:59:20 INFO tools.DFSZKFailoverController: Failover controller configured </code><code>for</code> <code>NameNode NameNode </code><code>at</code> <code>c6701/192.168.67.101:9000</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:zookeeper.version=3.4.6-1569965, built </code><code>on</code> <code>02/20/2014 09:09 GMT</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:host.</code><code>name</code><code>=c6701.python279.org</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:java.version=1.8.0_144</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:java.vendor=Oracle Corporation</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:java.home=/usr/</code><code>local</code><code>/jdk1.8.0_144/jre</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:java.class.path=/home/hdfs/hadoop-2.6.0-EDH-0u2/exxxx</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:java.library.path=/home/hdfs/hadoop-2.6.0-EDH-0u2/lib/native</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:java.io.tmpdir=/tmp</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:java.compiler=<NA></code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:os.</code><code>name</code><code>=Linux</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:os.arch=amd64</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:os.version=2.6.32-573.el6.x86_64</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:</code><code>user</code><code>.</code><code>name</code><code>=hdfs</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:</code><code>user</code><code>.home=/home/hdfs</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Client environment:</code><code>user</code><code>.dir=/home/hdfs/hadoop-2.6.0-EDH-0u2/bin</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Initiating client </code><code>connection</code><code>, connectString=c6701:2181,c6702:2181,c6703:2181 sessionTimeout=5000 watcher=org.apache.hadoop.ha.ActiveStandbyElector$WatcherWithClientRef@20deea7f</code>
<code>17/09/26 09:59:20 INFO zookeeper.ClientCnxn: Opening socket </code><code>connection</code> <code>to</code> <code>server c6703.python279.org/192.168.67.103:2181. Will </code><code>not</code> <code>attempt </code><code>to</code> <code>authenticate using SASL (unknown error)</code>
<code>17/09/26 09:59:20 INFO zookeeper.ClientCnxn: Socket </code><code>connection</code> <code>established </code><code>to</code> <code>c6703.python279.org/192.168.67.103:2181, initiating session</code>
<code>17/09/26 09:59:20 INFO zookeeper.ClientCnxn: Session establishment complete </code><code>on</code> <code>server c6703.python279.org/192.168.67.103:2181, sessionid = 0x35ebc5163710000, negotiated timeout = 5000</code>
<code>17/09/26 09:59:20 INFO ha.ActiveStandbyElector: Session connected.</code>
<code>17/09/26 09:59:20 INFO ha.ActiveStandbyElector: Successfully created /hadoop-ha/ns </code><code>in</code> <code>ZK.</code>
<code>17/09/26 09:59:20 INFO zookeeper.ZooKeeper: Session: 0x35ebc5163710000 closed</code>
<code>17/09/26 09:59:20 INFO zookeeper.ClientCnxn: EventThread shut down</code>
18. 格式化完成的检查
格式成功后,查看zookeeper中可以看到 <<<<<<<<<<<命令没确认
<code>[zk: localhost:2181(CONNECTED) 1] ls /hadoop-ha</code>
19. 启动zkfc,这个就是为namenode使用的
<code>./hadoop-daemon.sh start zkfc</code>
<code>starting zkfc, logging </code><code>to</code> <code>/home/hdfs/hadoop-2.6.0-EDH-0u2/logs/hadoop-hdfs-zkfc-c6701.python279.org.</code><code>out</code>
<code>4272 DataNode</code>
<code>4402 JournalNode</code>
<code>6339 Jps</code>
<code>6277 DFSZKFailoverController</code>
<code>4952 NameNode</code>
20. 另一个节点启动zkfc,
<code>ssh hdfs@c6702 </code>
<code>/home/hdfs/hadoop-2.6.0-EDH-0u2/sbin/hadoop-daemon.sh start zkfc</code>
<code>4981 Jps</code>
<code>4935 DFSZKFailoverController</code>
21. 注意:进行初始化的时候,必须保证zk集群已经启动了。
1、在ZK中创建znode来存储automatic Failover的数据,任选一个NN执行完成即可:
sh bin/hdfs zkfc -formatZK
2、启动zkfs,在所有的NN节点中执行以下命令:
sh sbin/hadoop-daemon.sh start zkfc
22. 启动datanode
最后启动集群
<code> </code><code>sh sbin/start-dfs.sh</code>
HDFS安装过程中的重点,最后在软件启动过程中,一些初始化操作,很重要。
1. 启动全部的journalnode
2. 在namenode1上执行, hdfs namenode -format
3. 在namenode1上执行, 启动namenode1,命令hadoop-daemon.sh start namenode
4. 在namenode2上执行, hdfs namenode -bootstrapstandby
5. 在namenode1上执行,格式化zkfc,在zookeeper中生成HA节点, hdfs zkfc -formatZK
6. 启动zkfc,hadoop-daemon.sh start zkfc。 有namenode运行的节点,都要启动ZKFC
7. 启动 datanode
HDFS只是Hadoop最基本的一个模块,这里已经安装完成,可以为后面的Hbase提供服务了。
本文转自 hsbxxl 51CTO博客,原文链接:http://blog.51cto.com/hsbxxl/1971475,如需转载请自行联系原作者