标签:
1 硬件环境
Ubuntu 14.10 64位
2 软件环境
openjdk-7-jdk
hadoop 2.6.0
zookeeper-3.4.6
hbase-1.0.0
3 机群规划
3.1 zookeeper配置-机器结点
192.168.1.100 1421-0000
192.168.1.106 1421-0003
192.168.1.107 1421-0004
192.168.1.108 1421-0005
192.168.1.109 1421-0006
3.2 hadoop配置-机器结点
192.168.1.100 1421-0000 DN节点,Journal节点,zookeeper节点
192.168.1.101 1421-0001 备NN,DN节点
192.168.1.102 1421-0002 主NN
192.168.1.103 1423-0001 DN节点,主RM
192.168.1.104 1423-0002 DN节点,备RM
192.168.1.105 1423-0003 DN节点,JobHistory
192.168.1.106 1421-0003 DN节点,Journal节点,zookeeper节点
192.168.1.107 1421-0004 DN节点,Journal节点,zookeeper节点
192.168.1.108 1421-0005 DN节点,Journal节点,zookeeper节点
192.168.1.109 1421-0006 DN节点,Journal节点,zookeeper节点
说明:
1.在hadoop2.0中通常由两个NameNode组成,一个处于active状态,另一个处于standby状态。Active NameNode对外提供服务,而Standby NameNode则不对外提供服务,仅同步active namenode的状态,以便能够在它失败时快速进行切换。
hadoop2.0官方提供了两种HDFS HA的解决方案,一种是NFS,另一种是QJM。这里我们使用简单的QJM。在该方案中,主备NameNode之间通过一组JournalNode同步元数据信息,一条数据只要成功写入多数JournalNode即认为写入成功。通常配置奇数个JournalNode
这里还配置了一个zookeeper集群,用于ZKFC(DFSZKFailoverController)故障转移,当Active NameNode挂掉了,会自动切换Standby NameNode为standby状态
2.hadoop-2.2.0中依然存在一个问题,就是ResourceManager只有一个,存在单点故障,hadoop-2.4.1解决了这个问题,有两个ResourceManager,一个是Active,一个是Standby,状态由zookeeper进行协调
4 集群配置
机群的安装步骤大概如下:1 JDK配置;2 SSH免密码登录设置;3 ZooKeeper配置;4 Hadoop配置;5 HBase配置
4.1 Hadoop编译与基本配置
下载Hadoop稳定版,然后用mvn进行编译
mvn package -Pdist,native -DskipTests –Dtar
即可在其目录下:/hadoop-dist/target 就可以找到编译好的 hadoop 了。编译 过程需要 jdk,maven,protobuf 和 cmake 为基础。
SSH 也可通过 apt 进行下载,在生成 key 的时候指定密码为空,其他用回车跳过设置为默认即可,在 home 下的用户目录下,找到.ssh 文件夹,通过创建
文件夹 authorized_keys,主要 Shell 命令如下:
ssh-keygen -t rsa -P ‘‘
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
其中 id_rsa.pub 位于.ssh 文件夹下,为 ssh 公钥,添加为信任方后,即可完成免密码登陆操作。
4.2 ZooKeeper配置
ZooKeeper的配置文件在conf中,名为zoo.conf,主要配置的内容位其log和data的磁盘路径,以及各个节点的基础信息。它本身提供了一个zoo_sample.cfg,我们将他复制一份,命名为
zoo.cfg,然后在其中添加一些配置,下面之列出新增的部分。
dataDir=/home/hadoop/software/cloud/zookeeper-3.4.6/zoodata dataLogDir=/home/hadoop/software/cloud/zookeeper-3.4.6/zoolog server.0=1421-0000:2888:3888 server.1=1421-0003:2888:3888 server.2=1421-0004:2888:3888 server.3=1421-0005:2888:3888 server.4=1421-0006:2888:3888
接下来需要在每个dataDir目录下新建myid文件,每个文件中输入响应的server.后面的数字,例如在1421-0000中的myid输入0.在各个目录下做相同处理,同时还要在每个文件夹建立dataDir和dataLogDir文件夹,这样ZooKeeper配置完毕
4.3 Hadoop配置
4.3.1 将hadoop_home添加到系统环境变量中
4.3.2 配置hadoop-env.sh,添加JAVA_HOME
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64
4.3.3 配置core-site.xml,主要配置ha.zookeeper.quorum等
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://hadoop-cluster</value> </property> <property> <name>ha.zookeeper.quorum</name> <value>1421-0000:2181,1421-0003:2181,1421-0004:2181,1421-0005:2181,1421-0006:2181</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/software/cloud/hadoop-2.6.0/tmp</value> <description> adoop的临时目录,其它目录会基于此路径。本地目录。只可以设置一个值;建议设置到一个足够空间的地方,而不是默认的/tmp下,服务端参数,修改需重启。本地路径 </description> </property> </configuration>
4.3.4 配置hdfs-site.xml,主要配置 dfs.nameservices、hdfs HA 特性、hdfs 副本数和 hdfs的 name 与 data 文件的磁盘存放位置,以及 SSH 文件夹位置。
<configuration> <property> <name>dfs.nameservices</name> <value>hadoop-cluster</value> <description>指定命名空间名称,可随易取</description> </property> <property> <name>dfs.ha.namenodes.hadoop-cluster</name> <value>nn1,nn2</value> <description>在命名空间下指定NameNode逻辑名</description> </property> <property> <name>dfs.namenode.rpc-address.hadoop-cluster.nn1</name> <value>1421-0002:9000</value> <description></description> </property> <property> <name>dfs.namenode.rpc-address.hadoop-cluster.nn2</name> <value>1421-0001:9000</value> <description></description> </property> <property> <name>dfs.namenode.http-address.hadoop-cluster.nn1</name> <value>1421-0002:50070</value> <description></description> </property> <property> <name>dfs.namenode.http-address.hadoop-cluster.nn2</name> <value>1421-0001:50070</value> <description></description> </property> <property> <name>dfs.namenode.servicerpc-address.hadoop-cluster.nn1</name> <value>1421-0002:53310</value> <description></description> </property> <property> <name>dfs.namenode.servicerpc-address.hadoop-cluster.nn2</name> <value>1421-0001:53310</value> <description></description> </property> <property> <name>dfs.ha.automatic-failover.enabled</name> <value>true</value> <description></description> </property> <property> <name>dfs.client.failover.proxy.provider.hadoop-cluster</name> <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value> <description>出现故障,哪个实现类负责执行故障切换</description> </property> <property> <name>dfs.ha.fencing.methods</name> <value>sshfence</value> <description>一旦NameNode切换,使用ssh方式进行操作</description> </property> <property> <name>dfs.ha.fencing.ssh.private-key-files</name> <value>/home/hadoop/.ssh/id_rsa</value> <description>如果使用ssh进行故障切换,使用ssh通信时用的密钥存储的位置 </description> </property> <property> <name>dfs.ha.fencing.ssh.connect-timeout</name> <value>3000</value> <description>ssh连接超时的最大时间</description> </property> <property> <name>dfs.journalnode.edits.dir</name> <value>/home/hadoop/software/cloud/hadoop-2.6.0/hdfs/journal</value> <description>配置项用于设置journalnode节点保存本地状态的目录。本地路径</description> </property> <property> <name>dfs.replication</name> <value>3</value> <description>数据备份数目</description> </property> <property> <name>dfs.namenode.shared.edits.dir</name> <value>qjournal://1421-0000:8485;1421-0003:8485;1421-0004:8485;1421-0005:8485;1421-0006:8485/hadoop-journal</value> <description>这是NameNode读写JNs组的uri。通过这个uri,NameNodes可以读写edit log内容。hadoop-journal指journalnode设置的“dfs.journalnode.edits.dir”下的本地路径</description> </property> <property> <name>dfs.namenode.name.dir</name> <value>/home/hadoop/software/cloud/hadoop-2.6.0/hdfs/name</value> <description>本地磁盘目录,NN存储fsimage文件的地方。可以是按逗号分隔的目录列表,fsimage文件会存储在全部目录,冗余安全。这里多个目录设定,最好在多个磁盘,另外,如果其中一个磁盘故障,不会导致系统故障,会跳过坏磁盘。由于使用了HA,建议仅设置一个。本地路径</description> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/software/cloud/hadoop-2.6.0/hdfs/data</value> <description>本地磁盘目录,HDFS数据应该存储Block的地方。可以是逗号分隔的目录列表(典型的,每个目录在不同的磁盘)。这些目录被轮流使用,一个块存储在这个目录,下一个块存储在下一个目录,依次循环。每个块在同一个机器上仅存储一份。不存在的目录被忽略。必须创建文件夹,否则被视为不存在。本地路径</description> </property> </configuration>
4.3.5 mapred-site.xml:该文档主要配置 MapReduce 的计算框架类型和 Job 日志记录节点内容与保存路径即可,如需对 MapReduce 过程资源分配调优,则可以配置其 mapreduce.map.memory.mb、mapreduce.map.cpu.vcores、mapreduce.map.java.opts 等等,即对其 MapReduce 具体的每项流程进行资源配置,Map、Shuffle 和 Reduce 各占用的内存与 CPU 核数,是否压缩数据传递,在 Map 的到达百分之几时开始进行 Reduce 操作,并行数与 Shuffle 占 Reduce内存中的百分比等等
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.map.output.compress</name> <value>true</value> </property> <property> <name>mapreduce.reduce.shuffle.merge.percent</name> <value>0.66</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>1421-0003:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>1421-0003:19888</value> </property> <property> <name>mapreduce.jobhistory.intermediate-done-dir</name> <value>/hadoop/mr_history/tmp</value> <description> 参数解释:MapReduce作业产生的日志存放位置。HDFS路径 </description> </property> <property> <name>mapreduce.jobhistory.done-dir</name> <value>/hadoop/mr_history/done</value> <description> 参数解释:MR JobHistory Server管理的日志的存放位置。HDFS路径 </description> </property> </configuration>
4.3.6 yarn-site.xml:这里采用ResourceManager HA配置
<configuration> <!-- configeration for ResourceManger--> <property> <name>yarn.resourcemanager.hostname</name> <value>1423-0001</value> </property> <!-- configeration for NodeManager--> <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> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>16384</value> </property> <property> <name>yarn.nodemanager.local-dirs</name> <value>/home/hadoop/software/cloud/hadoop-2.6.0/yarn/local</value> <description> 数据写入本地文件系统路径的列表用逗号分隔,多条存储路径可以提高磁盘的读写速度 </description> </property> <property> <name>yarn.nodemanager.log-dirs</name> <value>/home/hadoop/software/cloud/hadoop-2.6.0/yarn/log</value> <description> 本地文件系统日志路径的列表逗号分隔,多条存储路径可以提高磁盘的读写速度 </description> </property> <!-- HA 配置 =============================================================== --> <!-- Resource Manager Configs --> <property> <name>yarn.resourcemanager.connect.retry-interval.ms</name> <value>2000</value> </property> <property> <name>yarn.resourcemanager.ha.enabled</name> <value>true</value> </property> <property> <name>yarn.resourcemanager.ha.automatic-failover.enabled</name> <value>true</value> </property> <!-- 使嵌入式自动故障转移。HA环境启动,与 ZKRMStateStore 配合 处理fencing --> <property> <name>yarn.resourcemanager.ha.automatic-failover.embedded</name> <value>true</value> </property> <!-- 集群名称,确保HA选举时对应的集群 --> <property> <name>yarn.resourcemanager.cluster-id</name> <value>yarn-cluster</value> </property> <property> <name>yarn.resourcemanager.ha.rm-ids</name> <value>rm1,rm2</value> </property> <!-- 这里RM主备结点需要单独指定,(可选) <property> <name>yarn.resourcemanager.ha.id</name> <value>rm2</value> </property> --> <property> <name>yarn.resourcemanager.scheduler.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.fair.FairScheduler</value> </property> <property> <name>yarn.resourcemanager.recovery.enabled</name> <value>true</value> </property> <property> <name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name> <value>5000</value> </property> <!-- ZKRMStateStore 配置 --> <property> <name>yarn.resourcemanager.store.class</name> <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value> </property> <property> <name>yarn.resourcemanager.zk-address</name> <value>1421-0000:2181,1421-0003:2181,1421-0004:2181,1421-0005:2181,1421-0006:2181</value> </property> <property> <name>yarn.resourcemanager.zk.state-store.address</name> <value>1421-0000:2181,1421-0003:2181,1421-0004:2181,1421-0005:2181,1421-0006:2181</value> </property> <!-- Client访问RM的RPC地址 (applications manager interface) --> <property> <name>yarn.resourcemanager.address.rm1</name> <value>1423-0001:23140</value> </property> <property> <name>yarn.resourcemanager.address.rm2</name> <value>1423-0002:23140</value> </property> <!-- AM访问RM的RPC地址(scheduler interface) --> <property> <name>yarn.resourcemanager.scheduler.address.rm1</name> <value>1423-0001:23130</value> </property> <property> <name>yarn.resourcemanager.scheduler.address.rm2</name> <value>1423-0002:23130</value> </property> <!-- RM admin interface --> <property> <name>yarn.resourcemanager.admin.address.rm1</name> <value>1423-0001:23141</value> </property> <property> <name>yarn.resourcemanager.admin.address.rm2</name> <value>1423-0002:23141</value> </property> <!--NM访问RM的RPC端口 --> <property> <name>yarn.resourcemanager.resource-tracker.address.rm1</name> <value>1423-0001:23125</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address.rm2</name> <value>1423-0002:23125</value> </property> <!-- RM web application 地址 --> <property> <name>yarn.resourcemanager.webapp.address.rm1</name> <value>1423-0001:23188</value> </property> <property> <name>yarn.resourcemanager.webapp.address.rm2</name> <value>1423-0002:23188</value> </property> <property> <name>yarn.resourcemanager.webapp.https.address.rm1</name> <value>1423-0001:23189</value> </property> <property> <name>yarn.resourcemanager.webapp.https.address.rm2</name> <value>1423-0002:23189</value> </property> </configuration>
4.3.7 配置slaves
1421-0000 1423-0001 1423-0002 1423-0003 1421-0003 1421-0004 1421-0005 1421-0006
4.3.8 配置masters
1421-0001
4.3.9 创建需要的目录
/home/hadoop/software/cloud/hadoop-2.6.0/hdfs/data
/home/hadoop/software/cloud/hadoop-2.6.0/hdfs/name
/home/hadoop/software/cloud/hadoop-2.6.0/hdfs/journal
/home/hadoop/software/cloud/hadoop-2.6.0/tmp
/home/hadoop/software/cloud/hadoop-2.6.0/yarn/local
/home/hadoop/software/cloud/hadoop-2.6.0/yarn/log
5 启动机群
5.1 第一次启动
5.1.1 启动ZK:
在所有的 ZK 节点执行命令:zkServer.sh start,查看各个 ZK 的从属关系:zkServer.sh status 结果为 Mode: follower or leader,注意:哪个 ZK 节点会成为 leader 默认是通过 ZK 快速选举诞生的,这里就不介绍其快速选举的具体流程了。此时,在各个节点都可以查看到 ZK 进程,在 Shell 窗口下输入jps 即可,内容如下:
xxxx QuorumPeerMain
xxxx Jps
5.1.2 格式化ZK(仅第一次需要做)
任意 namenode 节点上执行:hdfs zkfc –formatZK
5.1.3 启动 ZKFC:
ZookeeperFailoverController 是用来监控 NN 状态,协助实现主备 NN 切换的,所以仅仅在主备 NN 节点上启动就行:hadoop-daemon.sh startzkfc,启动后我们可以看到 ZKFC 进程:
xxxx Jps
xxxx DFSZKFailoverController
5.1.4 启动JournalNode
启动用于主备 NN 之间同步元数据信息的共享存储系统 JournalNode,参见角色分配表,在各个 JN 节点上启动:hadoop-daemon.sh start journalnode,启动后在各个 JN 节点都可以看到 JournalNode 进程:
xxxx QuorumPeerMain
xxxx Jps
xxxx JournalNode
5.1.5 格式化并启动NN
格式化:hdfs namenode –format,注意:只有第一次启动系统时需格式化,请勿重复格式化。在主 NN 节点执行命令启动 NN:hadoop-daemon.sh start namenode
启动后可以看到 NN 进程:
xxxx Jps
xxxx NameNode
xxxx DFSZKFailoverController
5.1.6 在备 NN 上同步主 NN 的元数据信息:hdfs namenode –bootstrapStandby,正常执行时的最后部分日志中,INFO util.ExitUtil: Exiting with status 后的数字为0 则是正常退出,即正常启动。而如果为其他数字,则需要到 hadoop 安装目录下的 log 中查询 namenode 启动失败的原因,根据其描述进行解决。
5.1.7 启动备 NN,在备 NN 上执行命令:hadoop-daemon.sh start namenode
5.1.8 设置主 NN(这一步可以省略,这是在设置手动切换 NN 时的步骤,ZK 已经自动选择一个节点作为主 NN 了)到目前为止,其实 HDFS 还不知道谁是主NN,可以通过监控页面查看,两个节点的 NN 都是 Standby 状态。下面我们需要在主 NN 节点上执行命令激活主 NN:
hdfs haadmin -transitionToActive nn1
5.1.9 在主 NN 上启动 Datanode,在[nn1]上,启动所有 datanode:hadoop-daemons.sh start datanode
5.1.10 启动yarn,因为namenode和resourcemanger都要战勇很大量资源,所以把他俩分开部署。首先在1423-0001启动yarn:start-yarn.sh,在备机启动RM:yarn-daemon.sh start resourcemanager
5.1.11 在运行 MRJS 的 1423-003上执行以下命令启动 MR JobHistory Server:mr-jobhistory-daemon.sh start historyserver
5.2 整个集群的启动与关闭
在之后如果没有特殊原因,可以通过命令 start-all.sh 和 stop-all.sh 分别启动或关闭整个 Hadoop 集群。
6 HBase配置
6.1 配置hbase-env.sh
export JAVA_HOME=/usr/lib/jvm/java-1.7.0-openjdk-amd64 export HBASE_MANAGES_ZK=false
6.2 配置hbase-site.xml
<configuration> <property> <name>hbase.rootdir</name> <value>hdfs://1421-0002:9000/hbase</value> <description></description> </property> <property> <name>hbase.cluster.distributed</name> <value>true</value> <description></description> </property> <property> <name>hbase.master</name> <value>1421-0002:6000</value> <description></description> </property> <property> <name>hbase.zookeeper.quorum</name> <value>1421-0000,1421-0003,1421-0004,1421-0005,1421-0006</value> <description></description> </property> <property> <name>hbase.zookeeper.property.clientPort</name> <value>2181</value> <description></description> </property> <property> <name>hbase.zookeeper.property.dataDir</name> <value>/home/hadoop/software/cloud/zookeeper-3.4.6/zoodata</value> <description></description> </property> <property> <name>hbase.zookeeper.property.logDir</name> <value>/home/hadoop/software/cloud/zookeeper-3.4.6/zoolog</value> <description></description> </property> </configuration>
6.3 配置regionservers:这里将所有的DN作为regionservers
1421-0000
1421-0001
1423-0001
1423-0002
1423-0003
1421-0003
1421-0004
1421-0005
1421-0006
6.4 启动
Hbase 的启动非常简单,只需要在主节点上输入 start-hbase.sh 即可启动HMaster 与 HRegionServer 守护进程。
Ubuntu 14.10 下ZooKeeper+Hadoop2.6.0+HBase1.0.0 的HA机群高可用配置
标签:
原文地址:http://www.cnblogs.com/liuchangchun/p/4630602.html