准备工作
4台linux服务器(ubuntu),主机名分别为:master,namesecond,slavenode01.slavenode02
关闭linux防火墙
sudo ufw disable
查看防火墙状态
sudo ufw status
jdk(Oracle)
zookeeper安装包
hadoop安装包
windows 域名映射
进入C:\Windows\System32\drivers\etc文件夹,用记事本打开hosts文件,追加以下内容(写自己的IP地址):
127.0.0.1 localhost
192.168.223.128 master
192.168.223.140 slavenode01
192.168.223.139 slavenode02
192.168.223.141 namesecond
伪分布式 (single node setup)
1.安装jdk、配置环境变量,测试
2.免秘钥
ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
3.hadoop包安装并配置环变:hadoop-2.6.5.tar.gz
4.Hadoop的第二次JAVA_HOME 环境变量配置
vi hadoop-env.sh
vi mapred-env.sh
vi yarn-env.sh
5.配置core-site.xml
vi core-site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/local</value>
</property>
7.配置hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
8.配置slaves文件
master
9.格式化hdfs
hdfs namenode -format (只能格式化一次,再次启动集群不要执行)
10.启动集群
start-dfs.sh
角色进程查看:jps
帮助: hdfs
hdfs dfs
查看web UI: IP:50070
创建目录:hdfs dfs -mkdir -p /user/root
查看目录: hdfs dfs -ls /
上传文件: hdfs dfs -put hadoop-2.6.5.tar.gz /user/root
停止集群:stop-dfs.sh
安装zookeeper集群:
1.3节点 java 安装
2.所有集群节点创建目录: mkdir opt/zookeeper
3.zk压缩包解压在其他路径下::
# tar xf zookeeper-3.4.6.tar.gz -C /opt/zookeeper/
4.进入conf目录,拷贝zoo_sample.cfg zoo.cfg 并配置
dataDir,集群节点。
5.单节点配置环境变量、并分发 ZOOKEEPER_PREFIX,共享模式读取profile
6 共享创建 /var/sxt/zk目录,进入各自目录 分别输出1,2,3 至文件 myid
echo 1 > /var/zookeeper/zk/myid
…
7 共享启动zkServer.sh start 集群
8.启动客户端 help命令查看
全分布安装
节点: master/namesecond/slavenode01/slavenode02
节点状态:
master: 伪分布
namesecond/slavenode01/slavenode02 : ip配置完成
建立各节点通讯(hosts)
全分布分配方案:
- | NN | SNN | DN |
---|---|---|---|
master | * | ||
namesecond | * | * | |
slavenode01 | * | ||
slavenode02 | * |
前期准备:
zookeeper
1 修改/etc/hostname
yourShelfHostname
2.修改/etc/hosts追加一下内容
192.168.223.128 master
192.168.223.140 slavenode01
192.168.223.139 slavenode02
192.168.223.141 namesecond
3 设置时间同步:date -s “xxxx-x-xx xx:xx:xx”
4 秘钥分发:
在每个节点上登录一下自己:产生.ssh目录
从master/namesecond/slavenode01/slavenode02分发公钥 (公钥的名称要变化)
scp id_dsa.pub nodeName:pwd
/master.pub
各节点把master的公钥追加到认证文件里:
cat ~/master.pub >> ~/.ssh/authorized_keys
5 namesecond/slavenode01/slavenode02安装jdk环境,master分发profile给其他节点,并重读配置文件
. /etc/profile
6 进入hadoop-2.6.5/etc目录
copy master下的 hadoop 为 hadoop-local (保存伪分布式配置文件,因为管理脚本只会读取hadoop目录)
[root@master etc]# cp -r hadoop hadoop-local
7 配置core-site.xml
(待更新)
8 配置hdfs-site.xml
(待更新)
9 配置slaves
namesecond
slavenode01
slavenode02
10 分发
分发hadoop配置文件到其他namesecond,slavenode01,slavenode02节点
11 格式化集群:hdfs namenode -format
12 启动集群:start-dfs.sh
查看各节点进程启动情况
Jps
HA
- | NN1 | NN2 | DN | ZK | ZKFC | JNN |
---|---|---|---|---|---|---|
master | * | * | * | |||
namesecond | * | * | * | * | * | |
slavenode01 | * | * | * | |||
slavenode02 | * | * |
1 两个nn节点免秘钥
ssh-keygen -t dsa -P ‘’ -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
2 进入hadoop-2.6.5/etc目录 (可以通过变量:cd $HADOOP_HOME)
拷贝hadoop 为 hadoop-full (保存全分布式配置文件)
3 hdfs.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.nameservices</name>
<value>mycluster</value>
</property>
<property>
<name>dfs.ha.namenodes.mycluster</name>
<value>nn1,nn2</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn1</name>
<value>master:8020</value>
</property>
<property>
<name>dfs.namenode.rpc-address.mycluster.nn2</name>
<value>namesecond:8020</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn1</name>
<value>master:50070</value>
</property>
<property>
<name>dfs.namenode.http-address.mycluster.nn2</name>
<value>namesecond:50070</value>
</property>
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://master:8485;namesecond:8485;slavenode01:8485/mycluster</value>
</property>
<property>
<name>dfs.client.failover.proxy.provider.mycluster</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<property>
<name>dfs.ha.fencing.methods</name>
<value>sshfence</value>
</property>
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/root/.ssh/id_rsa</value>
</property>
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/var/hadoop/ha/journalnode</value>
</property>
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
</configuration>
4 core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://mycluster</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/var/hadoop/ha</value>
</property>
<property>
<name>ha.zookeeper.quorum</name>
<value>namesecond:2181,slavenode01:2181,slavenode02:2181</value>
</property>
</configuration>
5 配置slaves
namesecond
slavenode01
slavenode02
6 分发 hdfs.xml 和core.xml 给其他节点
scp -r dirPath hostname:pwd
启动HA高可用集群
1.在namesecond、datanode01、datanode02中启动zookeeper
zkServer.sh start
2.在namenode、namesecond、datanode01中启动journalnode
hadoop-daemon.sh start journalnode
3.初始化namenode
hdfs namenode -format
4.启动namenode
hadoop-daemon.sh start namenode
5.同步namesecond数据
hdfs namenode -bootstrapStandby
6.在namenode中初始化zkfc
hdfs zkfc -formatZK
在zookeeper 客户端可见:
[zk: localhost:2181(CONNECTED) 1] ls /
[hadoop-ha, zookeeper]
[zk: localhost:2181(CONNECTED) 2] ls /hadoop-ha
[mycluster]
7.启动hadoop集群
start-dfs.sh
cat /var/hadoop/ha/dfs/name/current/VERSION
再次查看zk客户端,可见:
[zk: localhost:2181(CONNECTED) 9] ls /hadoop-ha/mycluster
[ActiveBreadCrumb, ActiveStandbyElectorLock]
或者两个目录的数据,谁是主谁被创建:
[zk: localhost:2181(CONNECTED) 11] get /hadoop-ha/mycluster/ActiveBreadCrumb
mr-hd2.x yarn
在高可用HA的基础上加入yarn
两个rm节点互免秘钥:
slavenode01节点 .ssh 目录下: ssh-keygen -t dsa -P ‘’ -f ./id_dsa
cat ~id_dsa.pub >> authorized_keys
scp id_dsa.pub root@slavenode02:pwd
/node08.pub
slavenode02节点 .ssh 目录下 :
cat slavenode01.pub >> authorized_keys
ssh-keygen -t dsa -P ‘’ -f ./id_dsa
cat ~id_dsa.pub >> authorized_keys
scp id_dsa.pub root@slavenode01:pwd
/slavenode02.pub
slavenode01节点 .ssh 目录下:
cat slavenode02.pub >> authorized_keys
cd $HADOOP_HOME/etc/hadoop
mv mapred-site.xml.template mapred-site.xml
mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
yarn-site.xml:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.ha.enabled</name>
<value>true</value>
</property>
<property>
<name>yarn.resourcemanager.cluster-id</name>
<value>cluster1</value>
</property>
<property>
<name>yarn.resourcemanager.ha.rm-ids</name>
<value>rm1,rm2</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm1</name>
<value>slavenode01</value>
</property>
<property>
<name>yarn.resourcemanager.hostname.rm2</name>
<value>slavenode02</value>
</property>
<property>
<name>yarn.resourcemanager.zk-address</name>
<value>namesecond:2181,slavenode01:2181,slavenode02:2181</value>
</property>
分发两个文件到:namesecond,slavenode01,slavenode02节点
scp maprexxxx yarn-xxx namesecond:pwd
scp maprexxxx yarn-xxx slavenode01:pwd
scp maprexxxx yarn-xxx slavenode02:pwd
启动:master:
1 zookeeper
2 hdfs (注意,有一个脚本不要用,start-all)start-dfs.sh
如果nn 和 nn2没有启动,需要在master,namesecond分别手动启动:
hadoop-daemon.sh start namenode
3 start-yarn.sh (启动nodemanager)
4 在slavenode01,slavenode02节点分别执行脚本: yarn-daemon.sh start resourcemanager
UI访问: ip:8088
停止:
master: stop-dfs.sh
master: stop-yarn.sh (停止nodemanager)
namesecond,slavenode01: yarn-daemon.sh stop resourcemanager (停止resourcemanager)