注:本文中提到的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. 牛客网练习赛18 A 【数论/整数划分得到乘积最大/快速乘】

    链接:https://www.nowcoder.com/acm/contest/110/A 来源:牛客网 题目描述 这题要你回答T个询问,给你一个正整数S,若有若干个正整数的和为S,则这若干的数的乘积 ...

  2. Educational Codeforces Round 1D 【DFS求联通块】

    http://blog.csdn.net/snowy_smile/article/details/49924965 D. Igor In the Museum time limit per test ...

  3. poj2406(后缀数组)

    poj2406 题意 给出一个字符串,它是某个子串重复出现得到的,求子串最多出现的次数. 分析 后缀数组做的话得换上 DC3 算法. 那么子串的长度就是 \(len - height[rnk[0]]\ ...

  4. ELK集群

    kafka集群-------------------1. 下载wget http://mirror.rise.ph/apache/kafka/0.11.0.0/kafka_2.12-0.11.0.0. ...

  5. 前端html第三方登录

    首先推荐一下,这个博客主的文章:https://www.cnblogs.com/v-weiwang/p/5732423.html 很不错,基本靠他的博客. 我这里记一点自己调试过程中的报错等: 1,微 ...

  6. CodeForces - 985F Isomorphic Strings

    假如两个区间的26的字母出现的位置集合分别是 A1,B1,A2,B2,....., 我们再能找到一个排列p[] 使得 A[i] = B[p[i]] ,那么就可以成功映射了. 显然集合可以直接hash, ...

  7. POJ1741 Tree(树的点分治)

    题目给一棵边带权的树,统计路径长度<=k的点对数. 楼教主男人八题之一,分治算法在树上的应用. 一开始看论文看不懂,以为重心和距离那些是一遍预处理得来的..感觉上不敢想每棵子树都求一遍重心和距离 ...

  8. SQL 存储过程入门(事务)

    本篇我们来讲一下事务处理技术. 为什么要使用事务呢,事务有什么用呢,举个例子. 假设我们现在有个业务,当做成功某件事情的时候要向2张表中插入数据,A表,B表,我们插入的顺序是先插入A,再插入B表,如果 ...

  9. LinuxPAServer19.0.tar.gz压缩包

    LinuxPAServer19.0.tar.gz DELPHI XE10.2(TOKYO)开始可以编写LINUX控制台程序.在LINUX上面需要部署LinuxPAServer19.0.tar.gz,即 ...

  10. oracle学习小知识点总结

    登陆数据库:sqlplus "/as sysdba" window身份验证,不需要用户名和密码. 查看数据库状态: select status from v$instance(v$ ...