hadoop完全分布式集群搭建

简洁不意味着简单,同样琐碎也不意味着复杂。比如hadoop完全分布式集群的搭建,并不复杂,只是琐碎。

概念介绍

新近所学皆数学,对基本概念(放在一些特定技术的语言环境里就是术语)、基本原理比较敏感。深以为然一点,在大的原理或者框架之下,所有那些记忆起来特别啰嗦的知识点,都是其中的推论或者特例。熟悉基本概念、基本原理,便打开了永久的记忆之门。


这里写图片描述

三种安装模式

如果 hadoop 对应的 java进程运行在一个物理机器中,我们将之称为伪分布,如果它运行在多台物理机器中,就称其为分布式。

  • 本地模式
    又名非分布式,也是hadoop的默认安装模式,无需进行其他配置即可运行。非分布式是单Java进程(jps命令查看的话,只有一个java进程),便于调试。(jps,Java virtual machine Process Status,查看当前运行的java进程数)

  • 伪分布式
    hadoop可以在单节点(单主机)上以伪分布式的方式运行,hadoop进程以分离的java进程来运行,该唯一的节点(主机)既作为namenode也作为datanode。(jps命令查看的话,会有数个java进程,如下图显示)
    这里写图片描述

  • 完全分布式
    与伪分布式相对,hadoop完全分布式需要部署在多节点(多主机,或者虚拟机)上。不同的节点承担不同的任务,例如,根据hadoop存储安全性原则的要求,需将namenodesecondarynamenode部署在不同的节点上。

部署环境

itemversion
VMware10.0
操作系统:Ubuntu 14.04.1 LTS
JDK:jdk1.8.0_45
hadoop:hadoop-1.2.1

网络拓扑结构及节点配置

节点类型节点ip地址节点主机名存放内容
master节点192.168.16.110node1namenode
slave节点192.168.16.120node2datanode、secondarynamenode
slave节点192.168.16.130node3datanode

部署流程及解释

原则:进行任何的Linux相关的操作之后,都要进行必要的验证操作,是否操作成功。好比,进行 rm -rf / 的操纵时,先深呼吸,反问自己:路径是否正确,删除操纵是否必要。

网络配置

先用VMware安装三台虚拟机(先安装一台,后clone两台),根据网络拓扑结构及节点配置配置网络。

vim /etc/hostname
  • 域名解析
    域名解析,顾名思义,将ip地址和主机名进行关联。
vim /etc/hosts

添加如下entry:

192.168.16.110 node1
192.168.16.120 node2
192.168.16.130 node3

建立ssh互信(也即免密码登录)

形式上的免密码登录,也即本质上的建立ssh之间的互信,并非只是为了传输数据的方便,更多的是为了启动以及执行命令的方便。例,如果在主机node1已经实现了对node2、对node3的远程访问,则在node1上可实现全局的开启hadoop,./start-all.sh,而不必分别启动。

这里的ssh和java-web中的ssh之间的联系,好比巴西中场球员奥斯卡和好莱坞的电影艺术学院奖之间的联系,也就是没有联系,仅仅共享一个名字而已。

  • 生成秘钥并配置无密码登录主机(在node1主机)
ssh -keygen -t dsa -P '' -f ~/.ssh/id_dsa
cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  • 将authorized_keys传送到两台slave(node2、node3)上
scp authorized_keys root@node2:~/.ssh/
scp authorized_keys root@node3:~/.ssh/
  • 验证是否在node1可以免密码ssh登录node2、node3、

工作原理:ssh登录远程主机时需要进行密钥的检验,id_dsa是私钥,id_dsa.pub是对应的公钥,一般钥匙对一把锁,将authorized_keys 拷贝到远程主机的同名文件,本地和远程的锁和钥匙向匹配,则验证通过。不知道自己的理解对不对。

根据开篇中所说,任何一个知识点都可作为一个原理之下的推论的话。这里根据上述的工作原理,可以很容易得出,如何在node2(或者node3)上分别ssh免密码登录node1和node3(node2)。

配置JDK

约定将所有软件都安装在/usr/local/路径下。
解压并重命名

tar -zvxf jdk-8u45-linux-i586.gz
mv jdk1.8.0_45 jdk

添加环境变量
/etc/profile中添加:

export JAVA_HOME=/usr/local/jdk
export PATH=.:$JAVA_HOME/bin:$PATH

据我考证PATH变量开头的”.”的意义在于,将:$JAVA_HOME/bin这一路径置于整个PATH变量的首部。
也即如果echo $PATH :$JAVA_HOME/bin这一路径会在最开始的位置。

配置Hadoop

解压并重命名

tar -zvxf hadoop-1.2.1.tar.gz
mv hadoop-1.2.1 hadoop

设置环境变量

/etc/profile添加JAVA_HOME的位置:

export JAVA_HOME=/usr/local/jdk
export HADOOP_HOME=/usr/local/hadoop
export PATH=.:$JAVA_HOME/bin:$HADOOP_HOME/bin:$PATH

配置node1下的hadoop

目前配置的都是主机node1上的文件,进入conf目录;

1. 修改hadoop-env.sh

取消JAVA_HOME的注释并将路径修改为/usr/local/jdk

2. 修改core-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>
    <name>fs.default.name</name>
    <value>hdfs://node1:9000</value>
  </property>
  <property>
    <name>Hadoop.tmp.dir</name>
    <value>/opt/hadoop</value>
  </property>
</configuration>

这里配置的分别是namenode的RPC路径,以及hdfs文件系统的文件存放位置(根目录或者叫基目录),hdfs文件系统格式化之时,会自动创建/opt/hadoop

core-site.xml 对应有于core-default.xml, hdfs-site.xml对应于hdfs-default.xml, mapred-site.xml对应于mapred-default.xml。这三个defalult文件(可在hadoop的解压文件的docs目录下查看)面都有一些默认配置,现在我们修改这三个site文件,目的就覆盖default里面的一些配置

3. 修改hdfs-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<!-- Put site-specific property overrides in this file. -->

<configuration>
  <property>
    <name>dfs.replication</name>
    <value>2</value>
  </property>
</configuration>

顾名思义,设置副本数,本例为2。

4. 修改slaves
node2
node3

配置datanode的ip地址或者主机名(hostname)

5. 修改masters
node2

定义secondarynamenode的节点位置,注意这里的masters不是namenode的主机配置,而是secondarynamenode的主机配置。

配置node2、node3下的hadoop

将已经配置好的hadoop文件夹,拷贝到node2、node3下:

scp /usr/local/hadoop/* root@node2:/usr/local/hadoop
scp /usr/local/hadoop/* root@node3:/usr/local/hadoop

done!!!

验证

1. 开启hdfs

在node1端

start-dfs.sh

打印输出的日志信息说明了启动该流程:
1. 启动本地的namenode,
2. 启动node3上的datanode
3. 启动node2上的datanode
4. 启动node2上的secondarynamenode

可分别在node1、node2、node3,输入jps命令查看各自的进程数,也即,node1:启动namenode,node2:datanode,secondarynamenode,node3:datanode

如果node1的日志信息,显示四个节点都启动起来了,而在node2、node3端,输入jps,却没有对应的显示,这里是防火墙的问题。此时应当:

service iptables stop
stop-dfs.sh
start-dfs.sh

2. 浏览器端验证

访问之前http://node1:50070需要windows操作系统对node1进行解析,在C:\Windows\System32\drivers\etc\hosts文件中添加对应的ip地址和域名的关联信息。

注:50070是hdfs对应于http的端口,而9000是RPC协议端口。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

五道口纳什

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值