个人配置 : 笔记本(deepin linux ) + vritualBox ( ubuntu ) x 3
说明 : 一定要看 !!!
在上篇 hadoop - hadoop2.6 分布式 - 集群环境搭建 - JDK安装配置和SSH安装配置与免密码登陆(集群中)
中 ,配置 SSH免密码登陆,是在各个系统 用户下进行配置的,然而,可以进行正常的连接使用,但并不能就行配置Hadoop , 因为没有办法 ,让其 的 目录一致 !!!比如 note1节点 ,用户为 note1 , 如果 在note1 用户下进行配置,则在配置Hadoop的时候,没有办法进行配置 SSH的位置,配置一致!!!
在linux下 ,有 root 目录 ,所以在进行配置的时候,需要讲上篇的SSH免密码登陆的配置进行在root用户下重新进行配置!这样在配置的时候,就可以配置一样了,均是在root下,目录统一,容易配置。 还有的就是权限问题了,root下权限较为高,所以在配置的时候,也是很方便的,当然不用担心安全问题!
完!
准备 :
1) hadoop2.6 和 zookeeper3.4.6
百度云下载
也可以在 apache官方网站下载 , 比如hadoop官方网站下载 和 zookeeper官方网站下载
2)可以免密码登陆的linux 系统 4台
我这是3台 ubuntu 系统 和 本机的 deepin linux 系统 ;
当然 ,同时也可以 免密码登陆 :
注意 :一定是在 root 下配置 免密码登陆,不是的话,很麻烦 ! 没台都是!
还有 这里在进行 ssh 登陆的时候,使用的是机子名称 ,即 root@note1 , 前面是 使用 note1的 IP地址,也可以实现,这里为了方便,在宿主计算机的 hosts文件进行主机配置,所以可以使用 root@note1 进行登陆!
2.1 背景 (hadoop2.x 使用的背景)
在hadoop1.x 中使用的问题 :
(1)HDFS存在的问题:
1.NameNode单点故障,难以应用与在线场景
2.NameNode压力过大,且内存受限,影响系统扩展性
(2)MapReduce存在的问题:
1.JobTracker访问压力大,影响系统拓展性
2.难以支持除了MapReduce之外的计算框架,比如Spark,Storm等
Spark :内存计算框架,Storm 流式计算框架;
2.2.Hadoop2.x
1).HDFS :NN Federation , HA ;
2).MapReduce : 运行 在YARN上的MR;
3). YARN : 资源管理系统
2.3.HDFS 2.x
1).解决了HDFS的单点故障和内存受限问题
2).解决单点故障
2.1) HDFS HA :通过主备NameNode解决
2.2 )如果主NameNode发生故障,则切换到备NameNode上
2.4.解决内存受限问题
2.11HDFSFederation
2.12 水平拓展,支持多个NameNode
2.13 每个NameNode分管一部分目录
2.14 所有的NameNode共享所有的DataNode存储资源
2.15.仅仅是架构上发生了变化,使用方式不变化;
2.16.对HDFS使用者透明,Java API 还可以使用!
2.5.HDFS - Federation
2.5.1 通过多个namenode / namespcae 把元数据的存储和管理分散到多个节点中,
使得namenode/namespace可以通过增加机器来进行水平拓展;
2.5.2 能把单个namenode的负载分散到多个节点中,在HDFS数据规模较大的时候,不会也降低HDFS的性能。可以通过多个namespace来隔离不同类型的应用,把不同类型的应>用HDFS元数据存储和管理分派到不同的namenode中;
2.5.3 每个NameNode独立工作,数据共享;
2.6 .HDFS 2.x HA
主备NameNode
2.6.1 解决单点故障问题
(1)主NameNode对外提供服务,备NameNode同步主NameNode元数据以待切换;
(2)所有的DataNode同时向两个NameNode汇报数据块信息
2.6.2 两种切换选择
(1)手动切换:通过命令实现主备之间的切换,可以用HDFS升级等场合
(2)自动切换:基于Zookeeper的实现
2.6.3 基于Zookeeper自动切换方案
(1)Zookeeper Failover Controller :监控NameNode的健康状态,并向Zookeeper注册NameNode
(2) NameNode挂掉后, ZKFC 为NameNode竞争锁,获得ZKFC锁的NameNode变为active
2.7.YARN
yarn : Yet Another Resource Negoiator
2.7.1 Hadoop2.x 资源管理系统
(1) 核心思想:将MRv1 中 的 JobTracker的资源管理和任务调度两个功能分开,>分别由ResourceManager和ApplicationMaster进程实现
(2) ResourceManaer :负责整个集群的资源管理和调度
(3) ApplicationMaster : 负责应用程序相关的事务,比如任务调度,任务监控和
容错;
2.7.2 YARN的引入使得多个计算框架可以运行在一个集群中
(1)每个应用程序对应一个ApplicationMaster
(2) 目前多个计算框架可以运行在YARN上,比如MapReduce ,Spark ,Storm 等;
2.8 .MapReduc On YARN
将MapReduce作业直接运行在YARN上,而不是由JObTracker和TaskTracker构建的MRv>系统中
2.8.1 基本功能模块
(1)YARN负责资源管理和调度
(2)MRAppMaster :负责任务切分,任务调度,任务监控和容错等;
(3)MapTask/ReduceTask :任务驱动,与MRv1一致;
2.8.2 每个MapReduce作业对应一个MRAppMaster
(1)MrAppMaster任务调度
(2)YARN将资源分配给MRAPPMaster
(3)MRAppMaster进一步将资源分配给内部的任务
2.8.3 MRAppMater容错
(1)失败:由YARN重新启动
(2)任务失败后,MRAppMaster重新申请资源;
3. 配置
3.1 给每台复制hadoop.tar.gz
当然也可以先不复制,可以在一台上配置完毕后,每台都复制一份!
yuan@LABELNET:/mnt/8A962B78962B6443/BIGDATA/Install$ scp hadoop-2.6.0.tar.gz
[email protected]:~
解压 :
root@note3:~$ tar -zxvf hadoop-2.6.0.tar.gz
root@note3~$mv hadoop-2.6.0 ./hadoop-2.6
当然也可以建立软链接 :
ln -sf /xx /xxx/xx /Hadoop/hadoop2.6
文件夹全部删除 :
rm -rf 文件夹
3.2 修改 hadoop-env.sh
/etc/hadoop/,修改其中的JAVA_HOME为 本机的Java 安装目录 ;
3.3 安装节点配置如下
(1)namenode : node1 , node2
(2) datanode : node2 , node3, node4
(3) zookeeper : node1 ,node2,node3
(4) zkfc : node1,node2 (和namenode一致)
(5) journalnode :node1 ,node2,node3
(6) RourceManager : node1
(7) DataManager : node2,node3,node4 (和datanode一致)
我的环境中没有 note4,但是我的有 note0 ,所以依次前推就可以了,比如 我的namenode : node0,node1 ;
3.4 配置 hdfs-site.xml
配置 namenode : node0,node1 ;
(1) 配置服务名 :配置自己的服务名
dfs.nameservices
yuannews
dfs.ha.namenodes.yuannews
nn1,nn2
dfs.namenode.rpc-address.yuannews.nn1
note0:8020
dfs.namenode.rpc-address.yuannews.nn2
note1:8020
dfs.namenode.http-address.yuannews.nn1
note0:50070
dfs.namenode.http-address.yuannews.nn2
note1:50070
dfs.namenode.shared.edits.dir
qjournal://note1:8485;note2:8485;note3:8485/yuannews
(6) 配置 提供客户端的一个类 :修改服务名
dfs.client.failover.proxy.provider.yuannews
org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider
dfs.ha.fencing.methods
sshfence
dfs.ha.fencing.ssh.private-key-files
/root/.ssh/id_rsa
dfs.journalnode.edits.dir
/opt/hadoop/jn/data/
dfs.ha.automatic-failover.enabled
true
服务名一定要都写对,不然报错,很纠结的!!!
3.5 配置 core-site.xml
(1)配置dfs的入口 :配置服务名
fs.defaultFS
hdfs://yuannews
ha.zookeeper.quorum
note0:2181,note1:2181,note2:2181
hadoop.tmp.dir
/opt/hadoop2
在其中配置 所有集群中机子的地址
192.168.56.3
192.168.56.4
192.168.56.5
3.7 配置 zookeeper
zookeeper 配置在 note0,note1,note2 上;
(1)下载好以后,进行解压 !!
tar -zxvf zookeeper-3.4.6.tar.gz
(2)重命名 zoo-simple.cfg 文件
进入 conf , 命名 zoo-simple.cfg 为 zoo.cfg , 后进行下面配置
(3)配置 zoo.cfg
一张图看懂就配置好了,看不懂就 呵呵了。
注意 :zookeeper所在节点都需要进行配置!!
(4)复制zookeeper到相应节点的机子上
root@LABELNET:~$scp -r zookeeper-3.4.6/ root@note1:~/
每个相应节点的机子都需要进行配置 全局!
(6)可以尝试着启动 zookeeper
zkServer.sh start
启动的话,则可以在JPS下看见 QuorumPeerMain 进程!,否则看看 你的 myid 配置的是否正确!
3.8 格式化
(1)格式化 namenode
root@LABELNET:~/hadoop-2.6/bin# ./hdfs namenode -format
成功会出现 successfully 字样,否则回报错!
(2)配置第二个 namenode
首先要 启动 第一个namenode ,
root@LABELNET:~/hadoop-2.6/sbin# ./hadoop-daemon.sh start namenode
其次是 将初始化过的 dfs 复制到 第二个 节点上:
在第二个 namenode节点上执行 下面命令:
root@note1:~/hadoop-2.6/bin# ./hdfs namenode -bootstrapStandby
当然 也可以你在 核心配置文件中 core-site.xml 配置的 dfs 的目录 : /opt/hadoop2 目录下查看,看看 两个目录下自动生成的文件和文件夹是否一样!
(3)格式化 zkfc : 在一个 zkfc 节点上执行就可以了
root@LABELNET:~/hadoop-2.6/bin# ./hdfs zkfc -formatZK
3.9 启动
root@LABELNET:~/hadoop-2.6/sbin# ./start-dfs.sh
日志 :
Starting namenodes on [note0 note1]
note0: starting namenode, logging to /root/hadoop-2.6/logs/hadoop-root-namen
ode-LABELNET.out
note1: starting namenode, logging to /root/hadoop-2.6/logs/hadoop-root-namen
ode-note1.out
192.168.56.4: starting datanode, logging to /root/hadoop-2.6/logs/hadoop-roo
t-datanode-note2.out
192.168.56.5: starting datanode, logging to /root/hadoop-2.6/logs/hadoop-roo
t-datanode-note3.out
192.168.56.3: starting datanode, logging to /root/hadoop-2.6/logs/hadoop-roo
t-datanode-note1.out
Starting journal nodes [note1 note2 note3]
note2: starting journalnode, logging to /root/hadoop-2.6/logs/hadoop-root-jo
urnalnode-note2.out
note3: starting journalnode, logging to /root/hadoop-2.6/logs/hadoop-root-jo
urnalnode-note3.out
note1: starting journalnode, logging to /root/hadoop-2.6/logs/hadoop-root-jo
urnalnode-note1.out
Picked up _JAVA_OPTIONS: -Dawt.useSystemAAFontSettings=gasp
Starting ZK Failover Controllers on NN hosts [note0 note1]
note0: starting zkfc, logging to /root/hadoop-2.6/logs/hadoop-root-zkfc-LABE
LNET.out
note1: starting zkfc, logging to /root/hadoop-2.6/logs/hadoop-root-zkfc-note
1.out
3.11 浏览器中查看
namenote 的两个节点 :
http://note0:50070/
http://note1:50070/
4.分布式配置完毕
对了,不要忘了,将 hadoop 向每台机子复制一份!!
配置中注意几点:
(1)hdfs-site.xml 的配置 服务名一定要对!
(2)zookeeper 的 myid 和 server.x 一定要对!
(3)namenote 初始化一定要正确,包括非第一个namenode,执行初始化要正确!
(4) zkfc 初始化!