一、系统架构
我们假设只有三台服务器,并且要在三台服务器上做高可用。
服务 | 服务器1 | 服务器2 | 服务器3 |
---|---|---|---|
NameNode | √ | Δ | |
DataNode | √ | √ | √ |
JournalNode | √ | √ | √ |
ResourceManager | √ | ||
NodeManager | √ | √ | √ |
Zookeeper | √ | √ | √ |
ZKFC | √ | √ | √ |
HMaster | √ | Δ | |
HRegionServer | √ | √ | √ |
二、环境配置
我们需要把系统要安装之前的东西配置一下。
2.1、主机命名
我们分别把三台服务器命名为hadoop1, hadoop2, hadoop3。并在hosts中加上ip到主机名的映射。
192.168.13.81 hadoop1
192.168.13.82 hadoop2
192.168.13.83 hadoop3
2.2、Java环境
我们的java环境如下
[root@hadoop1 user]# java -version
openjdk version "1.8.0_212"
OpenJDK Runtime Environment (build 1.8.0_212-b04)
OpenJDK 64-Bit Server VM (build 25.212-b04, mixed mode)
2.3、免密登录
三台机子生成自己的私钥,并且发到自己和其余两台的服务器上
ssh-keygen -t rsa
ssh-copy-id ip
三、软件下载
我们按照如下方式选择版本
- Hadoop 选择2.8.5版本
- Zookeeper 选择了3.4.10版本
- HBase 选择了 2.2.0版本,Hbase官网可以查询你需要的版本
四、Hadoop配置
我们选择一个目录进行整个hadoop的安装,假设它是/home/user
4.1、hadoop-env.sh
export JAVA_HOME=/usr
4.2、core-site.xml
这个ns可以理解我们定义的一个变量,你也可以叫其他的
fs.defaultFS
hdfs://ns
hadoop.tmp.dir
/home/user/dir_hadoop2
A base for other temporary directories.
io.file.buffer.size
16384
ha.zookeeper.quorum
hadoop1:2181,hadoop2:2181,hadoop3:2181
4.3、hdfs-site.xml
dfs.nameservices
ns
dfs.ha.namenodes.ns
nn1, nn2
dfs.namenode.rpc-address.ns.nn1
hadoop1:9000
dfs.namenode.http-address.ns.nn1
hadoop1:50070
dfs.namenode.rpc-address.ns.nn2
hadoop2:9000
dfs.namenode.http-address.ns.nn2
hadoop2:50070
dfs.namenode.shared.edits.dir
qjournal://hadoop1:8485;hadoop2:8485;hadoop3:8485/ns
dfs.journalnode.edits.dir
/home/user/journal_hadoop2
dfs.ha.automatic-failover.enabled
true
dfs.client.failover.proxy.provider.ns
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
shell(/bin/true)
dfs.ha.fencing.ssh.private-key-files
/root/.ssh/id_rsa
dfs.ha.fencing.ssh.connect-timeout
30000
dfs.replication
2
4.4、mapred-site.xml
需要注意的是 如果内存太小了,MP任务可能会一直报错
mapreduce.framework.name
yarn
mapreduce.map.memory.mb
1024
mapreduce.reduce.memory.mb
1024
yarn.app.mapreduce.am.resource.mb
460
yarn.app.mapreduce.am.command-opts
-Xmx368m
4.5、 yarn-site.xml
需要注意的是 如果内存太小了,MP任务可能会一直报错
yarn.resourcemanager.hostname
hadoop3
yarn.resourcemanager.zk-address
hadoop1:2181,hadoop2:2181,hadoop3:2181
yarn.nodemanager.aux-services
mapreduce_shuffle
yarn.scheduler.minimum-allocation-mb
1024
yarn.scheduler.maximum-allocation-mb
2048
yarn.nodemanager.resource.memory-mb
2048
yarn.nodemanager.vmem-check-enabled
false
4.6、slaves
配置的地方在etc/hadoop/slaves
hadoop1
hadoop2
hadoop3
4.7、zookeeper
首先重命名zoo_sample.cfg文件为zoo.cfg,然后对它进行修改,修改后的样子大约是这样的
# The number of milliseconds of each tick
tickTime=2000
# The number of ticks that the initial
# synchronization phase can take
initLimit=10
# The number of ticks that can pass between
# sending a request and getting an acknowledgement
syncLimit=5
# the directory where the snapshot is stored.
# do not use /tmp for storage, /tmp here is just
# example sakes.
dataDir=/home/user/zoodata
dataLogDir=/home/user/zoodatalog
# the port at which the clients will connect
clientPort=2181
# the maximum number of client connections.
# increase this if you need to handle more clients
#maxClientCnxns=60
#
# Be sure to read the maintenance section of the
# administrator guide before turning on autopurge.
#
# http://zookeeper.apache.org/doc/current/zookeeperAdmin.html#sc_maintenance
#
# The number of snapshots to retain in dataDir
#autopurge.snapRetainCount=3
# Purge task interval in hours
# Set to "0" to disable auto purge feature
#autopurge.purgeInterval=1
#quorumListenOnAllIPs=true
server.1=hadoop1:2888:3888
server.2=hadoop2:2888:3888
server.3=hadoop3:2888:3888
但是如果使用的是公网IP的时候,注意把本机配置为0.0.0.0。假设我们现在在hadoop1节点上,且使用的是公网IP,则应该如下配置
#末尾添加
server.1=0.0.0.0:2888:3888
server.2=165.227.133.86:2888:3888
server.3=159.65.120.185:2888:3888
然后我们手动创建zoodata和zoodatalog文件夹,并在每台zoo服务器的文件夹里面创建一个文件,以此输入1、2、3。
这个1,2,3对应的是上面server.1=hadoop1:2888:3888
中的1、2、3
你可以vim创建,或者使用echo 1 > myid
五、HBase配置
HBase的软件是一个单独的文件夹
5.1、hbase-env.sh
第二个配置是并行GC的配置,数字根据你的线程数设置
export JAVA_HOME=/usr
export HBASE_OPTS="$HBASE_OPTS -XX:+UseConcMarkSweepGC -XX:ParallelGCThreads=20"
export HBASE_MANAGES_ZK=true
5.2、 hbase-site.xml
hbase.rootdir
hdfs:///ns/hbase
hbase.zookeeper.property.dataDir
/home/user/zoodata
hbase.cluster.distributed
true
hbase.master
hdfs://hadoop1:60000
hbase.master.info.port
60010
hbase.zookeeper.property.clientPort
2181
hbase.zookeeper.quorum
hadoop1,hadoop2,hadoop3
完成配置后,记得把core-site.xml
和hdfs -site.xml
的软链接链到这个目录下面,否则无法识别ns。
5.3、conf/regionservers
hadoop1
hadoop2
hadoop3
六、复制
把除了myid以外其它东西复制到另外两台服务器。可以直接使用scp复制
七、服务启动
7.1、Zookeeper
在三台服务器
zkServer.sh start
启动之后检查启动是否正常
[root@hadoop1 user]# zookeeper/bin/zkServer.sh status
/usr/bin/java
ZooKeeper JMX enabled by default
Using config: /home/user/zookeeper/bin/../conf/zoo.cfg
Client port found: 2181. Client address: localhost.
Mode: follower
如果不正常,检查一下防火墙有没有问题。防火墙一定要关闭。
7.2、HDFS
- 在hadoop1执行
hadoop-daemons.sh start journalnode
- 在hadoop1上格式化HDFS
hdfs namenode -format
。格式化后会在根据core-site.xml中的hadoop.tmp.dir
配置生成个文件,在这里是存在 /home/user/dir_hadoop2 的目录下。然后将这个文件用scp拷贝到你备用namenode服务器的/home/user/dir_hadoop2 目录下。 - 在hadoop1上格式化ZK
hdfs zkfc -formatZK
- 在hadoop1上
hdfs zkfc -formatZK
- 在hadoop1上启动HDFS
start-dfs.sh
。 - 在hadoop3上启动Yarn
start-yarn.sh
。 - 在hadoop1上启动HBase
hbase-2.2.0/bin/start-hbase.sh
八、验证服务
[root@hadoop1 user]# jps
2464 NodeManager
16417 HQuorumPeer
20065 Jps
32066 NameNode
32180 DataNode
18470 HMaster
18589 HRegionServer
32383 JournalNode
运行一下hadoop提供的demo中的WordCount程序:
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.1.jar wordcount input out
九、关闭服务
https://blog.csdn.net/u011414200/article/details/50437356
参考链接:https://www.cnblogs.com/luhaojie/p/9236839.html