4.3 配置ssh免密码登陆
参考文章地址:http://blog.csdn.net/ab198604/article/details/8250461
SSH主要通过RSA算法来产生公钥与私钥,在数据传输过程中对数据进行加密来保障数 据的安全性和可靠性,公钥部分是公共部分,网络上任一结点均可以访问,私钥主要用于对数据进行加密,以防他人盗取数据。总而言之,这是一种非对称算法,
想要破解还是非常有难度的。Hadoop集群的各个结点之间需要进行数据的访问,被访问的结点对于访问用户结点的可靠性必须进行验证,hadoop采用的是ssh的方
法通过密钥验证及数据加解密的方式进行远程安全登录操作,当然,如果hadoop对每个结点的访问均需要进行验证,其效率将会大大降低,所以才需要配置SSH免 密码的方法直接远程连入被访问结点,这样将大大提高访问效率。 namenode节点配置免密码登陆其他节点,每个节点都要产生公钥密码,Id_dsa.pub为公钥,id_dsa为私钥,紧接着将公钥文件复制成authorized_keys文件,这个步骤是必须的,过程如下:
a. 每个节点分别产生密钥 # 提示:
(1):.ssh目录需要755权限,authorized_keys需要644权限;
(2):Linux防火墙开着,hadoop需要开的端口需要添加,或者关掉防火墙; (3):数据节点连不上主服务器还有可能是使用了机器名的缘故,还是使用IP地址比较稳妥。
b. name01(192.168.85.128)主库上面:
namenode主节点hadoop账户创建服务器登陆公私钥: mkdir -p /home/hadoop/.ssh
chown hadoop.hadoop -R /home/hadoop/.ssh chmod 755 /home/hadoop/.ssh su - hadoop
cd /home/hadoop/.ssh
ssh-keygen -t dsa -P '' -f id_dsa
[hadoop@name01 .ssh]$ ssh-keygen -t dsa -P '' -f id_dsa 如果错误执行:setenforce 0
Id_dsa.pub为公钥,id_dsa为私钥,紧接着将公钥文件复制成authorized_keys文件,这个步骤是必须的,过程如下:
[hadoop@name01 .ssh]$ cat id_dsa.pub >> authorized_keys
data01和data02执行以上相同的操作,生产authorized_keys
c. 构造3个通用的authorized_keys 在name01(192.168.85.128)上操作: su - hadoop
cd /home/hadoop/.ssh
scp hadoop@data01:/home/hadoop/.ssh/id_dsa.pub ./id_dsa.pub.data01 scp hadoop@data02:/home/hadoop/.ssh/id_dsa.pub ./id_dsa.pub.data02
cat id_dsa.pub.data01 >> authorized_keys cat id_dsa.pub.data02 >> authorized_keys
cat authorized_keys
看到authorized_keys文件里面有3行记录,分别代表了访问name01,data01,data02的公用密钥。把这个authorized_keys公钥文件copy到data01和data02上面同一个目录下。
copy文件 authorized_keys,然后通过hadoop远程彼此连接name01、data01、data02就可以免密码
scp authorized_keys hadoop@data01:/home/hadoop/.ssh/ scp authorized_keys hadoop@data02:/home/hadoop/.ssh/
然后分别在name01、data01、data02以hadoop用户执行权限赋予操作 su - hadoop
chmod 600 /home/hadoop/.ssh/authorized_keys chmod 700 -R /home/hadoop/.ssh
测试ssh免秘钥登录,首次连接的时候,需要输入yes,之后就不用输入密码直接可以ssh过去了。
d. 验证name01、data01、data02任何ssh免密码登录 [hadoop@data02 ~]$ ssh name01
Last login: Thu Aug 21 02:38:46 2014 from data02 [hadoop@name01 ~]$ ssh data01
Last login: Thu Aug 21 02:30:35 2014 from localhost.localdomain [hadoop@data01 ~]$ ssh data02
Last login: Thu Aug 21 02:32:57 2014 from localhost.localdomain [hadoop@data02 ~]$ ssh data01
Last login: Thu Aug 21 02:39:55 2014 from name01 [hadoop@data01 ~]$ ssh name01
Last login: Thu Aug 21 02:39:51 2014 from data02 [hadoop@name01 ~]$ ssh data02
Last login: Thu Aug 21 02:39:58 2014 from data01 [hadoop@data02 ~]$
4.4安装部署hadoop环境 4.4.1 java环境准备
root账户下所有节点安装jdk
4.4.2安装hadoop
A.版本2.6.0安装
从本地copy到linux虚拟机桌面
tar zxvf hadoop-2.6.0-x64.tar.gz -C /home/hadoop/src/
B.配置环境变量:
使用root设置环境变量 vi /etc/profile
export HADOOP_HOME=/home/hadoop/src/hadoop-2.6.0 export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_60/
export PATH=/home/hadoop/src/hadoop-2.6.0/bin:/home/hadoop/src/hadoop-2.6.0/sbin:$PATH
source /etc/profile
4.4.3 hadoop配置文件
hadoop群集涉及配置文件:hadoop-env.sh core-site.xml hdfs-site.xml mapred-site.xml yarn-env.sh slaves yarn-site.xml 涉及到的配置文件有7个:
cp /home/hadoop/src/hadoop-2.6.0/etc/hadoop hadoop-env.sh yarn-env.sh slaves
core-site.xml hdfs-site.xml mapred-site.xml yarn-site.xml
a.修改hadoop-env.sh配置: vim hadoop-env.sh
增加java环境变量(将注释去掉,添加jdk的路径) export JAVA_HOME=/usr/lib/jvm/jdk1.7.0_60
b.修改yarn-env.sh配置: vim yarn-env.sh
修改java_home值为 export JAVA_HOME=\
c.修改slaves配置,写入所有从节点主机名: vim slaves data01 data02
d.修改core-site.xml配置文件:
e.修改hdfs-site.xml配置: 创建相关目录
mkdir -p /data/hadoop/name
chown -R hadoop.hadoop /data/hadoop/name
mkdir -p /data/hadoop/data
chown -R hadoop.hadoop /data/hadoop/data
f.修改mapred-site.xml配置
#这个文件不存在,需要自己VIM创建
g.修改yarn-site.xml配置:
所有节点采用相同的配置文件和安装目录,直接整个目录copy过去安装把name01上面的所有hadoop目录copy到data02上面去:
scp -r /home/hadoop/* hadoop@data02:/home/hadoop/ scp -r /data/hadoop/* hadoop@data02:/data/hadoop/
把name01上面的所有hadoop目录copy到data01上面去: scp -r /home/hadoop/* hadoop@data01:/home/hadoop/ scp -r /data/hadoop/* hadoop@data01:/data/hadoop/
4.4.4格式化文件系统
在name01主库上面执行 hadoop namenode -format操作,格式化hdfs文件系统。
注意:上面只要出现“successfully formatted”就表示成功了,只在第一次启动的时候格式化,
不要每次启动都格式化。理解为我们新买了块移动硬盘,使用之前总要格式化硬盘。如果真的有必要再次格式化,请先把“$HADOOP_HOME/tmp”目录下的文件全部删除。
读者可以自己观察目录”$HADOOP_HOME/tmp”在格式化前后的变化情况。格式化操作很少有出现失败的情况。如果真出现了,请检查配置是否正确。
4.5讲述hadoop 启动的三种方式 4.5.1第一种,一次性全部启动
执行start-all.sh 启动hadoop,观察控制台的输出,可以看到正在启动进程,分别是namenode、datanode、secondarynamenode、jobtracker、tasktracker,一共5 个,待执行完毕后,并不意味着这5 个进程成功启动,上面仅仅表示系统正在启动进程而已。我们使用jdk 的命令jps 查看进程是否已经正确启动。执行以下jps,如果看到了这5 个进程,说明hadoop 真的启动成功了。如果缺少一个或者多个,那就进入到“Hadoop的常见启动错误”章节寻找原因了。
停止应用:
/home/hadoop/src/hadoop-2.6.0/sbin/stop-all.sh
启动应用:
/home/hadoop/src/hadoop-2.6.0/sbin/start-all.sh
检查后台各个节点运行的hadoop进程
[hadoop@name01 hadoop]$ jps
[hadoop@data01 ~]# jps
通过网站查看hadoop集群情况
进入http://192.168.52.128:50070/dfshealth.html#tab-overview,看集群基本信息,如下图所示:
4.5.2第二种,分别启动HDFS 和yarn
执行命令start-dfs.sh,是单独启动hdfs。执行完该命令后,通过jps 能够看到NameNode、DataNode、SecondaryNameNode 三个进程启动了,该命令适合于只执行hdfs 存储不使用yarn做资源管理。关闭的命令就是stop-dfs.sh 了。
3.4.3.1 先启动HDFS
[hadoop@name01 sbin]$ jps 3687 Jps
[hadoop@name01 sbin]$ pwd
/home/hadoop/src/hadoop-2.6.0/sbin [hadoop@name01 sbin]$ start-dfs.sh Starting namenodes on [name01] name01: starting namenode, logging to /home/hadoop/src/hadoop-2.6.0/logs/hadoop-hadoop-namenode-name01.out data01: starting datanode, logging to /home/hadoop/src/hadoop-2.6.0/logs/hadoop-hadoop-datanode-data01.out data02: starting datanode, logging to /home/hadoop/src/hadoop-2.6.0/logs/hadoop-hadoop-datanode-data02.out Starting secondary namenodes [name01] name01: starting secondarynamenode, logging to /home/hadoop/src/hadoop-2.6.0/logs/hadoop-hadoop-secondarynamenode-name01.out
在name01节点下,查看后台的jps进程如下: [hadoop@name01 sbin]$ jps 4081 Jps
3800 NameNode
3977 SecondaryNameNode [hadoop@name01 sbin]$ [root@hadoop03 src]# jps 13894 Jps