Hadoop 配置及hadoop HA 的配置

注:本文中提到的ochadoop 不要感到奇怪,是亚信公司内部自己合成的一个包,把所有的组件都放在一个包内了,免去了组件的下载过程和解决兼容问题,其实也可以自己下载的,不要受到影响。

另,转载请注明出处,谢谢

修改静态IP和hostname

在 /etc/sysconfig/network-scripts/ifcfg-eth0配置IPADDR地址

运行以下命令生效


service network restart

在/etc/sysconfig/network中配置hostname配置完成后重启生效

设置ssh免登录(本节没有做实际操作,仅供参考)

在Master节点上执行以下命令:


ssh-keygen –t rsa –P ‘‘

生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。

接着在Master节点上做如下配置,把id_rsa.pub追加到授权的key里面去。


cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

在验证前,需要做两件事儿。第一件事儿是修改文件"authorized_keys"权限(权限的设置非常重要,因为不安全的设置安全设置,会让你不能使用RSA功能),另一件事儿是用root用户设置"/etc/ssh/sshd_config"的内容。使其无密码登录有效。

修改文件"authorized_keys"


chmod 600 ~/.ssh/authorized_keys

用root用户登录服务器修改SSH配置文件"/etc/ssh/sshd_config"的下列内容。


RSAAuthentication yes #启用
RSA认证

PubkeyAuthentication yes #启用公钥私钥配对认证方式

AuthorizedKeysFile .ssh/authorized_keys #公钥文件路径(和上面生成的文件同)

设置完之后记得重启SSH服务,才能使刚才设置有效。


service sshd restart

接下来的事儿是把公钥复制所有的Slave机器上。使用下面的命令格式进行复制公钥:

scp ~/.ssh/id_rsa.pub远程用户名@远程服务器IP:~/

在"/home/hadoop/"下创建".ssh"文件夹


chmod 700 ~/.ssh

到目前为止Master的公钥也有了,文件夹".ssh"也有了,且权限也修改了。这一步就是把Master的公钥追加到Slave1的授权文件"authorized_keys"中去。使用下面命令进行追加并修改"authorized_keys"文件权限:


cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

chmod 600 ~/.ssh/authorized_keys

用root用户修改"/etc/ssh/sshd_config"

具体步骤参考前面的"设置SSH配置",具体分为两步:第1是修改配置文件;第2是重启SSH服务。

测试Master使用SSH无密码登录Slave1


ssh远程服务器IP

配置slaves

在 etc/hadoop/slaves加入datanode机器的hostname


w-cs-datanode01

w-cs-datanode02

w-cs-datanode02

创建hadoop用户

以下操作方式使用该新建的用户进行操作。注:下以出现的csbd为当前新建的账号

下载OCHadoop

http://210.14.153.178:9081/download/OCHadoop/V4.0.1/ochadoop-och4.0.1.tar.gz

下载前请确认安装的版本号,该包包含有hadoop,zookeeper,hive,Hbase,spark等组件。

下载Java并配置环境变量

解压:tar zxvf jdk-7u75-linux-x64.tar.gz -C
/home/csbd/java-1.7.0

配置环境变量:vim /etc/profile


export JAVA_HOME=/home/csbd/jdk1.7.0_75

export JRE_HOME=${JAVA_HOME}/jre

export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib

export PATH=${JAVA_HOME}/bin:$PATH

生效:


source /etc/profile

还有一些环境变量像HADOOP_HOME,HIVE_HOME,ZOOKEEPER_HOME等都可以先配置了

hadoop中配置Java环境变量

在etc/hadoop目录下hadoop-env.sh和
yarn-env.sh把Java_home给配置上

core-site.xml配置


<property>

<name>fs.defaultFS</name>

<value>hdfs://w-cs-namenode01</value>  <!--
一定得是namenode的hostname或者
ip,并且不用加端口号(这里的名称与HA配置hdfs-site.xml中的dfs.nameservices必须保持一致)
-->

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/home/csbd/tmp</value> <!--
该路径可以不用创建,会自动创建-->

</property>

<!-- 配置HA时才用配置该项
-->

<property>

<name>ha.zookeeper.quorum</name>

<value>zk1.example.com:2181,zk2.example.com:2181,zk3.example.com:2181</value>

<!--各个ZK节点的IP/host,及客户端连接ZK的端口,该端口需与zoo.cfg中的
clientPort一致! -->

</property>

hdfs-site.xml


<property>

<name>dfs.namenode.name.dir</name>

<value>/home/csbd/dfs/name</value>

</property>

<property>

<name>dfs.datanode.data.dir</name>

<value>/home/csbd/dfs/data</value>

</property>

<property>

<name>dfs.replication</name>

<value>3</value>

</property>

<property>

<name>dfs.webhdfs.enabled</name>

<value>true</value>

</property>

<!-- HA配置需要加如下配置-->

<property>

<name>dfs.nameservices</name>

<value>w-cs-namenode01</value>

</property>

<property>

<name>dfs.ha.namenodes.mycluster</name>

<value>nn1,nn2</value>

</property>

<property>

<name>dfs.namenode.rpc-address.mycluster.nn1</name>

<value>w-cs-namenode01:8020</value>

</property>

<property>

<name>dfs.namenode.rpc-address.mycluster.nn2</name>

<value>w-cs-namenode02.com:8020</value>

</property>

<property>

<name>dfs.namenode.servicepc-address.mycluster.nn1</name>

<value>w-cs-namenode01:53310</value>

</property>

<property>

<name>dfs.namenode.servicepc-address.mycluster.nn2</name>

<value>w-cs-namenode02:53310</value>

</property>

<property>

<name>dfs.namenode.http-address.mycluster.nn1</name>

<value>w-cs-namenode01:50070</value>

</property>

<property>

<name>dfs.namenode.http-address.mycluster.nn2</name>

<value>w-cs-namenode02:50070</value>

</property>

<property>

<name>dfs.namenode.shared.edits.dir</name>

<value>qjournal://w-cs-namenode01:8485;w-cs-namenode02:8485;w-cs-datanode01:8485/w-cs-namenode01</value>

</property>

<property>

<name>dfs.journalnode.edits.dir</name>

<value>/home/csbd/dfs/jndata</value>

</property>

<property>

<name>dfs.client.failover.proxy.provider.mycluster</name>

<value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>

</property>

<property>

<name>dfs.ha.fencing.methods</name>

<value>sshfence</value>

</property>

<property>

<name>dfs.ha.fencing.ssh.private-key-files</name>

<value>/home/csbd/.ssh/id_rsa</value>

</property>

<property>

<name>dfs.namenode.edits.dir</name>

<value>/home/csbd/dfs/edits</value>

</property>

<property>

<name>dfs.permission</name>

<value>false</value>

</property>

<property>

<name>dfs.ha.automatic-failover.enabled</name>

<value>true</value>

</property>

yarn-site.xml

注:yarn-site.xml在两个运行resourceManager的节点上一定要修改yarn.resourcemanager.ha.id中的值为当前机器的映射!


<configuration>

<!-- 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>

<property>

<name>yarn.resourcemanager.ha.automatic-failover.embedded</name>

<value>true</value>

</property>

<property>

<name>yarn.resourcemanager.cluster-id</name>

<value>pseudo-yarn-rm-cluster</value>

</property>

<property>

<name>yarn.resourcemanager.ha.rm-ids</name>

<value>rm1,rm2</value>

</property>

<property>

<name>yarn.resourcemanager.ha.id</name>

<value>rm1</value> 
<!-- 在第一台运行resourceManager HA的机器上为
rm1,在另一台运行resourceManager的机器上要改成
rm2 -->

</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.resourcemanager.store.class</name>

<value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>

</property>

<property>

<name>yarn.resourcemanager.zk.state-store.address</name>

<value>localhost:2181</value>

</property>

<property>

<name>yarn.app.mapreduce.am.scheduler.connection.wait.interval-ms</name>

<value>5000</value>

</property>

<!-- RM1 configs -->

<property>

<name>yarn.resourcemanager.address.rm1</name>

<value>w-cs-namenode01:8032</value>

</property>

<property>

<name>yarn.resourcemanager.scheduler.address.rm1</name>

<value>w-cs-namenode01:8030</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.https.address.rm1</name>

<value>w-cs-namenode01:23189</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.address.rm1</name>

<value>w-cs-namenode01:8088</value>

</property>

<property>

<name>yarn.resourcemanager.resource-tracker.address.rm1</name>

<value>w-cs-namenode01:8031</value>

</property>

<property>

<name>yarn.resourcemanager.admin.address.rm1</name>

<value>w-cs-namenode01:8033</value>

</property>

<!-- RM2 configs -->

<property>

<name>yarn.resourcemanager.address.rm2</name>

<value>w-cs-namenode02:8032</value>

</property>

<property>

<name>yarn.resourcemanager.scheduler.address.rm2</name>

<value>w-cs-namenode02:8030</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.https.address.rm2</name>

<value>w-cs-namenode02:23189</value>

</property>

<property>

<name>yarn.resourcemanager.webapp.address.rm2</name>

<value>w-cs-namenode02:8088</value>

</property>

<property>

<name>yarn.resourcemanager.resource-tracker.address.rm2</name>

<value>w-cs-namenode02:8031</value>

</property>

<property>

<name>yarn.resourcemanager.admin.address.rm2</name>

<value>w-cs-namenode02:8033</value>

</property>

<!-- Node Manager Configs -->

<property>

<description>Address where the localizer IPC is.</description>

<name>yarn.nodemanager.localizer.address</name>

<value>0.0.0.0:23344</value>

</property>

<property>

<description>NM Webapp address.</description>

<name>yarn.nodemanager.webapp.address</name>

<value>0.0.0.0:23999</value>

</property>

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

<property>

<name>yarn.nodemanager.aux-services.mapreduce_shuffle.class</name>

<!-- <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> -->

<value>org.apache.hadoop.mapred.ShuffleHandler</value>

</property>

<property>

<name>yarn.nodemanager.local-dirs</name>

<value>/tmp/pseudo-dist/yarn/local</value>

</property>

<property>

<name>yarn.nodemanager.log-dirs</name>

<value>/tmp/pseudo-dist/yarn/log</value>

</property>

<property>

<name>mapreduce.shuffle.port</name>

<value>23080</value>

</property>

<!--在主备resourceManager上配置的zookeeper的地址和端口(所以resourceManager要和zookeeper装在一台机器上)-->

<property>

<name>yarn.resourcemanager.zk-address</name>

<value>zk1.example.com:2181,zk2.example.com:2181</value>

</property>

</configuration>

mapred-site.xml


<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

<property>

<name>mapreduce.jobhistory.address</name>

<value>namenode1:10020</value>

</property>

<property>

<name>mapreduce.jobhistory.webapp.address</name>

<value>namenode1:19888</value>

</property>

Zookeeper的安装配置

下载zookeeper的tar包,解压

首先建立zookeeper的数据目录,比如:


mkdir -p /opt/hadoop/data/zookeeper

同时建立日志存放目录:


mkdir –p /opt/hadoop/logs/zookeeper

在$ZOO_HOME/conf下创建配置文件:


touch zoo.cfg

在zoo.cfg文件是加入以下配置:


tickTime=2000

dataDir=/opt/hadoop/data/zookeeper

clientPort=2181

initLimit=5

syncLimit=2

server.1=192.168.17.14:31316:31317

server.2=192.168.17.15:31316:31317

server.3=192.168.17.16:31316:31317

在三台服务器的目录/opt/hadoop/data/zookeeper下分别创建一个叫myid的文件,内容分别是1,2,3,如:

#在192.168.17.14上执行如下命令


echo 1 >/opt/hadoop/data/zookeeper/myid

#在192.168.17.15上执行如下命令


echo 2 >/opt/hadoop/data/zookeeper/myid

#在192.168.17.16上执行如下命令


echo 3 >/opt/hadoop/data/zookeeper/myid

最后就是分别启动zookeeper服务了:


./bin/zkServer.sh start

通过jps命令可以检查是否启动成功:

[email protected]:/opt/hadoop/apps/zookeeper-3.4.5$jps

1239 QuorumPeerMain

看到QuorumPeerMain进程就表示zookeeper启动成功了。

测试zookeeper集群是否建立成功,在$ZOO_HOME目录下执行以下命令即可,如无报错表示集群创建成功:


./bin/zkCli.sh -server localhost:31315

查看状态:


$ zkServer.sh status

JMX enabled by default

Using config: /home/yarn/Zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg

Mode: follower 
表示当前这个机器上是从状态

在任意一个节点格式化ZK


hdfs zkfc -formatZK

仅在主备NN节点上启动就行:


hadoop-daemon.sh start zkfc

启动后我们可以看到ZKFC进程:


$ jps

3084 QuorumPeerMain

3292 Jps

3247  DFSZKFailoverController

启动hadoop

在主nameNode上进行格式化:(注:只用主Namenode格式化,备Namenode不用格式化,备NN需要做一下同步就行,不然会造成两个namenode的VERSION不一致,解决的办法是查看日志,按照提示的两个不一致的id进行替换就行了(一般会有namespaceId和clusterId不一致,报哪个替换哪个就行))


在所有的ZK节点执行命令:

zkServer.shstart

查看从属关系

zkServer.shstatus

JMX enabledby default

Usingconfig: /home/yarn/Zookeeper/zookeeper-3.4.6/bin/../conf/zoo.cfg

Mode: 
follower

注意:

哪个ZK节点会成为leader是随机的,第一次实验时slave2成为了leader,第二次实验时slave1成为了leader!

此时,在各个节点都可以查看到ZK进程:

jps

3084 
QuorumPeerMain

任意ZK节点上格式化ZK:

hdfs zkfc-formatZK

仅在主备NN节点上启动就行:

hadoop-daemon.shstart zkfc

启动后我们可以看到ZKFC进程:

jps

3084QuorumPeerMain

3292 Jps

3247 
DFSZKFailoverController

在各JN上启动:

hadoop-daemon.shstart 
journalnode

先用子命令启动各进程,便于查看问题,正常以后可以使用 start-dfs.sh 
start-yarn.sh 或start-all.sh

./bin/hdfsnamenode –format  
# 格式化namenode

在主nameNode上启动各DN节点:

./sbin/hadoop-daemons.shstart datanode

./sbin/hadoop-daemon.sh--script hdfs start datanode

./sbin/yarn-daemon.shstart resourcemanager

./sbin/yarn-daemon.shstart nodemanager

./sbin/mr-jobhistory-daemon.shstart historyserver

启动主节点上的NN:

hadoop-daemon.sh start namenode

在备NN上同步主NN上元数据:

hdfs namenode -bootstrapStandby

正常的启动日志如下:

Re-formatfilesystem in Storage Directory /home/yarn/Hadoop/hdfs2.0/name ? (Y or N) Y

14/06/1510:09:08 INFO common.Storage: Storage directory /home/yarn/Hadoop/hdfs2.0/namehas been successfully formatted.

14/06/1510:09:09 INFO namenode.TransferFsImage: Opening connection to http://master:50070/getimage?getimage=1&txid=935&storageInfo=-47:564636372:0:CID-d899b10e-10c9-4851-b60d-3e158e322a62

14/06/1510:09:09 INFO namenode.TransferFsImage: Transfer took 0.11s at 63.64 KB/s

14/06/1510:09:09 INFO namenode.TransferFsImage: Downloaded file fsimage.ckpt_0000000000000000935size 7545 bytes.

14/06/1510:09:09 INFO util.ExitUtil: Exiting with status 0

14/06/1510:09:09 INFO namenode.NameNode: SHUTDOWN_MSG:

/************************************************************

SHUTDOWN_MSG:Shutting down NameNode at slave1/192.168.66.92

************************************************************/

在备NN上启动namenode:

hadoop-daemon.shstart namenode

校验效果

首先可以连到两台NameNode查看主备状态

http://192.168.17.14:50070/dfshealth.jsp

http://192.168.17.15:50070/dfshealth.jsp

通过 jps查到主nameNode上的PID,然后使用kill
PID 杀死该进行,再查看原来的standBy是否改为active

可以在主NN节点上执行命令激活主NN:


hdfs haadmin -transitionToActive nn1

该命令可以将active状态从nn2切换到nn1,让nn2变成active


hdfs haadmin -DfSHAadmin -failover nn2 nn1





时间: 2024-10-11 12:12:25

Hadoop 配置及hadoop HA 的配置的相关文章

hadoop 2.2 第二步 HA zookeeper 配置

第一篇文章还有要修改的地方,现在我的集群已经扩展到5台(虚拟机)有些配置还要改,这一篇记录一下Hadoop HA 和zookeeper的配置,方便自己以后看. 新的HDFS中的NameNode不再是只有一个了,可以有多个(目前只支持2个).每一个都有相同的职能. 在HDFS(HA) 集群中,Standby 节点还执行着对namespace 状态的checkpoint 功能,因此没有必要再运行SecondaryNameNode. 这两个NameNode的地位如何:一个是active状态的,一个是s

Hadoop 2.0 NameNode HA和Federation实践

参考链接:Hadoop 2.0 NameNode HA和Federation实践 Posted on 2012/12/10 一.背景 天云趋势在2012年下半年开始为某大型国有银行的历史交易数据备份及查询提供基于Hadoop的技术解决方案,由于行业的特殊性,客户对服务的可用性有着非常高的要求,而HDFS长久以来都被单点故障的问题所困扰,直到Apache Hadoop在2012年5月发布了2.0的alpha版本,其中MRv2还很不成熟,可HDFS的新功能已经基本可用,尤其是其中的的High Ava

hadoop配置名称节点HA基本流程

hadoop配置HA(NN) 配置信息参考hadoop配置名称节点HA原理 1.停止所有进程 stop-dfs.sh 2.配置hdfs-site.xml和core-site.xml 3.将s201的id_rsa发送到s205(确保两个NN能同时ssh到各个DN) 4.将s201的工作目录复制到s205 5.启动服务journalnode hadoop-daemons.sh start journalnode 6.初始化journalnode hdfs namenode -initializeSh

Hadoop 2.6.0 HA高可用集群配置详解

1 Hadoop HA架构详解 1.1 HDFS HA背景 HDFS集群中NameNode 存在单点故障(SPOF).对于只有一个NameNode的集群,如果NameNode机器出现意外情况,将导致整个集群无法使用,直到NameNode 重新启动. 影响HDFS集群不可用主要包括以下两种情况:一是NameNode机器宕机,将导致集群不可用,重启NameNode之后才可使用:二是计划内的NameNode节点软件或硬件升级,导致集群在短时间内不可用. 为了解决上述问题,Hadoop给出了HDFS的高

Spark 在Hadoop HA下配置HistoryServer问题

我的Spark机群是部署在Yarn上的,因为之前Yarn的部署只是简单的完全分布式,但是后来升级到HA模式,一个主NN,一个备NN,那么Spark HistoryServer的配置也需要相应的做修改,因为不做修改会报错 Exception in thread "main" java.lang.reflect.InvocationTargetException at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native

hadoop配置名称节点HA原理

Architecture In a typical HA clusiter, two separate machines are configured as NameNodes. At any point in time, exactly one of the NameNodes is in an Active state, and the other is in a Standby state. The Active NameNode is responsible for all client

Hadoop(25)-高可用集群配置,HDFS-HA和YARN-HA

一. HA概述 1. 所谓HA(High Available),即高可用(7*24小时不中断服务). 2. 实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA机制:HDFS的HA和YARN的HA. 3. Hadoop2.0之前,在HDFS集群中NameNode存在单点故障(SPOF). 4 .   NameNode主要在以下两个方面影响HDFS集群 NameNode机器发生意外,如宕机,集群将无法使用,直到管理员重启 NameNode机器需要升级,包括软件.硬件升级,此时集

Ubuntu下配置安装Hadoop 2.2

---恢复内容开始--- 这两天玩Hadoop,之前在我的Mac上配置了好长时间都没成功的Hadoop环境,今天想在win7 虚拟机下的Ubuntu12.04 64位机下配置, 然后再建一个组群看一看. 参考资料: 1. Installing single node Hadoop 2.2.0 on Ubuntu: http://bigdatahandler.com/hadoop-hdfs/installing-single-node-hadoop-2-2-0-on-ubuntu/ 配置过程如下:

Hadoop多节点集群安装配置

目录: 1.集群部署介绍 1.1 Hadoop简介 1.2 环境说明 1.3 环境配置 1.4 所需软件 2.SSH无密码验证配置 2.1 SSH基本原理和用法 2.2 配置Master无密码登录所有Salve 3.Java环境安装 3.1 安装JDK 3.2 配置环境变量 3.3 验证安装成功 3.4 安装剩余机器 4.Hadoop集群安装 4.1 安装hadoop 4.2 配置hadoop 4.3 启动及验证 4.4 网页查看集群 5.常见问题FAQ   5.1 关于 Warning: $H