Hadoop高可用

Hadoop高可用安装

按照接下来的说明一步步的进行安装

首先安装vmware,再设置虚拟机


设置IP:

– VM:编辑>虚拟网络编辑器

– vi /etc/sysconfig/network-scripts/ifcfg-eth0


删除UUID和MAC地址


ONBOOT=yes


BOOTPROTO=static


IPADDR=192.168.9.253


NETMASK=255.255.255.0


GATEWAY=192.168.9.2


DNS1=1921.68.9.2

– service network restart

出来全是OK才行。
  • ping www.baidu.com,看是否成功
  • Hadoop高可用_第1张图片

Hadoop高可用_第2张图片

Hadoop高可用_第3张图片

删除70-persistent-net.rules

rm –fr
/etc/udev/rules.d/70-persistent-net.rules


关闭防火墙&Selinux

– service iptables stop

– chkconfig iptables off

– vi /etc/selinux/config


SELINUX=disabled


这样设置更安全,如时间错了就把相应文件变成只读文件


关机


拍摄快照


注意:日后,虚拟机一定要用快照克隆


克隆虚拟机

– 准备4台虚拟机


配置IP


配置主机名

– vi /etc/sysconfig/network


HOSTNAME=node002


配置hosts

– vi /etc/hosts LINUX

– c:/windows/system32/drivers/etc/hosts


关机


拍摄快照


给node01配置:

-vi /etc/sysconfig/network-scripts/ifcfg-eth0

– service network restart

出来全是OK才行。
  • ping www.baidu.com,看是否成功

给node01配置:


配置主机名

– vi /etc/sysconfig/network


HOSTNAME=node002


配置hosts

– vi /etc/hosts LINUX

– c:/windows/system32/drivers/etc/hosts


给node01配置:

-然后poweroff拍快照,存一个非常干净的Linux版本

node02配置同样

配置完node01和node02后互相ping一下看是否能ping通


node01 node02 node03node04都配好,且彼此间都能访问后,再配置一下让Windows和虚拟机之间也能访问


cat /etc/hosts


192.168.88.131 node01


192.168.88.132 node02


192.168.88.133 node03


保存了之后,点是,文件闪了一下,此时还需再保存一下,然后在Windows的cmd窗口里


-ping node01看能不能通

Hadoop的伪分布式安装

1.用rpm装jdk(why jdk7?)

-rpm -i

jdk-7u67-linux-x64.rpm

-whereis java

-vi + /etc/profile

   export

JAVA_HOME=/usr/bin/java

   export

PATH= P A T H : PATH: PATH:JAVA_HOME/bin

-source /etc/profile

如果出现 -bash: jps: command not found

改:export JAVA_HOME=/usr/bin/java

         export

PATH=$PATH:/usr/java/jdk1.7.0_67/bin

2.免秘钥

在家目录下,ll –a ,看有无.ssh文件,

若无,则先ssh localhost一下(登录完别忘了exit)



-ssh-keygen -t dsa

-P ‘’ -f ~/.ssh/id_dsa

-cat ~/.ssh/id_dsa.pub

Hadoop高可用_第4张图片

-ssh localhost 验证
(别忘了exit)

-ssh node01 验证(别忘了exit)

3.装hadoop2.6.5

-tar xf

hadoop-2.6.5.tar.gz -C /opt/ldy (注:-C的C 是大写)

然后到/opt/ldy目录下去看一下是否解压好了

cd /opt/ldy/hadoop-2.6.5

其中sbin这个文件夹很重要,放的是系统级别的一些可执行脚本

要想在任意目录下启动hadoop,

就要在配置文件里做些修改。

export

JAVA_HOME=/usr/bin/java

export

HADOOP_HOME=/opt/ldy/hadoop-2.6.5

export

PATH= P A T H : / u s r / j a v a / j d k 1.7. 0 6 7 / b i n : PATH:/usr/java/jdk1.7.0_67/bin: PATH:/usr/java/jdk1.7.067/bin:HADOOP_HOME/bin:$HADOOP_HOME/sbin

输入hd按Tab键可以联想出hdfs

输入start-d按Tab键可以联想出start-dfs.

就表示配置成功了

修改hadoop配置文件信息

cd /opt/ldy/hadoop-2.6.5/etc/hadoop

注:以上路径的etc可不是根目录下的etc

vi hadoop-env.sh

vi mapred-env.sh

vi yarn-env.sh    

给这三个文件里的JAVA_HOME都改成绝对路径/usr/java/jdk1.7.0_67

配置 vi core-site.xml


fs.defaultFS

hdfs://node03:9000




hadoop.tmp.dir

/var/ldy/hadoop/pseudo

   

配置 vi hdfs-site.xml


dfs.replication

1




dfs.namenode.secondary.http-address

node03:50090


配置slaves文件

              vi slaves 

        node03

格式化hdfs

hdfs namenode -format  (只能格式化一次,再次启动集群不要执行,否则clusterID变了)

之前/var/ldy/hadoop/pseudo这个文件不存在,格式化后就存在了,检查一下看存在没

启动集群

     start-dfs.sh

在浏览器里打开node03:50070

创建目录:hdfs dfs -mkdir -p
/user/root

上传文件: hdfs dfs -put a.txt
/user/root

停止集群:stop-dfs.sh

HA安装方案

分发jdk到node04、05、06

-scp jdk-7u67-linux-x64.rpm node04:pwd

-scp jdk-7u67-linux-x64.rpm node05:pwd

-scp jdk-7u67-linux-x64.rpm node06:pwd

并在Xshell的全部会话栏里一起ll,看jdk是否发送成功。

给node04、05、06分别安装jdk

分别在node04、05、06上执行rpm安装命令

-rpm -i

jdk-7u67-linux-x64.rpm

在node03上cd /etc,在此目录下把profile文件分发到node04、05、06上。

scp profile node04:`pwd`

利用Xshell全部会话栏,source /etc/profile

利用Xshell全部会话栏,jps,看04、05、06这三台机子的jdk是否装好。

同步所有服务器的时间

-date 查看机子当前的时间。

时间不能差太大,否则集群启动后某些进程跑不起来。

若时间不同步,怎么办?

1.yum进行时间同步器的安装

   -yum -y install ntp

2.执行同步命令

   -ntpdate

time1.aliyun.com 和阿里云服务器时间同步

装机之前的配置文件检查

-cat /etc/sysconfig/network

查看HOSTNAME是否正确

-cat /etc/hosts

查看IP映射是否正确

若不正确,可以改文件,也可以把node03上的用scp分发过去。

  1. -cat
    /etc/sysconfig/selinux里是否

    SELINUX=disabled

  2. service iptables
    status查看防火墙是否关闭

NN与其他三台机子的免秘钥设置

  1. 在家目录下 ll –a看下有无.ssh文件,如果没有就ssh loalhost一下(ssh localhost后不要忘记exit)。

2.-cd .ssh ,并ll查看一下

3.把node03的公钥发给其他三台机子
Hadoop高可用_第5张图片

  1. 在node04的.ssh目录下看是否有node03.pub

    如果有,那就追加到authorized_keys

    cat node03.pub >>
    authorized_keys

并且在node03上ssh node04看是否免密钥了

给node05、06都追加一下node03.pub,也就是在node05、06的.ssh目录下执行cat node03.pub >> authorized_keys

5.同理给其他节点发送公钥并在各个节点上把node03的公钥追加上

scp  id_dsa.pub  

node05:pwd/node03.pub

scp  id_dsa.pub  

node06:pwd/node03.pub

在node03上分别ssh node04,ssh node05,ssh node06,看是否能免密钥登录,每次ssh都别忘了exit

两个NN间互相免密钥

1.node03与node04间互相免密钥: node03可免密钥登录node04,那现需node04上能免密钥登node03,所以

在node04上:

ssh-keygen -t dsa -P '' -f

~/.ssh/id_dsa

cat ~/.ssh/id_dsa.pub

~/.ssh/authorized_keys

ssh localhost验证一下

分发到node03上:scp  id_dsa.pub   node03:`pwd`/node04.pub

在node03的.ssh目录下,cat node04.pub >>

authorized_keys,

在node04上ssh node03验证一下可否免密钥登录

修改namenode的一些配置信息

1.vi hdfs-site.xml

去掉snn的配置

dfs.namenode.secondary.http-address

         node03:50090

‚增加以下property

        

   dfs.nameservices      

   mycluster 

   
    

   dfs.replication       

   3  

   

 

        

   dfs.ha.namenodes.

mycluster nn1,nn2

   
        

   dfs.namenode.rpc-address.

mycluster.nn1 node03:9000

   

 

        

   dfs.namenode.http-address.

mycluster.nn1 node03:50070


        

   dfs.namenode.rpc-address.

mycluster.nn2 node04:9000

   

 

        

   dfs.namenode.http-address.

mycluster.nn2 node04:50070

   
        

   dfs.namenode.shared.edits.dir                   qjournal://node03:8485;node04:8485;node05:8485/mycluster

    

  

        

   dfs.journalnode.edits.dir                          /var/ldy/hadoop/ha/jn   

   
        

   dfs.ha.automatic-failover.enabled.cluster                    true  

   

  

        

   dfs.client.failover.proxy.provider.cluster
        org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider

   
        

   dfs.ha.fencing.methods                         sshfence  

   

  

        

   dfs.ha.fencing.ssh.private-key-files                  /root/.ssh/id_rsa   

   

2.vi core-site.xml

fs.defaultFS

hdfs://mycluster

ha.zookeeper.quorum

node07:2181,node08:2181,node09:2181

2.vi slaves

node04

node05

node06

3.安装hadoop

cd /opt ,将其下的ldy目录分发到node04、05、06

scp –r  ldy/ node04:`pwd`

scp –r
ldy/ node05:pwd

scp –r
ldy/ node06:pwd

4.将hdfs-site.xml和core-site.xml分发到node04、05、06

-scp hdfs-site.xml

core-site.xml node04:pwd

-scp hdfs-site.xml

core-site.xml node05:pwd

-scp hdfs-site.xml

core-site.xml node06:pwd

安装zookeeper

1.解压安装zookeeper

tar xf

zookeeper-3.4.6.tar.gz -C /opt/ldy

2.修改zookeeper的配置文件

cd /opt/ldy/zookeeper-3.4.6/conf

给zoo_sample.cfg改名

cp zoo_sample.cfg zoo.cfg

vi zoo.cfg

改dataDir=/var/ldy/zk

并在末尾追加

       server.1=node04:2888:3888

server.2=node05:2888:3888

server.3=node06:2888:3888

其中2888主从通信端口,3888是当主挂断后进行选举机制的端口

3.把zookeeper分发到其他节点

scp -r zookeeper-3.4.6/

node05:pwd

scp -r zookeeper-3.4.6/ node06:`pwd`

并用ll /opt/ldy检查下看分发成功没

4.给每台机子创建刚配置文件里的路径

mkdir -p /var/ldy/zk

对node04来说:

echo 1 >

/var/ldy/zk/myid

cat /var/ldy/zk/myid

对node05来说:

echo 2 >

/var/ldy/zk/myid

cat /var/ldy/zk/myid

对node06来说:

echo 3 >

/var/ldy/zk/myid

cat /var/ldy/zk/myid

5.在/etc/profile里面配置

export ZOOKEEPER_HOME=/opt/ldy/zookeeper-3.4.6

export
PATH= P A T H : / u s r / j a v a / j d k 1.7. 0 6 7 / b i n : PATH:/usr/java/jdk1.7.0_67/bin: PATH:/usr/java/jdk1.7.067/bin:HADOOP_HOME/bin: H A D O O P H O M E / s b i n : HADOOP_HOME/sbin: HADOOPHOME/sbin:ZOOKEEPER_HOME/bin

6.然后在把/etc/profile分发到其他node05、node06

scp /etc/profile node05:/etc

scp /etc/profile node06:/etc

在node04、05、06里source /etc/profie,这步千万别忘

验证source这句是否完成,输入zkCli.s,按Tab可以把名字补全zkCli.sh

7.启动zookeeper

全部会话:zkServer.sh start

接着用zkServer.sh status查看每个zookeeper节点的状态

注意:如果启动不起来,请把/etc/profile里的JAVA_HOME改

成绝对路径。

启动journalnode

Why启动journalnode?

为了使两台namenode间完成数据同步

在03、04、05三台机子上分别把journalnode启动起来

hadoop-daemon.sh start

journalnode

用jps检查下进程启起来了没

格式化任一namenode

随意挑一台namenode上执行hdfs namenode –format

另一台namenode不用执行,否则clusterID变了,找不到集群了。

然后,启动刚刚格式化的那太namenode

hadoop-daemon.sh start namenode

给另一namenode同步数据

我们要给另一台namenode同步一下数据,用以下命令

hdfs namenode -bootstrapStandby

格式化zkfc

Hdfs zkfc -formatZK

在node04上执行zkCli.sh打开zookeeper客户端看hadoop-ha是否打开

启动hdfs集群

在node03上启动hdfs集群:

start-dfs.sh

注意:如果那个节点没起来到hadoop目录下去看那个node的日志文件log

Hadoop高可用_第6张图片

然后全部会话jps看一下都起来些什么进程

Hadoop高可用_第7张图片
Hadoop高可用_第8张图片Hadoop高可用_第9张图片

Hadoop高可用_第10张图片

用浏览器访问node03:50070和node04:50070

关闭集群命令:stop-dfs.sh

关闭zookeeper命令:zkServer.sh stop

注意:下一次启动hdfs集群的时候不需要用hadoop-daemon.sh start
journalnode命令启动journalnode,只要start-dfs.sh就可以了。之前启动journalnode是为了同步两个namenode之间的信息。

为MapReduce做准备

把mapred-site.xml.template留个备份,并且改下名字

cp mapred-site.xml.template

mapred-site.xml

在mapred-site.xml里添加如下property



          mapreduce.framework.name

          yarn


在yarn-site.xml里添加如下property

yarn.nodemanager.aux-services

mapreduce_shuffle


yarn.resourcemanager.ha.enabled

true

yarn.resourcemanager.cluster-id

cluster1

yarn.resourcemanager.ha.rm-ids

rm1,rm2

yarn.resourcemanager.hostname.rm1

node05

yarn.resourcemanager.hostname.rm2

node06

yarn.resourcemanager.zk-address

node04:2181,node05:2181,node06:2181

把mapred-site.xml和yarn-site.xml 分发到node04、05、06

scp mapred-site.xml yarn-site.xml node04:pwd

scp mapred-site.xml yarn-site.xml node05:pwd

scp mapred-site.xml yarn-site.xml node06:pwd

由于node05和node06都是resourcemanager,所以它俩应该相互免密钥

node05上免密钥登录node06:

在node05的.ssh目录下生成密钥

ssh-keygen -t dsa -P '' -f

./id_dsa

并追加到自己authorized_keys

cat id_dsa.pub >>

authorized_keys

用ssh localhost验证看是否需要密码,别忘了exit

将node05 的公钥分发到node06

scp id_dsa.pub

node06:pwd/node05.pub

在node06的.ssh目录下,追加node05.pub

cat node05.pub >>

authorized_keys

在node05上ssh node06,看是否免密钥

node06上免密钥登录node05:

在node06的.ssh目录下生成密钥

ssh-keygen -t dsa -P '' -f

./id_dsa

并追加到自己authorized_keys

cat id_dsa.pub >>

authorized_keys

用ssh localhost验证看是否需要密码,别忘了exit

将node06 的公钥分发到node05

scp id_dsa.pub

node05:pwd/node06.pub

在node05的.ssh目录下,追加node06.pub

cat node06.pub >>

authorized_keys

在node06上ssh node05,看是否免密钥

1.启动zookeeper,全部会话zkServer.sh
start

2.在node03上启动hdfs,start-dfs.sh

3.在node03上启动yarn,start-yarn.sh

4.在node05、06上分别启动resourcemanager,

   yarn-daemon.sh start

resourcemanager

5.全部会话jps,看进程全不全

Hadoop高可用_第11张图片
Hadoop高可用_第12张图片

Hadoop高可用_第13张图片

Hadoop高可用_第14张图片

在浏览器访问node05:8088,查看resourcemanager管理的内容

跑一个wordcount试试

1.cd /opt/ldy/hadoop-2.6.5/share/hadoop/mapreduce

2.在hdfs里建立输入目录和输出目录

hdfs dfs -mkdir

-p /data/in

hdfs dfs -mkdir

-p /data/out

3.将要统计数据的文件上传到输入目录并查看

hdfs dfs -put

~/500miles.txt /data/input

hdfs dfs -ls /data/input
  1. 运行wordcount(注意:此时的/data/out必须是空目录

    hadoop jar hadoop-mapreduce-examples-2.6.5.jar wordcount /data/in /data/out/result

5.查看运行结果

hdfs dfs -ls

/data/out/result

hdfs dfs -cat

/data/out/result/part-r-00000
Hadoop高可用_第15张图片

关闭集群:

node03: stop-dfs.sh 

node03: stop-yarn.sh (停止nodemanager)

node05,node06: yarn-daemon.sh stop resourcemanager

Node04、05、06:zkServer.sh stop

在Windows下配置hadoop的环境

把压缩包解压后的三个文件夹放到一个usr文件夹里,把usr放到一个你知道的地方。

“此电脑”右键-属性-高级系统设置

更改环境变量,增加HADOOP_HOME

并且给path后追加HADOOP_HOME的bin目录,注意:Windows里path的路径分隔符是分号;,而不是冒号:

然后再新建一个变量HADOOP_USER_NAME

把hadoop.dll拷贝到以下路径

安装ecipse-mars,此版本的eclipse带插件,可以可视化的看到hadoop的一些东西,比较方便

如果eclipse界面下方没有小象图标,则做后续三步调出

Hadoop高可用_第16张图片

在eclipse里把hadoop相关信息填一下

Hadoop高可用_第17张图片
Hadoop高可用_第18张图片

新建一个hadoop localtion

Hadoop高可用_第19张图片
Hadoop高可用_第20张图片

这样在eclipse左侧列表的DFS location里新建一个目录,对应hdfs里也就建好了,可以用浏览器查看一下,自己试试。

在eclipse里导入自己建一个包库

Hadoop高可用_第21张图片

把jar包导入刚建的包库

Hadoop高可用_第22张图片

把刚建的包库引入到project里

Hadoop高可用_第23张图片

把JUnit包库引入到project里

Hadoop高可用_第24张图片

利用xftp把hdfs-site.xml,core-site.xml等几个xml放到project的src目录。

利用xftp把hdfs-site.xml,core-site.xml等几个xml放到project的src目录。

你可能感兴趣的:(Hadoop高可用)