hadoop集群的搭建 (完全分布式)

这里使用7台机器安装分布式
前奏
1.创建一台虚拟机
2.配置静态Ip
3.安装jdk,配置环境变量
卸载之前的jdk 查看:rpm -qa | gerp java ;卸载: rpm -e 包名
环境变量:
export JAVA_HOME=/app/jdk1.7.0_67
export PATH= JAVAHOME/bin: J A V A H O M E / b i n : PATH
export CLASSPATH=.: JAVAHOME/lib/dt.jar: J A V A H O M E / l i b / d t . j a r : JAVA_HOME/lib/tools.jar
4. 关闭防火墙
5.克隆多台机器
6.修改各个机器的主机名:/etc/sysconfig/network,注:这里因为是克隆出来的机器,所以配置静态ip会出问题,参看解决办法。
7.在一台机器上修改ip和主机名映射关系:/etc/hosts文件
8.远程拷贝hosts文件到其他别的机器上:scp -r /etc/hosts root@xxx:/etc/hosts
9.设置免密码登录
a.生成lx1的公钥和密钥:在lx1上执行,ssh-keygen -t rsa
b.把lx1的公钥追加到另外7台机器的authorized_keys文件中
ssh-copy-id lx1
….
ssh-copy-id lx7
c.和b步骤一样,设置另外六台机器到其他机器上的免密码登录
其实,不用全部都拷贝,原则如下:
①.启动hdfs的时候,是通过lx1上执行start-dfs,sh
会启动几个机器:
lx1上的namenode
lx2上的namenode
lx5,lx6,lx7上的datanode
这个启动方式是ssh远程启动,所以需要配置lx1到lx1,lx2,lx5,lx6,lx7上的免登陆。
②.启动yarn的时候,是在lx3和lx4上分别本地启动,
在启动lx3的时候会同时远程启动lx5,lx6,lx7上的nodemanager
所以,需要配置lx3到lx5,lx6,lx7上的免登陆

服务器规划
lx1 namenode zkfc
lx2 namenode zkfc
lx3 resourcemanager
lx4 resourcemanager
lx5 datanode nodemanager journalnode zookeeper
lx6 datanode nodemanager journalnode zookeeper
lx7 datanode nodemanager journalnode zookeeper

或者我们可以根据进程进行划分:
namenode: lx1,lx2
因为zkfc是用来监控namenode的,所以zkfc也放在lx1和lx2
resourcemanager:lx3,lx4
datanode:lx5,lx6,lx7
对于nodemanager,是yarn的小弟,用来处理mr任务的,为了达到就近取资源的效果,一般和datanode部署在一起
zookeeper:lx5,lx6,lx7
journalnode和zkfc都是依赖zookeeper的,理论上讲,应该放在另外的服务器上,这里机器限制,和datanode放在一起
jounlnode:lx5,lx6,lx7. 轻量级进程,没必要单独使用服务器,所以可以随意挑选机器就可以了,这里随便选出三台。

安装Hadoop
①.解压hadoop
②.配置hadoop环境变量
修改/etc/profile
内容:
export HADOOP_HOME=/app/hadoop-2.8.0
export PATH= HADOOPHOME/bin: H A D O O P H O M E / b i n : HADOOP_HOME/sbin: JAVAHOME/bin: J A V A H O M E / b i n : PATH
③.修改配置文件
a. 修改 hadoop_env.sh
export JAVA_HOME=/app/jdk1.7.0_67
b.修改 core-site.xml



fs.defaultFS
hdfs://ns1



hadoop.tmp.dir
/program/hadoop-2.6.0/tmp



ha.zookeeper.quorum
hadoop5:2181,hadoop6:2181,hadoop7:2181


c. 修改hdfs-site.xml



dfs.nameservices
ns1



dfs.ha.namenodes.ns1
nn1,nn2



dfs.namenode.rpc-address.ns1.nn1
hadoop1:9000



dfs.namenode.http-address.ns1.nn1
hadoop1:50070



dfs.namenode.rpc-address.ns1.nn2
hadoop2:9000



dfs.namenode.http-address.ns1.nn2
hadoop2:50070



dfs.namenode.shared.edits.dir
qjournal://hadoop5:8485;hadoop6:8485;hadoop7:8485/ns1



dfs.journalnode.edits.dir
/devesoft/hadoop-2.6.0/journaldata



dfs.ha.automatic-failover.enabled
true



dfs.client.failover.proxy.provider.ns1
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


d. 修改mapred-site.xml,需要使用mapred-site.xml.template改名



mapreduce.framework.name
yarn


e. 修改yarn-site.xml



yarn.resourcemanager.ha.enabled
true



yarn.resourcemanager.cluster-id
1602b



yarn.resourcemanager.ha.rm-ids
rm1,rm2



yarn.resourcemanager.hostname.rm1
hadoop3


yarn.resourcemanager.hostname.rm2
hadoop4



yarn.resourcemanager.zk-address
hadoop5:2181,hadoop6:2181,hadoop7:2181


yarn.nodemanager.aux-services
mapreduce_shuffle


f.修改slaves文件
slaves是指定子节点的位置,因为要在lx1上启动HDFS、在lx3启动yarn,所以lx1上的slaves文件指定的是datanode的位置,lx3上的slaves文件指定的是nodemanager的位置
内容如下:
slave05
slave06
slave07
注意:一般情况下,DN和NM都是用了相同的机器,如果不是的话,请在拷贝了hadoop的jar包之后,重新修改lx3上的slaves文件
④.使用scp拷贝hadoop到其他6台机器,
这里直接拷贝app目录,把jdk和hadoop都拷贝了
为了省事,可以拷贝配置文件/etc/profiles

安装ZooKeeper
①.在lx5上解压zookeeper,
②.修改配置文件zoo.cfg(使用zoo-example.cfg修改得到)

③.去data里面创建myid,里面写入自己的id 1
④.配置环境变量,
⑤.复制zookeeper到lx6,lx7,当然可以把/etc/profile再复制一遍,然后注意修改lx6,lx7上的myid内容

启动
注意:一定要严格按照顺序启动
①.启动zookeeper
分别在lx5,lx6,lx7上分别执行命令:zkServer.sh start
验证:执行zkServer.sh status,如果能看到下面的界面,证明zookeeper启动了,

使用jps,能够看到QuorumPeerMain进
②.启动journalnode【2.8版本不需要自己手动启动,启动hdfs的时候会自动启动】
分别在lx5,lx6,lx7上分别执行命令:hadoop-daemon.sh start journalnode
验证:使用jps查看到JournalNode进程就可以了
③.格式化HDFS(注意,格式化HDFS之前,必须启动journalnode)
在lx1上执行命令:hdfs namenode -format
然后,scp把tmp拷贝到lx2的hadoop里面,这样才能保证两个NN都有
④.格式化ZKFC
在lx1上执行hdfs zkfc -formatZK就可以了
⑤.启动hdfs
在lx1上执行start-dfs.sh
⑥.启动yarn
在lx3上执行start-yarn.sh在lx4上执行yarn-daemon.sh start resourcemanager(这个需要手动启动)
注意事项:

如果多次格式化,那么格式化之前,必须把所有的机器上的/tmp文件都删除掉,否则datanode上会保存一个之前的namespaceID,不一致,导致datanode启动不了
可以执行hadoop-daemon.sh start namenode来单独启动namenode
可以执行hadoop-daemon.sh start datanode来单独启动datanode
测试与验证
①.查看各个机器上的进程,需要是下面这个样子
lx1

lx2

lx3

lx4

lx5

lx6

lx7

②.查看网页
分别查看lx1和lx2的namenode的状态
lx1

lx2

③.验证hdfs
上传一个文件,结果如下

④.验证mr
执行一个mr任务看能否成功,比喻计算PI ,在运行的时候去nodemanager上执行jps查看进程(lx5,lx6,lx7)
如果发现下面的错误:
This token is expired. current time is 1497735640102 found 1497517037948
Note: System times on machines may be out of sync. Check system time and time zones.
解决办法是:向所有的XShell窗口发送下面的命令:
date -s “2012-11-03 10:25:25”
⑤.验证hdfs的ha
a.在lx1上杀死namenode进程,
再查看lx2的网页
效果如下:

再次启动lx1上的namenode后,发现是standby了
b.关闭active namenode所在的机器,查看,发现也自动切换了
注意:即便正在上传文件的时候,lx1挂掉了,一样可以继续工作,很强大。

⑥.验证RM的HA
杀死lx3上的RM进程,
再执行一个Mr任务,发现结果如下

……

发现还是完成了MR任务,
注意:MR的HA,如果任务执行一般的时候,lx3挂掉,任务会失败。没有hdfs的ha强大。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值