一、Hadoop集群角色
IP
|
hostname |
Name
Node
|
Journal Node
|
Data
Node
|
Resource Manager
|
Node
Manager
|
ZooKeeper
|
172.16.219.122
|
LAB122 JN1 ZK1 NN1
|
Active NN |
√ |
√ |
√ | √ |
√
|
172.16.219.123
|
LAB123 JN2 ZK2 NN2
|
StandbyNN
|
√ | √ |
√
|
√
|
√
|
172.16.219.124
|
LAB124 JN3 ZK3
|
|
√ | √ |
√
|
√
|
√
|
注:生产环境中DataNode和共享NodeManage一台机器,HA的NN1和NN2两台机器,JN[1-3]各占一台机器(或者其它两台和NN共用),ZK[1-3]各占一台机器。
ZooKeeper的安装配置参见《02.ZooKeeper安装配置》之安装配置(集群) 部分
//TODO 猜想:NN和JN共用一台机器可能会性能稍高点,因为本地Socket。暂无空试验。
二、环境配置
1、防火墙关闭
2、SeLinux关闭
3、添加用户和组
4、用户文件数
5、host配置
6、ssh无密码登录
7、jdk安装
三、Hadoop配置
Hadoop的下载与解压
到hadoop.apache.org上下载Hadoop的安装文件,笔者使用的是 “hadoop-1.0.3.tar.gz”。
在发布式安装模式下,所有服务器Hadoop的安装目录需要一样。笔者安装的位置为/opt/hadoop,使用解压命令如下:
tar -zxvf hadoop-2.2.0.tar.gz -C /opt/
ln -s /opt/hadoop-2.2.0 /opt/hadoop
chown -R hadoop:hadoop /opt/hadoop
su hadoop
配置Hadoop
修改hadoop目录下 etc/hadoop/hadoop-env.sh的环境变量:
export JAVA_HOME=/opt/java/jdk
注:/opt/java/jdk为JAVA_HOME
此文件可根据实际情况进行JVM内存配置参数的调整
core-site.xml
修改hadoop目录下etc/hadoop/core-site.xml的配置文件,在<configuration>标签中添加如下内容:
<property> <name>fs.defaultFS</name> <value>hdfs://mycluster</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/${user.name}/tmp</value> </property> <property> <name>fs.trash.interval</name> <value>1440</value> </property>
说明:
fs.defaultDFS:这里mycluster即为自定义的NameServiceID
hadoop.tmp.dir:设置Hadoop临时目录,(默认/tmp,机器重启会丢失数据!)
fs.trash.interval:开启Hadoop回收站
hdfs-site.xml
修改hadoop目录下conf/hdfs-site.xml的配置文件,在<configuration>标签中添加如下内容:
<!-- enable ha --> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- name for logic ns, and nn host key --> <property> <name>dfs.nameservices</name> <value>mycluster</value> <description>提供服务的NS逻辑名称,与core-site.xml里的对应</description> </property> <property> <name>dfs.ha.namenodes.mycluster</name> <value>nn1,nn2</value> <description>列出该逻辑名称下的NameNode逻辑名称</description> </property> <!-- rpc & http --> <property> <name>dfs.namenode.rpc-address.mycluster.nn1</name> <value>NN1:8020</value> <description>指定NameNode的RPC位置</description> </property> <property> <name>dfs.namenode.http-address.mycluster.nn1</name> <value>NN1:50070</value> <description>指定NameNode的Web Server位置</description> </property> <property> <name>dfs.namenode.rpc-address.mycluster.nn2</name> <value>NN2:8020</value> <description>指定NameNode的RPC位置</description> </property> <property> <name>dfs.namenode.http-address.mycluster.nn2</name> <value>NN2:50070</value> <description>指定NameNode的Web Server位置</description> </property> <!-- journal --> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://JN1:8485;JN2:8485;JN3:8485/mycluster</value> <description>指定用于HA存放edits的共享存储</description> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/${user.name}/jn_data</value> </property> <!-- fencing --> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> <description>指定HA做隔离的方法,缺省是ssh,可设为shell</description> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/hadoop/.ssh/id_dsa</value> <description>id_dsa或id_rsa,具体与SSH无密码登录的密钥类型有关</description> </property> <!-- zookeeper --> <property> <name>ha.zookeeper.quorum</name> <value>ZK1:2181,ZK2:2181,ZK3:2181</value> <description>指定用于HA的ZooKeeper集群机器列表</description> </property> <property> <name>ha.zookeeper.session-timeout.ms</name> <value>5000</value> <description>指定ZooKeeper超时间隔,单位毫秒</description> </property> <!-- failover --> <property> <name>dfs.client.failover.proxy.provider.mycluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> <description>指定客户端用于HA切换的代理类,不同的NS可以用不同的代理类 </description> </property> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/home/${user.name}/dfs_name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/${user.name}/dfs_data</value> </property> <property> <name>dfs.support.append</name> <value>true</value> </property> <property> <name>dfs.datanode.max.xcievers</name> <value>4096</value> </property>
说明:
dfs.replication:文件复本数
dfs.namenode.name.dir:设置NameNode存储元数据(fsimage)的本地文件系统位置
dfs.datanode.data.dir:设置DataNode存储数据的本地文件系统位置
dfs.support.append:设置HDFS是否支持在文件末尾追加数据
dfs.datanode.max.xcievers:设置datanode可以创建的最大xcievers数
yarn-site.xml
修改hadoop目录下etc/hadoop/yarn-site.xml的配置文件,在<configuration>标签中添加如下内容:
<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.hostname</name> <value>NN1</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property>
注:属性名为mapred.job.tracker来配置job tracker交互端口,
mapred-site.xml
修改hadoop目录下etc/hadoop/mapred-site.xml的配置文件,在<configuration>标签中添加如下内容:
<property> <name>mapreduce.framework.name</name> <value>yarn</value> </property>
slave
配置子节点:修改hadoop目录etc/hadoop/slave文件,每行一个节点,伪分布式修改内容为:
master
执行
1、启动journalnode
在JN1,JN2,JN3上分别启动journalnode:
sbin/hadoop-daemon.sh start journalnode
2、在使用一个分布式文件系统前需要对其进行格式化:
ActiveNN:
bin/hdfs namenode –format
sbin/hadoop-daemon.sh start namenode
StandbyNN:
hdfs namenode -bootstrapStandby
3、启动ZooKeeper
参考ZooKeeper的安装配置
初始化ZooKeeper
bin/hdfs zkfc -formatZK
启动Hadoop守护进程:
./sbin/start-all.sh
Hadoop守护进程的日志写入到${HADOOP_LOG_DIR}目录(默认为logs下)。
完成全部操作后,停止Hadoop守护进程:
$ sbin/stop-all.sh
验证集群
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.4.0.jar randomwriter out
Hadoop自带的WEB管理界面
浏览NameNode和JobTracker的WEB管理界面,它们的地址默认为:
NameNode - http://master :50070/dfshealth.jsp
Yarn - http://master:8088
eclipse:
ant jar -Dversion=2.4.0 -Declipse.home=D:\WorkTools\MyEclipse10\Common -Dhadoop.home=D:\SDK\hadoop-2.4.0
ant jar -Dversion=2.4.0
参考:
http://www.sqlparty.com/hdfs%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA-namenode-ha%E6%90%AD%E5%BB%BA%E5%AE%9E%E5%BD%95/
http://www.sqlparty.com/hdfs%E7%8E%AF%E5%A2%83%E6%90%AD%E5%BB%BA-namenode-ha%E5%8E%9F%E7%90%86%E4%B8%8E%E5%9F%BA%E6%9C%AC%E9%85%8D%E7%BD%AE/
//TODO 从已使用的集群安装HA(Ambari)
本人原创,转载保留链接:http://taoistwar.iteye.com/blog/2092015
相关推荐
### Hadoop 2.x 安装与配置详解 #### 一、准备工作 在开始Hadoop 2.x集群的搭建之前,需要确保以下条件已经满足: 1. **操作系统环境**: 所有的服务器节点均应安装Linux操作系统。 2. **Java Development Kit ...
在Hadoop 2.x版本之后,引入了Quorum Journal Manager (QJM) 来增强NameNode的高可用性,使得在NameNode故障时能够无缝切换,保持集群的正常运行。 Quorum Journal Manager是Hadoop HDFS(Hadoop Distributed File ...
- HA(High Availability):在2.7.1版本中,HDFS支持NameNode的高可用性,通过使用Secondary NameNode和Quorum Journal Manager实现,确保了服务的连续性。 - HDFS Federation:允许多个独立的命名空间并行运行在...
在Hadoop 2.0中,有两种实现HDFS HA的方法:NFS和Quorum Journal Manager(QJM)。QJM更常用,因为它无需额外的硬件支持。在QJM方案中,NameNode通过JournalNode集群同步元数据,多数JournalNode确认即视为写入成功。...
4. **设置共享存储**:NameNode的元数据需要存储在一个共享的存储系统中,如NFS或Quorum Journal Manager(QJM)。在`hdfs-site.xml`中配置`dfs.journalnode.edits.dir`指向共享存储路径。 5. **配置Zookeeper**:...
备份NameNode通过共享存储系统与主NameNode保持元数据同步,Hadoop提供了NFS、Quorum Journal Manager (QJM)和BookKeeper等多种选择。 c) **HDFS Federation**:通过Federation,Hadoop的HDFS集群可以拥有多个...
为了解决这一问题,Hadoop引入了HA机制,通过设置两个NameNode实例(一个主动、一个被动),并利用共享存储(如Quorum Journal Manager,QJM)来同步状态信息,实现了NameNode的故障自动转移功能。 #### 集群环境...
可以选择的共享存储方案包括NFS、QJM(Quorum Journal Manager)或BookKeeper。其中,QJM是一种较为常用的选择,因为它提供了更强大的容错能力和一致性保证。 #### 三、基于QJM的HA解决方案 在基于QJM的HA解决方案...
此外,还详细介绍了HDFS(Hadoop Distributed File System)的高可用性特性,如HA Namenode和Quorum Journal Manager,这些都是确保Hadoop集群稳定运行的关键组件。 第四版还涉及了MapReduce 2.0,它是Hadoop处理大...
7. **配置 High Availability (HA) 或 Quorum Journal Manager (QJM)** - HA 提供 NameNode 高可用性,QJM 用于数据同步 8. **验证 Hadoop 安装** - 启动 Hadoop 服务并运行测试任务 9. **安装其他组件** - ...
5. `dfs.namenode.shared.edits.dir`: 指定共享编辑日志的目录,通常是Quorum Journal Manager(QJM)。 6. `dfs.client.failover.proxy.provider.mycluster`: 配置客户端使用的Failover Proxy Provider类。 接下来...
本文的目的是为当前最新版本的Hadoop 2.8.0提供最为详细的安装说明,以帮助减少安装过程中遇到的困难,并对一些错误原因进行说明,hdfs配置使用基于QJM(Quorum Journal Manager)的HA。本文的安装只涉及了hadoop-...
在本文中,我们将详细讨论如何配置Hadoop HA版本,特别是使用Quorum Journal Manager (QJM) 实现HDFS的HA。 首先,我们需要理解Hadoop HA的基本架构。Hadoop HA主要涉及两个关键组件:NameNode和ResourceManager。...
- 使用Quorum Journal Manager (QJM)实现NameNode的高可用性。 - 高可用性集群需要硬件对等的NameNode和JournalNode机器。JournalNode应为奇数数量,如3、5或7台,以保证Quorum的形成。 - 配置`hdfs-site.xml`以...
通过使用Quorum Journal Manager(QJM),Hadoop实现了对共享存储设备的高可用访问,这允许Active NameNode和Standby NameNode对共享数据进行日志追加,而不会造成数据冲突。QJM使用一组JournalNode节点来确保日志的...
不过,每个NameNode仍然是单点故障,需要额外的备份机制,如Quorum Journal Manager(QJM)或BookKeeper来确保高可用。 此外,Hadoop 2.2.0及以后的版本还引入了NameNode HA(High Availability),即主备NameNode...
- **NameNode HA**:需要至少两台机器作为主NameNode,通过Quorum Journal Manager (QJM) 实现日志同步,确保数据的一致性。 - **Secondary NameNode**:不再承担主NameNode的备份角色,而是转变为CheckPoint Node...
这通过增加JournalNode角色和共享编辑日志(QJM, Quorum Journal Manager)来实现。 2. ** Federation**:Hadoop 2.2支持NameNode Federation,将单个全局命名空间划分为多个独立的命名空间,每个都有自己的...
这两个NameNode共享相同的元数据,并通过一种称为"Quorum Journal Manager"(QJM)的日志同步机制保持一致。 2. **JournalNodes**:QJM是日志同步的关键组件,它由多个JournalNode组成,负责存储NameNode的编辑日志...
Cloudera的Quorum Journal Manager(QJM)进一步提高了这种一致性,减少了对单一共享存储的依赖。 Federation则是为了解决随着集群规模扩大,单个NN处理元数据的能力不足的问题。在Federation中,HDFS被划分为多个...