原文地址:http://blog.csdn.net/uq_jin/article/details/51487439
如果你还没有虚拟机,请参考:http://blog.csdn.net/uq_jin/article/details/51355124
如果你还没有试过单机模式,请参考:http://blog.csdn.net/uq_jin/article/details/51451995
如果你还没有试过集群模式,请参考:http://blog.csdn.net/uq_jin/article/details/51513307
集群规划
主机名 | ip | 安装的软件 | 进程 |
---|---|---|---|
hadoop01 | 192.168.1.101 | jdk、hadoop | NN、DFSZKFailoverController |
hadoop02 | 192.168.1.102 | jdk、hadoop | NN、DFSZKFailoverController |
hadoop03 | 192.168.1.103 | jdk、hadoop | RM |
hadoop04 | 192.168.1.104 | jdk、hadoop、zookeeper | DN、NM、journalnode |
hadoop05 | 192.168.1.105 | jdk、hadoop、zookeeper | DN、NM、journalnode |
hadoop06 | 192.168.1.106 | jdk、hadoop、zookeeper | DN、NM、journalnode |
六台主机
主机名:
hadoop01、hadoop02、hadoop03、hadoop04、hadoop05、hadoop06
如果不会请参考:http://blog.csdn.net/uq_jin/article/details/51355124
用户名:hadoop
密码:12345678
设置主机名映射(root用户)
将本机的主机名和IP建立映射关系
vi /etc/hosts
- 1
加入如下文件:
192.168.2.101 hadoop01
192.168.2.102 hadoop02
192.168.2.103 hadoop03
192.168.2.104 hadoop04
192.168.2.105 hadoop05
192.168.2.106 hadoop06
- 1
- 2
- 3
- 4
- 5
- 6
拷贝/etc/hosts到其它主机
scp /etc/hosts hadoop02:/etc/
scp /etc/hosts hadoop03:/etc/
scp /etc/hosts hadoop04:/etc/
scp /etc/hosts hadoop05:/etc/
scp /etc/hosts hadoop06:/etc/
- 1
- 2
- 3
- 4
- 5
开放常用端口(root用户)
#关闭防火墙
sudo systemctl stop firewalld.service
#关闭开机启动
sudo systemctl disable firewalld.service
- 1
- 2
- 3
- 4
创建专有的用户(root用户)
一般是建专有的hadoop用户,不在root用户上面搭建
创建组和用户
这里每台虚拟主机都应该有hadoop用户
#先创建组cloud
groupadd cloud
#创建用户并加入组cloud
useradd -g cloud hadoop
#修改用户hadoop的密码
passwd hadoop
- 1
- 2
- 3
- 4
- 5
- 6
将hadoop用户加到sodu列表
1、查看/etc/sudoers的权限
ls -l /etc/sudoers
- 1
可以看的是只读权限,如果我们要修改就必须先改变该文件的权限
2、修改权限
chmod 777 /etc/sudoers
- 1
3、将hadoop添加root权限
vim /etc/sudoers
- 1
在root下加入下面hadoop用户
4、还原权限
chmod 440 /etc/sudoers
- 1
拷贝/etc/sudoers到其它主机
scp /etc/sudoers hadoop02:/etc/
scp /etc/sudoers hadoop03:/etc/
scp /etc/sudoers hadoop04:/etc/
scp /etc/sudoers hadoop05:/etc/
scp /etc/sudoers hadoop06:/etc/
- 1
- 2
- 3
- 4
- 5
配置免密码登录(hadoop用户)
切换hadoop用户
su hadoop
- 1
进入到当前用户的根目录
cd ~
- 1
查看所有文件
ls –la
- 1
进入.ssh目录
cd .ssh
- 1
生产公钥和私钥(四个回车)
ssh-keygen -t rsa
- 1
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免登陆的机器上
ssh-copy-id 192.168.2.101
ssh-copy-id 192.168.2.102
ssh-copy-id 192.168.2.103
ssh-copy-id 192.168.2.104
ssh-copy-id 192.168.2.105
ssh-copy-id 192.168.2.106
- 1
- 2
- 3
- 4
- 5
- 6
这时会在192.168.2.102主机的.ssh/下产生一个名为authorized_keys的文件,这时通过 ssh 192.168.2.102时可以直接免登陆进入主机
如下:
同理可以给其他机器也设置免密码登录。
准备软件
在/home/hadoop/下创建cloud文件夹,用来安装相关软件,同时所用安装包放在cloud下的soft-install文件夹下,如:
cd /home/hadoop
mkdir cloud
mkdir soft-install
- 1
- 2
- 3
在soft-install里上传我们需要的软件:
上传我们所需要的软件到这个目录
安装jdk
解压
tar -zxvf jdk-8u91-linux-x64.tar.gz -C /home/hadoop/cloud/
- 1
配置环境变量
# 修改配置文件
sudo vi /etc/profile
# 在最后下添加
export JAVA_HOME=/home/hadoop/cloud/jdk1.8.0_91
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 刷新配置文件
source /etc/profile
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
将jdk和环境变量分别拷贝到其他主机上
可以直接将cloud文件夹复制过去
scp -r cloud/ hadoop02:/home/hadoop/
scp -r cloud/ hadoop03:/home/hadoop/
scp -r cloud/ hadoop04:/home/hadoop/
scp -r cloud/ hadoop05:/home/hadoop/
scp -r cloud/ hadoop06:/home/hadoop/
- 1
- 2
- 3
- 4
- 5
将环境变量拷贝到其他主机下
sudo scp /etc/profile hadoop02:/etc/
sudo scp /etc/profile hadoop03:/etc/
sudo scp /etc/profile hadoop04:/etc/
sudo scp /etc/profile hadoop05:/etc/
sudo scp /etc/profile hadoop06:/etc/
- 1
- 2
- 3
- 4
- 5
刷新环境变量
source /etc/profile
- 1
安装zookeeper
如果不懂Zookeeper请参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-zookeeper/
下载地址:http://mirrors.hust.edu.cn/apache/zookeeper/
安装
前面我们已经安装的jdk,现在我们在hadoop04、hadoop05、hadoop06上安装Zookeeper
1、解压
tar -zxvf zookeeper-3.4.8.tar.gz -C /home/hadoop/cloud/
- 1
2、修改Zookeeper的默认配置 conf/zoo_sample.cfg
mv zoo_sample.cfg zoo.cfg
vi zoo.cfg
- 1
- 2
配置如下:
#修改dataDir指向我们数据
dataDir=/home/hadoop/cloud/zookeeper-3.4.8/data
#并在最后添加
server.1=hadoop04:2888:3888
server.2=hadoop05:2888:3888
server.3=hadoop06:2888:3888
- 1
- 2
- 3
- 4
- 5
- 6
3、在/home/hadoop/cloud/zookeeper-3.4.8/目录下创建data文件夹
mkdir data
- 1
4、在data文件夹下创建myid文件指明本机id
vim myid
- 1
id 分别对应为hadoop04为1,hadoop05为2,hadoop06为3 后面我们再统一拷贝
5、复制zookeeper-3.4.8到105、106机器上并修改相应的myid
scp -r zookeeper-3.4.8/ hadoop04:/home/hadoop/cloud/
scp -r zookeeper-3.4.8/ hadoop05:/home/hadoop/cloud/
scp -r zookeeper-3.4.8/ hadoop06:/home/hadoop/cloud/
- 1
- 2
- 3
启动Zookeeper
分别在hadoop04、hadoop05、hadoop06上启动Zookeeper
#执行/home/hadoop/cloud/zookeeper-3.4.8/bin目录下的脚本启动
./zkServer.sh start
- 1
- 2
查看zookeeper的状态
./zkServer.sh status
- 1
在bin/目录下运行,运行结果如下说明成功(此时至少运行2台)
其实我们可以找到leader 然后stop,会发现Zookeeper会立即切换Leader
安装hadoop
安装(现在hadoop01安装,然后复制其他机器)
解压
tar -zxvf hadoop-2.7.2.tar.gz -C /home/hadoop/cloud/
- 1
配置环境变量
# 修改配置文件
sudo vi /etc/profile
# 在最后下添加
export HADOOP_HOME=/home/hadoop/cloud/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
# 刷新配置文件
source /etc/profile
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
测试:
which hadoop
- 1
修改配置文件(6个)
hadoop-env.sh
# The java implementation to use.
export JAVA_HOME=/home/hadoop/cloud/jdk1.8.0_91
- 1
- 2
core-site.xml
<configuration>
<!-- 指定hadoop运行时产生文件的存储路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/cloud/hadoop-2.7.2/tmp</value>
</property>
<!-- 指定hdfs的nameservice为ns1 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://ns1</value>
</property>
<!-- 指定zookeeper地址,多个用,分割 -->
<property>
<name>ha.zookeeper.quorum</name>
<value>hadoop04:2181,hadoop05:2181,hadoop06:2181</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
hdfs-site.xml
<configuration>
<!-- dfs.nameservices 命名空间的逻辑名称,多个用,分割 -->
<property>
<name>dfs.nameservices</name>
<value>ns1</value>
</property>
<!-- 指定ns1下有两个namenode,分别是nn1,nn2 -->
<property>
<name>dfs.ha.namenodes.ns1</name>
<value>nn1,nn2</value>
</property>
<!-- 指定nn1的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn1</name>
<value>hadoop01:8020</value>
</property>
<!-- 指定nn1的HTTP通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn1</name>
<value>hadoop01:50070</value>
</property>
<!-- 指定nn2的RPC通信地址 -->
<property>
<name>dfs.namenode.rpc-address.ns1.nn2</name>
<value>hadoop02:8020</value>
</property>
<!-- 指定nn2的HTTP通信地址 -->
<property>
<name>dfs.namenode.http-address.ns1.nn2</name>
<value>hadoop02:50070</value>
</property>
<!-- 指定namenode的元数据存放的Journal Node的地址,必须基数,至少三个 -->
<property>
<name>dfs.namenode.shared.edits.dir</name>
<value>qjournal://hadoop04:8485;hadoop05:8485;hadoop06:8485/ns1</value>
</property>
<!--这是JournalNode进程保持逻辑状态的路径。这是在linux服务器文件的绝对路径-->
<property>
<name>dfs.journalnode.edits.dir</name>
<value>/home/hadoop/cloud/hadoop-2.7.2/journal/</value>
</property>
<!-- 开启namenode失败后自动切换 -->
<property>
<name>dfs.ha.automatic-failover.enabled</name>
<value>true</value>
</property>
<!-- 配置失败自动切换实现方式 -->
<property>
<name>dfs.client.failover.proxy.provider.ns1</name>
<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
</property>
<!-- 配置隔离机制方法,多个机制用换行分割 -->
<property>
<name>dfs.ha.fencing.methods</name>
<value>
sshfence
shell(/bin/true)
</value>
</property>
<!-- 使用sshfence隔离机制时需要ssh免登陆 -->
<property>
<name>dfs.ha.fencing.ssh.private-key-files</name>
<value>/home/hadoop/.ssh/id_rsa</value>
</property>
<!-- 配置sshfence隔离机制超时时间30秒 -->
<property>
<name>dfs.ha.fencing.ssh.connect-timeout</name>
<value>30000</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 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
mapred-site.xml.template
需要重命名: mv mapred-site.xml.template mapred-site.xml
<configuration>
<!-- 通知框架MR使用YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
yarn-site.xml
<configuration>
<!-- 指定YARN的老大(RM)的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop03</value>
</property>
<!-- reducer取数据的方式是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
slaves
hadoop04
hadoop05
hadoop06
- 1
- 2
- 3
并在 hadoop-2.7.2文件下 创建tmp文件:
mkdir tmp
- 1
将配置好的文件拷贝到其他主机
将hadoop-2.5.2拷贝到其他主机下
scp -r hadoop-2.7.2 hadoop02:/home/hadoop/cloud/
scp -r hadoop-2.7.2 hadoop03:/home/hadoop/cloud/
scp -r hadoop-2.7.2 hadoop04:/home/hadoop/cloud/
scp -r hadoop-2.7.2 hadoop05:/home/hadoop/cloud/
scp -r hadoop-2.7.2 hadoop06:/home/hadoop/cloud/
- 1
- 2
- 3
- 4
- 5
将环境变量拷贝到其他主机下
sudo scp /etc/profile hadoop02:/etc/
sudo scp /etc/profile hadoop03:/etc/
sudo scp /etc/profile hadoop04:/etc/
sudo scp /etc/profile hadoop05:/etc/
sudo scp /etc/profile hadoop06:/etc/
- 1
- 2
- 3
- 4
- 5
刷新环境变量
source /etc/profile
- 1
启动
启动的时候注意启动顺序
1、启动zookeeper(在hadoop04、05、06 )
2、启动journal node(在hadoop04、05、06)
#hadoop-2.7.2/sbin下
./sbin/hadoop-daemon.sh start journalnode
- 1
- 2
3、格式化HDFS(namenode)第一次要格式化(在hadoop01、02中任意一台)(这里直接复制会有问题,最好手动输入)
./bin/hdfs namenode –format
- 1
并把/home/hadoop/cloud/hadoop-2.7.2/tmp 文件夹拷贝到另一台namenode的目录下
scp -r /home/hadoop/cloud/hadoop-2.7.2/tmp hadoop@hadoop02:/home/hadoop/cloud/hadoop-2.7.2/
- 1
4、格式化 zk(在hadoop01即可)(这里直接复杂会有问题,最好手动输入)
./bin/hdfs zkfc –formatZK
- 1
5、启动zkfc来监控NN状态(在hadoop01、02)
./sbin/hadoop-daemon.sh start zkfc
- 1
6、启动HDFS(namenode)(在hadoop01即可)
#hadoop-2.7.2/sbin下
./sbin/start-dfs.sh
- 1
- 2
7、启动YARN(MR)(在hadoop03即可)
#hadoop-2.7.2/sbin下
./sbin/start-yarn.sh
- 1
- 2
查看结果
如果上面的启动没有报错的的话,这时在我们的虚拟主机上应该分别有自己的进程,如前文我们规划的一样。
查看本机的java进程
jps
- 1
通过浏览器测试如下:
http://192.168.2.101:50070/
- 1
可以看出hadoop01的namenode是处于一种standby状态,那么hadoop02应该是处于active状态
查看YARN的状态
http://192.168.2.103:8088/
- 1
centos安装
Vm配置安装CentOS-7-Minimal
原创 2016年05月09日 19:34:15
- 标签:
- CentOS7Min /
- Vm
- 11978
大部分情况下,我们的工作环境都是Windows,然后当我工作中有需要用到Linux环境的时候我们大多会选择选择虚拟机来安装Linux,这里我记录我在虚拟机里安装CentOS7过程,以便今后工作中参考。
涉及内容:
- 安装 vm 12
- 配置 vm 12
- 安装 CentOS 7
- 配置 CentOS 7
- 快速克隆虚拟机
一、安装 vm
安装步骤很简单这里就略过了
二、配置 vm 的网络
设置网络模式为NAT模式
1、编辑 – 虚拟网络编辑器
2、设置NAT的IP便于修改主机IP
这里可以看到我的VMnet8 默认的子网地址是192.168.133.0 这是因为我安装的vm默认生成的这个地址,这表示如果不修改,你以后的Linux的IP都是192.168.133.x 这样的IP,如果我想以后我的Linux都是192.168.2.x 可以按如下方法修改
打开VMnet8的适配器设置ipv4地址
然后重复步骤1、步骤2
这样修改后我们以后的IP就是 192.168.2.x ,
3、下面我们设置 x 的范围
然后确定我们的IP范围就是 自己设置的范围,开始范围大于3,因为宿主机的默认为1,而网关为2,那么我们的Linux必须>=3并<=255
4、查看网关
记录以下信息,后面配置虚拟机要用到
子网掩码:255.255.255.0
网关:192.168.2.2
- 1
- 2
配置好后应用-确定,然后下面开始安装CentOS。
三、安装CentOS 7
1、下载镜像
http://isoredirect.centos.org/centos/7/isos/x86_64/CentOS-7-x86_64-Minimal-1511.iso
- 1
2、创建新的虚拟机
1.第一步 默认
2.第二步 选择iso镜像
3.设置用户名,和密码,这里的密码将是root的密码
4.选择安装目录
5、设置磁盘大小
6、自定义硬件-删除声卡、打印机
7、等待完成。
中间可能安装提示警告,按yes即可
使用用户名root,密码root登录即可
四、配置 CentOS
1、配置防火墙
关闭防火墙
systemctl stop firewalld.service
关闭开机启动防火墙
systemctl disable firewalld.service
- 1
- 2
- 3
- 4
2、配置网络
cd /etc/sysconfig/network-scripts/
vi ifcfg-eno16777736
- 1
- 2
#要修改的数据
BOOTPROTO=static ### 手动设置IP
#UUID=... ### 注释掉UUID方便后面clone虚拟机
IPADDR=192.168.2.100 ### 本机IP 为 192.168.2.100
NETMASK=255.255.255.0 ### 子网掩码
GATEWAY=192.168.2.2 ### 默认网关 对应我们NAT设置里查看的网关IP
DNS1=8.8.8.8 ### DNS 设置为Google的
ONBOOT=yes ### 开机启动
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
重启网络
/etc/init.d/network restart
- 1
查看IP
发现我们的IP已经变为192.168.2.100了
测试网络
ping www.baidu.com # 虚拟机里测试能否上网
ping 192.168.2.1 # 虚拟机到宿主机 记得关闭宿主机防火墙
ping 192.168.2.100 # 宿主机到虚拟机 记得关闭虚拟机防火墙
- 1
- 2
- 3
至此vm安装CentOS7完成,下一节,CentOS7安装jdk以及Tomcat并快速克隆虚拟机
五、快速克隆虚拟机
很多时候我们用到的不止一台虚拟机,而且每次安装都要等一定的时间,我们可以通过克隆快速部署更多的虚拟机。
将origin虚拟机关机,右键选-管理-克隆
完成即可,然后安装上面配置IP的方式只需要改IP为 192.168.2.101 等等即可最后一个段随意,这样就可以通过一个虚拟机克隆N多个虚拟机,一个玩坏了,删了再克隆。
2017.5.18添加
发现主机 执行 yum update 后再克隆,IP不是以前的那个静态IP,而是重新分配了IP,我们的ifcfg-eno16777736网卡变成了ens33 ,如下图:
而我们的/etc/sysconfig/network-scripts/没有这个ens33的网卡,这就尴尬了,解决办法如下:
修改ifcfg-eno16777736加入
HWADDR=00:0c:29:ef:e7:72 #这里的值为上图标记的地址
- 1
并重启虚拟机。
发现我们的网卡又变回ifcfg-eno16777736了,这时就可以修改静态IP了
vi /etc/sysconfig/network-scripts/ifcfg-eno16777736
service network start
Hadoop2.7.2之集群搭建(三台)
原创 2016年05月27日 12:43:18
- 9428
原文地址:http://blog.csdn.net/uq_jin/article/details/51513307
如果你还没有虚拟机,请参考:http://blog.csdn.net/uq_jin/article/details/51355124
如果你还没有试过单机模式,请参考:http://blog.csdn.net/uq_jin/article/details/51451995
参考:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html
集群规划
主机名 | ip | 安装的软件 | 进程 |
---|---|---|---|
master | 192.168.1.111 | jdk、hadoop | namenode ressourcemanager |
slave1 | 192.168.1.112 | jdk、hadoop | datanode secondnamenode |
slave2 | 192.168.1.113 | jdk、hadoop | datanade |
免登录
这里直接用root用户,注意将防火墙关掉:
#关闭防火墙
sudo systemctl stop firewalld.service
#关闭开机启动
sudo systemctl disable firewalld.service
- 1
- 2
- 3
- 4
免密码登录:
cd /root/.ssh/
ssh-keygen -t rsa
- 1
- 2
这里上个回车就ok,会在当前目录生成两个文件,一个公钥一个私钥
将公钥拷贝到其它机器上,实现免密码登录
ssh-copy-id master
ssh-copy-id slave1
ssh-copy-id slave2
- 1
- 2
- 3
这样会在slave1 的/root/.ssh/目录下生成一个authorized_keys 就可以实现master免登录到slave1,如下:
ssh slave1
- 1
安装JDK
在/opt/下创建soft-install文件夹来存放安装的软件,创建soft来安装软件
tar -zxvf jdk-8u91-linux-x64.tar.gz -C /opt/soft/
- 1
修改环境变量:
# 修改配置文件
vi /etc/profile
# 在最后下添加
export JAVA_HOME=/opt/soft/jdk1.8.0_91
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
# 刷新配置文件
source /etc/profile
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
安装Hadoop
解压
tar -zxvf ./soft-install/hadoop-2.7.2.tar.gz -C /opt/soft/
- 1
删除docs
cd /opt/soft/hadoop-2.7.2/share
rm -rf doc/
- 1
- 2
修改环境变量
# 修改配置文件
vi /etc/profile
# 在最后下添加
export HADOOP_HOME=/opt/soft/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
# 刷新配置文件
source /etc/profile
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
修改配置文件
这些配置文件全部位于 /opt/soft/hadoop-2.7.2/etc/hadoop 文件夹下
hadoop-env.sh
core-site.xml
<configuration>
<!-- 指定HDFS老大(namenode)的通信地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储路径 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/soft/hadoop-2.7.2/tmp</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
hdfs-site.xml
<configuration>
<!-- 设置namenode的http通讯地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<!-- 设置secondarynamenode的http通讯地址 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
<!-- 设置namenode存放的路径 -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/soft/hadoop-2.7.2/name</value>
</property>
<!-- 设置hdfs副本数量 -->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<!-- 设置datanode存放的路径 -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/soft/hadoop-2.7.2/data</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
mapred-site.xml
必须先
mv mapred-site.xml.template mapred-site.xml
- 1
<configuration>
<!-- 通知框架MR使用YARN -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
yarn-site.xml
<configuration>
<!-- 设置 resourcemanager 在哪个节点-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<!-- reducer取数据的方式是mapreduce_shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
masters
新建一个masters的文件,这里指定的是secondary namenode 的主机
slave1
- 1
slaves
slave1
slave2
- 1
- 2
创建文件夹:
mkdir tmp name data
- 1
复制到其他主机
复制/etc/hosts(因为少了这个导致secondarynamenode总是在slave1启动不起来)
scp /etc/hosts slave1:/etc/
scp /etc/hosts slave2:/etc/
- 1
- 2
复制/etc/profile (记得要刷新环境变量)
scp /etc/profile slave1:/etc/
scp /etc/profile slave2:/etc/
- 1
- 2
复制/opt/soft
scp -r /etc/soft slave1:/opt/
scp -r /etc/soft slave2:/opt/
- 1
- 2
记得在slave1和slave2上刷新环境变量
启动
第一次启动得格式化
./bin/hdfs namenode -format
- 1
启动dfs
./sbin/start-dfs.sh
- 1
启动yarn
./sbin/start-yarn.sh
- 1
查看
master
slave1
slave2
通过浏览器测试hdfs:
192.168.2.111:50070
- 1
注意这里有数据才是成功,我因为没把hosts文件复制到其他主机,导致启动的进程都是正确的,但是这里就是没数据,后来查资料检查才是没复制hosts文件。复制之后就一切正常了
通过浏览器测试yarn:
192.168.2.111:8088
- 1
可以看到一切正常。2个节点。
至此我们的三台hadoop运行
版权声明:本文为博主原创文章,未经博主允许不得转载。 http://blog.csdn.net/u010435203/article/details/51513307
- 2017-10-26 16:564楼
-
mark
- 2017-07-31 17:063楼
-
安装博主所写,成功搭建集群环境。
好像发现一个命令错误,请博主确认
复制到其他主机
复制/opt/soft
scp -r /etc/soft slave1:/opt/ 中应该是/opt/soft吧 -
Hadoop HA高可用集群搭建(2.7.2)
2016年03月24日 22:33:12
- 13161
1.集群规划:
主机名 IP 安装的软件 运行的进程
drguo1 192.168.80.149 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)、ResourceManager
drguo2 192.168.80.150 jdk、hadoop NameNode、DFSZKFailoverController(zkfc)、ResourceManager
drguo3 192.168.80.151 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
drguo4 192.168.80.152 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
drguo5 192.168.80.153 jdk、hadoop、zookeeper DataNode、NodeManager、JournalNode、QuorumPeerMain
排的好好的,显示出来就乱了!!!
2.前期准备:
准备五台机器,修改静态IP、主机名、主机名与IP的映射,关闭防火墙,安装JDK并配置环境变量(不会请看这http://blog.csdn.net/dr_guo/article/details/50886667),创建用户:用户组,SSH免密码登录SSH免密码登录(报错请看这http://blog.csdn.net/dr_guo/article/details/50967442)。
注意:要把127.0.1.1那一行注释掉,要不然会出现jps显示有datanode,但网页显示live nodes为0;
注释之后就正常了,好像有人没注释也正常,我也不知道为什么0.0
3.搭建zookeeper集群(drguo3/drguo4/drguo5)
4.正式开始搭建Hadoop HA集群
去官网下最新的Hadoop(http://apache.opencas.org/hadoop/common/stable/),目前最新的是2.7.2,下载完之后把它放到/opt/Hadoop下
[plain] view plain copy
- guo@guo:~/下载$ mv ./hadoop-2.7.2.tar.gz /opt/Hadoop/
- mv: 无法创建普通文件"/opt/Hadoop/hadoop-2.7.2.tar.gz": 权限不够
- guo@guo:~/下载$ su root
- 密码:
- root@guo:/home/guo/下载# mv ./hadoop-2.7.2.tar.gz /opt/Hadoop/
解压
[plain] view plain copy
- guo@guo:/opt/Hadoop$ sudo tar -zxf hadoop-2.7.2.tar.gz
- [sudo] guo 的密码:
解压jdk的时候我用的是tar -zxvf,其中的v呢就是看一下解压的过程,不想看你可以不写。
修改opt目录所有者(用户:用户组)直接把opt目录的所有者/组换成了guo。具体情况在ZooKeeper完全分布式集群搭建说过。
[plain] view plain copy
- root@guo:/opt/Hadoop# chown -R guo:guo /opt
设置环境变量
[plain] view plain copy
- guo@guo:/opt/Hadoop$ sudo gedit /etc/profile
在最后加上(这样设置在执行bin/sbin目录下的脚本时就不用进入该目录用了)
[plain] view plain copy
- #hadoop
- export HADOOP_HOME=/opt/Hadoop/hadoop-2.7.2
- export PATH=$PATH:$HADOOP_HOME/sbin
- export PATH=$PATH:$HADOOP_HOME/bin
然后更新配置
[plain] view plain copy
- guo@guo:/opt/Hadoop$ source /etc/profile
修改/opt/Hadoop/hadoop-2.7.2/etc/hadoop下的hadoop-env.sh
[plain] view plain copy
- guo@guo:/opt/Hadoop$ cd hadoop-2.7.2
- guo@guo:/opt/Hadoop/hadoop-2.7.2$ cd etc/hadoop/
- guo@guo:/opt/Hadoop/hadoop-2.7.2/etc/hadoop$ sudo gedit ./hadoop-env.sh
进入文件后
[plain] view plain copy
- export JAVA_HOME=${JAVA_HOME}#将这个改成JDK路径,如下
- export JAVA_HOME=/opt/Java/jdk1.8.0_73
然后更新文件配置
[plain] view plain copy
- guo@guo:/opt/Hadoop/hadoop-2.7.2/etc/hadoop$ source ./hadoop-env.sh
前面配置和单机模式一样,我就直接复制了。
注意:汉语注释是给你看的,复制粘贴的时候都删了!!!
修改core-site.xml
[html] view plain copy
- <configuration>
- <!-- 指定hdfs的nameservice为ns1 -->
- <property>
- <name>fs.defaultFS</name>
- <value>hdfs://ns1/</value>
- </property>
- <!-- 指定hadoop临时目录 -->
- <property>
- <name>hadoop.tmp.dir</name>
- <value>/opt/Hadoop/hadoop-2.7.2/tmp</value>
- </property>
- <!-- 指定zookeeper地址 -->
- <property>
- <name>ha.zookeeper.quorum</name>
- <value>drguo3:2181,drguo4:2181,drguo5:2181</value>
- </property>
- </configuration>
修改hdfs-site.xml
[html] view plain copy
- <configuration>
- <!--指定hdfs的nameservice为ns1,需要和core-site.xml中的保持一致 -->
- <property>
- <name>dfs.nameservices</name>
- <value>ns1</value>
- </property>
- <!-- ns1下面有两个NameNode,分别是nn1,nn2 -->
- <property>
- <name>dfs.ha.namenodes.ns1</name>
- <value>nn1,nn2</value>
- </property>
- <!-- nn1的RPC通信地址 -->
- <property>
- <name>dfs.namenode.rpc-address.ns1.nn1</name>
- <value>drguo1:9000</value>
- </property>
- <!-- nn1的http通信地址 -->
- <property>
- <name>dfs.namenode.http-address.ns1.nn1</name>
- <value>drguo1:50070</value>
- </property>
- <!-- nn2的RPC通信地址 -->
- <property>
- <name>dfs.namenode.rpc-address.ns1.nn2</name>
- <value>drguo2:9000</value>
- </property>
- <!-- nn2的http通信地址 -->
- <property>
- <name>dfs.namenode.http-address.ns1.nn2</name>
- <value>drguo2:50070</value>
- </property>
- <!-- 指定NameNode的元数据在JournalNode上的存放位置 -->
- <property>
- <name>dfs.namenode.shared.edits.dir</name>
- <value>qjournal://drguo3:8485;drguo4:8485;drguo5:8485/ns1</value>
- </property>
- <!-- 指定JournalNode在本地磁盘存放数据的位置 -->
- <property>
- <name>dfs.journalnode.edits.dir</name>
- <value>/opt/Hadoop/hadoop-2.7.2/journaldata</value>
- </property>
- <!-- 开启NameNode失败自动切换 -->
- <property>
- <name>dfs.ha.automatic-failover.enabled</name>
- <value>true</value>
- </property>
- <!-- 配置失败自动切换实现方式 -->
- <property>
- <name>dfs.client.failover.proxy.provider.ns1</name>
- <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
- </property>
- <!-- 配置隔离机制方法,多个机制用换行分割,即每个机制暂用一行-->
- <property>
- <name>dfs.ha.fencing.methods</name>
- <value>
- sshfence
- shell(/bin/true)
- </value>
- </property>
- <!-- 使用sshfence隔离机制时需要ssh免登陆 -->
- <property>
- <name>dfs.ha.fencing.ssh.private-key-files</name>
- <value>/home/guo/.ssh/id_rsa</value>
- </property>
- <!-- 配置sshfence隔离机制超时时间 -->
- <property>
- <name>dfs.ha.fencing.ssh.connect-timeout</name>
- <value>30000</value>
- </property>
- </configuration>
先将mapred-site.xml.template改名为mapred-site.xml然后修改mapred-site.xml
[html] view plain copy
- <configuration>
- <!-- 指定mr框架为yarn方式 -->
- <property>
- <name>mapreduce.framework.name</name>
- <value>yarn</value>
- </property>
- </configuration>
修改yarn-site.xml
[html] view plain copy
- <configuration>
- <!-- 开启RM高可用 -->
- <property>
- <name>yarn.resourcemanager.ha.enabled</name>
- <value>true</value>
- </property>
- <!-- 指定RM的cluster id -->
- <property>
- <name>yarn.resourcemanager.cluster-id</name>
- <value>yrc</value>
- </property>
- <!-- 指定RM的名字 -->
- <property>
- <name>yarn.resourcemanager.ha.rm-ids</name>
- <value>rm1,rm2</value>
- </property>
- <!-- 分别指定RM的地址 -->
- <property>
- <name>yarn.resourcemanager.hostname.rm1</name>
- <value>drguo1</value>
- </property>
- <property>
- <name>yarn.resourcemanager.hostname.rm2</name>
- <value>drguo2</value>
- </property>
- <!-- 指定zk集群地址 -->
- <property>
- <name>yarn.resourcemanager.zk-address</name>
- <value>drguo3:2181,drguo4:2181,drguo5:2181</value>
- </property>
- <property>
- <name>yarn.nodemanager.aux-services</name>
- <value>mapreduce_shuffle</value>
- </property>
- </configuration>
修改slaves
[html] view plain copy
- drguo3
- drguo4
- drguo5
把Hadoop整个目录拷贝到drguo2/3/4/5,拷之前把share下doc删了(文档不用拷),这样会快点。
5.启动zookeeper集群(分别在drguo3、drguo4、drguo5上启动zookeeper)
[plain] view plain copy
- guo@drguo3:~$ zkServer.sh start
- ZooKeeper JMX enabled by default
- Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg
- Starting zookeeper ... STARTED
- guo@drguo3:~$ jps
- 2005 Jps
- 1994 QuorumPeerMain
- guo@drguo3:~$ ssh drguo4
- Welcome to Ubuntu 15.10 (GNU/Linux 4.2.0-16-generic x86_64)
- * Documentation: https://help.ubuntu.com/
- Last login: Fri Mar 25 14:04:43 2016 from 192.168.80.151
- guo@drguo4:~$ zkServer.sh start
- ZooKeeper JMX enabled by default
- Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg
- Starting zookeeper ... STARTED
- guo@drguo4:~$ jps
- 1977 Jps
- 1966 QuorumPeerMain
- guo@drguo4:~$ exit
- 注销
- Connection to drguo4 closed.
- guo@drguo3:~$ ssh drguo5
- Welcome to Ubuntu 15.10 (GNU/Linux 4.2.0-16-generic x86_64)
- * Documentation: https://help.ubuntu.com/
- Last login: Fri Mar 25 14:04:56 2016 from 192.168.80.151
- guo@drguo5:~$ zkServer.sh start
- ZooKeeper JMX enabled by default
- Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg
- Starting zookeeper ... STARTED
- guo@drguo5:~$ jps
- 2041 Jps
- 2030 QuorumPeerMain
- guo@drguo5:~$ exit
- 注销
- Connection to drguo5 closed.
- guo@drguo3:~$ zkServer.sh status
- ZooKeeper JMX enabled by default
- Using config: /opt/zookeeper-3.4.8/bin/../conf/zoo.cfg
- Mode: leader
6.启动journalnode(分别在drguo3、drguo4、drguo5上启动journalnode)注意只有第一次需要这么启动,之后启动hdfs会包含journalnode。
[plain] view plain copy
- guo@drguo3:~$ hadoop-daemon.sh start journalnode
- starting journalnode, logging to /opt/Hadoop/hadoop-2.7.2/logs/hadoop-guo-journalnode-drguo3.out
- guo@drguo3:~$ jps
- 2052 Jps
- 2020 JournalNode
- 1963 QuorumPeerMain
- guo@drguo3:~$ ssh drguo4
- Welcome to Ubuntu 15.10 (GNU/Linux 4.2.0-16-generic x86_64)
- * Documentation: https://help.ubuntu.com/
- Last login: Fri Mar 25 00:09:08 2016 from 192.168.80.149
- guo@drguo4:~$ hadoop-daemon.sh start journalnode
- starting journalnode, logging to /opt/Hadoop/hadoop-2.7.2/logs/hadoop-guo-journalnode-drguo4.out
- guo@drguo4:~$ jps
- 2103 Jps
- 2071 JournalNode
- 1928 QuorumPeerMain
- guo@drguo4:~$ exit
- 注销
- Connection to drguo4 closed.
- guo@drguo3:~$ ssh drguo5
- Welcome to Ubuntu 15.10 (GNU/Linux 4.2.0-16-generic x86_64)
- * Documentation: https://help.ubuntu.com/
- Last login: Thu Mar 24 23:52:17 2016 from 192.168.80.152
- guo@drguo5:~$ hadoop-daemon.sh start journalnode
- starting journalnode, logging to /opt/Hadoop/hadoop-2.7.2/logs/hadoop-guo-journalnode-drguo5.out
- guo@drguo5:~$ jps
- 2276 JournalNode
- 2308 Jps
- 1959 QuorumPeerMain
- guo@drguo5:~$ exit
- 注销
- Connection to drguo5 closed.
在drguo4/5启动时发现了问题,没有journalnode,查看日志发现是因为汉语注释造成的,drguo4/5全删了问题解决。drguo4/5的拼音输入法也不能用,我很蛋疼。。镜像都是复制的,咋还变异了呢。
7.格式化HDFS(在drguo1上执行)
[plain] view plain copy
- guo@drguo1:/opt$ hdfs namenode -format
这回又出问题了,还是汉语注释闹得,drguo1/2/3也全删了,问题解决。
注意:格式化之后需要把tmp目录拷给drguo2(不然drguo2的namenode起不来)
[plain] view plain copy
- guo@drguo1:/opt/Hadoop/hadoop-2.7.2$ scp -r tmp/ drguo2:/opt/Hadoop/hadoop-2.7.2/
8.格式化ZKFC(在drguo1上执行)
[plain] view plain copy
- guo@drguo1:/opt$ hdfs zkfc -formatZK
9.启动HDFS(在drguo1上执行)
[plain] view plain copy
- guo@drguo1:/opt$ start-dfs.sh
10.启动YARN(在drguo1上执行)
[plain] view plain copy
- guo@drguo1:/opt$ start-yarn.sh
PS:
1.drguo2的resourcemanager需要手动单独启动:
yarn-daemon.sh start resourcemanager
2.namenode、datanode也可以单独启动:
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
3.NN 由standby转化成active
hdfs haadmin -transitionToActive nn1 --forcemanual
大功告成!!!
是不是和之前规划的一样0.0
- 2016-06-14 14:003楼
-
nn standby切换为 active:hdfs haadmin -transitionToActive nn1 --forcemanual