Hadoop 2.7.2 集群搭建-预备工作

版本信息:Centos7 + Hadoop 2.7.2

Hadoop + Spark 集群搭建系列文章,建议按顺序参考:

Hadoop & Spark 集群搭建 理念思想

Hadoop 2.7.2 集群搭建-预备工作 (不用点了,就是本文)

Hadoop 2.7.2 集群搭建

Spark 1.6.2 + Hadoop 2.7.2 集群搭建


一般设置

Hadoop集群最好所有节点创建专门的用户组,使用相同的用户名,且所有节点上安装的Hadoop及相关目录,最好要保持完全一致的目录结构,这样规范而不容易出错。经过简单设置好,集群拓扑结构为3台Centos7电脑:

master:1台,主机名master,用户名liuyao
slave:2台,主机名分别是slave1和slave2,用户名liuyao


JDK配置

Centos7自带jdk,环境变量位置使用which java不好找,可以试试locate dt.jar

[liuyao@master ~]$ java -version
openjdk version "1.8.0_91"
OpenJDK Runtime Environment (build 1.8.0_91-b14)
OpenJDK 64-Bit Server VM (build 25.91-b14, mixed mode)
[liuyao@master ~]$ which java
/usr/bin/java
[liuyao@master ~]$ locate dt.jar
/usr/lib/jvm/java-1.6.0-openjdk-1.6.0.38.x86_64/lib/dt.jar
/usr/lib/jvm/java-1.7.0-openjdk-1.7.0.101-2.6.6.1.el7_2.x86_64/lib/dt.jar
/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64/lib/dt.jar
/usr/share/java/tomcat/jasper-jdt.jar

设置jdk环境变量,在/etc/profile添加:

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.91-0.b14.el7_2.x86_64

建议此时在各节点的 /etc/hadoop/hadoop-env.sh 文件里把export JAVA_HOME=${JAVA_HOME}也改成上面那个代码(注意,各节点的JAVA_HOME可能还不一样),因为后面启动 hadoop 时很可能会警告: JAVA_HOME is not set。


SSH配置

Hadoop各主机(守护进程)之间通信需要使用SSH,SSH登录分为口令登录和公钥登录(无密钥登录)。

hosts文件配置

为了方便,使SSH时不必输入IP,则可以选择在 /etc/hosts 文件里添加节点名及其IP,添加后的效果如下:

101.X.XX.XX0 master
101.X.XX.XX1 slave1
101.X.XX.XX2 slave2

修改之后,下文类似ssh liuyao@101.X.XX.XX1都可以改成ssh slave1即可,一是slave1已在hosts里配置好IP,二是两主机用户名都一样,可省略。不过下文为说明问题,用户名和IP都保留。

口令登录

[liuyao@master .ssh]$ ssh liuyao@101.X.XX.XX1
The authenticity of host '101.X.XX.XX1 (101.X.XX.XX1)' can't be established.
ECDSA key fingerprint is 16:b0:c9:da:66:17:c9:93:2e:4d:7c:dd:13:18:bd:9e.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '101.X.XX.XX1' (ECDSA) to the list of known hosts.
liuyao@101.X.XX.XX1's password: 
Last login: Thu Jul 14 15:32:31 2016 from localhost
[liuyao@slave1 ~]$ 

主机A第一次ssh到某个主机B时,无法确认主机B的真实性,只知道它的公钥指纹,系统警告是否继续连接?确认连接后,主机B及其公钥信息会添加到主机A的~/.ssh/known_hosts文件里,下次连接就跳过警告。

公钥登录

公钥登录即为无密码登录

使用ssh-keygen -t -p -f生成rsa类型的密钥,口令为空,放置在~/.ssh/处,私钥为id_rsa,公钥为id_rsa.pub

[liuyao@master ~]$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa

无密码SSH方法1:使用ssh-copy-id user@hostB 把当前主机A的公钥共享给主机B(此处为localhost),主机B收到后生成~/.ssh/authorized_keys文件,里面有主机A的公钥。

[liuyao@master ~]$ ssh-copy-id localhost

无密码SSH方法2: 手动生成相关文件并追加内容

[liuyao@master ~]$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

输入下面指令进行检测,若无需密码,则配置成功

[liuyao@master ~]$ ssh localhost
Last login: Thu Jul 14 14:30:54 2016
[liuyao@master ~]$ 

若不成功,要需要修改相关配置文件并重启服务sshd

[liuyao@master ~]$ sudo vi /etc/ssh/sshd_config 
# 去掉/etc/ssh/sshd_config文件里下面三行前面的注释
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
[liuyao@master ~]$ service sshd restart

注意:以上以liuyao普通用户举例说明实现公钥登录的方法,root还没实现公钥登录,若Hadoop安装配置需要以root用户来操作(比如Hadoop安装在/usr/local/或/opt/目录下,有时就需要root来操作),则还需要为root用户实现公钥登录。本人为了省事,所有Hadoop和Spark以及相关配置都安装配置在/home/liuyao/00Hadoop/里,包括namenode和datanode的本地文件目录,这样可以使绝大多数操作都不需要root权限,也就不需要再为root用户实现公钥登录了。

文件说明

[liuyao@master ~]$ cd ~/.ssh/
[liuyao@master .ssh]$ ls
[liuyao@master .ssh]$
# 经过口令登录和公钥登录之后……
[liuyao@master ~]$ cd ~/.ssh/
[liuyao@master .ssh]$ ls
authorized_keys  id_rsa  id_rsa.pub  known_hosts

注意:初始时是没有这4个文件的,经过以上口令登录和公钥登录等操作后才一一生成。

id_rsa和id_rsa.pub

当前主机用户的私钥和公钥,用ssh-keygen生成,其中公钥用来发给别的主机可实现无密码SSH连通。

authorized_keys

当前主机为被登录者,文件存放登录者公钥:公钥登录(无密码登录)时,remote client A–SSH–>localhost B,A的公钥。当A要SSH到B时,B随机生成字符串给A,A使用自己的私钥加密字符串返回给B,B使用A的公钥解密后与之前的随机字符串匹配,匹配成功即为登录成功。

# slave2主机ssh到master主机,进行公钥登录设置,slave2的公钥发给master主机authorized_keys文件里
[liuyao@slave2 .ssh]$ ssh-copy-id liuyao@101.X.XX.XX0
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
liuyao@101.X.XX.XX0's password: 

Number of key(s) added: 1
Now try logging into the machine, with:   "ssh 'liuyao@101.X.XX.XX0'"
and check to make sure that only the key(s) you wanted were added.

[liuyao@slave2 .ssh]$ ssh liuyao@101.X.XX.XX0
Last login: Thu Jul 14 18:36:39 2016 from 101.X.XX.XX2
[liuyao@master ~]$ 
# 主机master的authorized_keys文件里有localhost和两个slave主机的公钥信息
[liuyao@master .ssh]$ cat authorized_keys 
ssh-rsa …… liuyao@localhost.localmain
ssh-rsa …… liuyao@slave1
ssh-rsa …… liuyao@slave2

known_hosts

当前主机为登录者,文件存放被登录者公钥:口令登录时,localhost A–SSH–>remote host B,B的公钥。当A要SSH到B时,A用B的公钥来加密密码传输给B,B收到加密的密码后用自己的私钥解密,密码正确即为登录成功。

# 当前主机的known_hosts文件里有添加的3个主机及其公钥信息:localhost、101.X.XX.XX1和101.X.XX.XX2
[liuyao@master .ssh]$ cat known_hosts 
localhost ecdsa-sha2-nistp256 ……
101.X.XX.XX1 ecdsa-sha2-nistp256 ……
101.X.XX.XX2 ecdsa-sha2-nistp256 ……

注意!注意!以上设置需要在集群各节点里配置(配置内容和方法一样,可以采用复制配置文件的方法),以下Hadoop安装和配置先只在master里进行,后面有需要的时候再配置slaves里的Hadoop(其实是直接把master的hadoop文件夹复制过去)。


Hadoop安装和环境设置

Hadoop官网上下载稳定版的Hadoop 2.7.2,解压后放置在/home/liuyao/00Hadoop下,教材和网上会选择放在/usr/local/或/opt/下,我之所以选择放在liuyao用户目录上,是因为:

  • 这样不需要拥有root权限即可进行某些关键操作
  • 各节点之前互相SSH通信都可以使用liuyao这一普通用户
[liuyao@master ~]$ cd /home/liuyao/03Software/04BigData/
[liuyao@master 04BigData]$ tar xzf hadoop-2.7.2.tar.gz --directory=/home/liuyao/00Hadoop/

配置Hadoop环境变量

注意:这个步骤需要在集群各节点里都配置!

[root@master hadoop-2.7.2]$ vi /etc/profile
# 在文件中添加以下两行
export HADOOP_INSTALL=/home/liuyao/00Hadoop/hadoop-2.7.2
export PATH=$PATH:${HADOOP_INSTALL}/bin:${HADOOP_INSTALL}/sbin

输入以下命令判断Hadoop是否工作

[liuyao@master ~]$ hadoop version
Hadoop 2.7.2
……

参考

http://www.ruanyifeng.com/blog/2011/12/ssh_remote_login.html

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值