注:本文中提到的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"的内容。使其无password登录有效。

改动文件"authorized_keys"

chmod 600 ~/.ssh/authorized_keys

用root用户登录server改动SSH配置文件"/etc/ssh/sshd_config"的下列内容。

RSAAuthentication yes #启用
RSA认证

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

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

设置完之后记得重新启动SSH服务。才干使刚才设置有效。

service sshd restart

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

scp ~/.ssh/id_rsa.pub远程username@远程serverIP:~/

在"/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无password登录Slave1

ssh远程serverIP

配置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。而且不用加port号(这里的名称与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,及client连接ZK的port。该port需与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的地址和port(所以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

在三台server的文件夹/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命令能够检查是否启动成功:

hd@hd0:/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




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

  1. Hadoop 2.0 NameNode HA和Federation实践【转】

    Hadoop 2.0 NameNode HA和Federation实践 Posted on 2012/12/10 一.背景 天云趋势在2012年下半年开始为某大型国有银行的历史交易数据备份及查询提供基 ...

  2. Hadoop双namenode配置搭建(HA)

    配置双namenode的目的就是为了防错,防止一个namenode挂掉数据丢失,具体原理本文不详细讲解,这里只说明具体的安装过程. Hadoop HA的搭建是基于Zookeeper的,关于Zookee ...

  3. 【Hadoop 分布式部署 十:配置HDFS 的HA、启动HA中的各个守护进程】

    官方参考 配置 地址  :http://hadoop.apache.org/docs/r2.5.2/hadoop-project-dist/hadoop-hdfs/HDFSHighAvailabili ...

  4. Spark 在Hadoop HA下配置HistoryServer问题

    我的Spark机群是部署在Yarn上的,因为之前Yarn的部署只是简单的完全分布式,但是后来升级到HA模式,一个主NN,一个备NN,那么Spark HistoryServer的配置也需要相应的做修改, ...

  5. 通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置

    通过tarball形式安装HBASE Cluster(CDH5.0.2)——Hadoop NameNode HA 切换引起的Hbase错误,以及Hbase如何基于NameNode的HA进行配置 配置H ...

  6. hadoop高可用HA的配置

    zk3 zk4 zk5 配置hadoop的HA大概可以分为以下几步: 配置zookpeer(namenode之间的通信要靠zk来实现) 配置hadoop的 hadoop-env.sh hdfs-sit ...

  7. hadoop 2.2.0集群安装详细步骤(简单配置,无HA)

    安装环境操作系统:CentOS 6.5 i586(32位)java环境:JDK 1.7.0.51hadoop版本:社区版本2.2.0,hadoop-2.2.0.tar.gz 安装准备设置集群的host ...

  8. hadoop(四): 本地 hbase 集群配置 Azure Blob Storage

    基于 HDP2.4安装(五):集群及组件安装 创建的hadoop集群,修改默认配置,将hbase 存储配置为 Azure Blob Storage 目录: 简述 配置 验证 FAQ 简述: hadoo ...

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

    一. HA概述 1. 所谓HA(High Available),即高可用(7*24小时不中断服务). 2. 实现高可用最关键的策略是消除单点故障.HA严格来说应该分成各个组件的HA机制:HDFS的HA ...

随机推荐

  1. [BZOJ2223][BZOJ3524][Poi2014]Couriers 主席树

    3524: [Poi2014]Couriers Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 2436  Solved: 960[Submit][St ...

  2. api访问参数

    一.Get请求 1.一个参数时 2. 二.Post请求

  3. (11)oracle触发器

    触发器是特殊的存储过程. 每当一个特定的数据操作语句(inster,update,delete)在指定的表上触发时,Oracle自动的地执行触发器中定义的语句序列. create trigger 触发 ...

  4. Educational Codeforces Round 33 (Rated for Div. 2) C. Rumor【并查集+贪心/维护集合最小值】

    C. Rumor time limit per test 2 seconds memory limit per test 256 megabytes input standard input outp ...

  5. 【bzoj1123】【[POI2008]BLO】tarjan判割点

    (上不了p站我要死了,侵权度娘背锅) Description Byteotia城市有n个 towns m条双向roads. 每条 road 连接 两个不同的 towns ,没有重复的road. 所有t ...

  6. jqgrid postData setGridParam 调用多次时查询条件累加的问题--详情页查询导致的无法在新的页面中查询

    $("#btn_search").click(function () { url = "/AMEvents/GetGridJson?evtype=1"; var ...

  7. c++中resize这个函数怎么用

    c++中序列式容器的一个共性函数, vv.resize(int n,element)表示调整容器vv的大小为n,扩容后的每个元素的值为element,默认为0 resize()会改变容器的容量和当前元 ...

  8. App Distribution Guide (二)

    Configuring Your Xcode Project for Distribution  You can edit your project settings anytime, but som ...

  9. hdu 1283 最简单的计算机

    水题. .. import java.util.Scanner; public class Main { static int m1, m2; static int r1, r2, r3; publi ...

  10. cubemap

    cubemap 画的时候 是一张一张画 并不是画成 ------- |       | |       |        |       |       | |        | 这样一个位置 而是一 ...