概述
在前面我有写过关于 Hadoop 集群的搭建,不过之前的 Hadoop 是 1.x 版本的。目前是基于 2.x 版本的 Hadoop,与之前的 1.x 版本的差别还是挺大的。以及更为详细的 SSH 免密码互连登录的配置过程。所以,这里也把我搭建的过程记录下来了。希望于你有益。
版权说明
著作权归作者所有。
商业转载请联系作者获得授权,非商业转载请注明出处。
本文作者:Q-WHai
发表日期: 2016年5月4日
本文链接:http://blog.csdn.net/lemon_tree12138/article/details/51316883
来源:CSDN
更多内容:分类 >> 大数据之 Hadoop
目录
环境说明
- CentOS-6.7 ( master )
- CentOS-6.7 ( slave1 )
- CentOS-6.7 ( slave2 )
- JDK-1.8.0_92 ( Oracle )
- Hadoop-2.2.0
- 虚拟机环境: VirtualBox 5.0
系统环境准备
关闭防火墙
$ sudo service iptables stop
$ sudo chkconfig iptables off # 设置防火墙不随系统启动,这一条你可以选择性添加
禁用 IPv6
$ sudo vim /etc/modprobe.d/dist.conf
添加如下内容
alias net-pf-10 off
alias ipv6 off
重启后验证操作
$ lsmod|grep ipv6
禁用 SELinux
$ sudo vim /etc/selinux/config
修改后的内容如下:
# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - No SELinux policy is loaded.
# SELINUX=enforcing
SELINUX=disabled
# SELINUXTYPE= can take one of these two values:
# targeted - Targeted processes are protected,
# mls - Multi Level Security protection.
SELINUXTYPE=targeted
修改 hosts
(1) hostname
$ sudo vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master
GATEWAY=172.16.2.20
(2)
$ sudo vim /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.2.144 master
172.16.2.171 slave1
172.16.2.91 slave2
Oracle JDK 1.8 安装
关于 Java 的安装,你可以有两种选择。一是 openjdk,另一个就是 Oracle jdk。这里我选择的是 Oracle jdk,而推荐的也是 Oracle jdk。
安装过程很简单,这里就不赘述了。
配置 SSH
配置 SSH 的目的在于实现集群中的机器可以免密码相互登录。
下载安装
$ sudo yum -y install openssh-server
$ sudo yum -y install openssh-clients
这里的 openssh-clients 不是必须安装的。如果你安装 ssh-server 完成之后,运行 ssh 出现系统无法识别 ssh 的话,需要另外安装 openssh-clients。
验证
OpenSSH_5.3p1, OpenSSL 1.0.1e-fips 11 Feb 2013
Bad escape character 'rsion'.
如果 SSH 安装成功,验证时会出现类似上面的版本信息。
创建目录
$ mkdir -p ~/.ssh
$ chmod 700 ~/.ssh
如果你在安装完SSH后,这些目录都未自动生成,请自行创建。如果要免密码登录,.ssh 文件夹的权限也要修改。
修改配置文件
执行如下指令:
$ sudo vim /etc/ssh/sshd_config
在文件中找到如下内容,将内容前面的注释去掉。如果没有,就自己添加吧。
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
这一步是至关重要的,如果没有这一步,那么只能免密码登录本机,而无法免密码登录其他的机子了。
这里比如,如果你想让 master 主机免密码登录 slave 主机,那么就要修改 master 主机的配置文件。
重启 ssh
$ sudo service sshd restart
由于修改了 ssh 的配置文件,所以这里必须重启 ssh 服务才能生效。
创建密钥
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
指令的相关参数说明如下:
ssh-keygen 表示生成密钥
-t 表示指定生成的密钥类型
dsa 是dsa密钥认证的意思,即密钥类型
-P 提供密语
-f 指定生成的密钥文件
公钥下发
$ scp id_dsa.pub slave1:~/.ssh/
这里是将 master 的公钥下发到 slave 机群中。在第一次下发的时候,会有一些连接提示及密码提示。
创建认证文件
$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
将 master 主机上的公钥添加到用于认证的公钥文件中,authorized_keys 是用于认证的公钥文件。并修改 认证文件的权限。
此步骤是在 slave 机上完成。
登录验证
[hadoop@master .ssh]$ ssh slave1
Last login: Thu Apr 28 15:17:57 2016 from master
[hadoop@slave1 ~]$
补充
上面的过程只是单向的免密码登录。如果想要两两相互免密码登录,则需要集群中的所有机器都有其他机器的公钥。而具体操作也很简单,这里就不赘述了。
Hadoop 配置
下载安装
这里可以在 Apache 的官网上下载,如果官网已经下架,就去百度或是 Google 里找,总会有的。
将下载下来的 Hadoop-2.2.0 用 WinSCP 上传到虚拟机上(当然你也可以直接在虚拟机里下载),解压,并重命名为 hadoop。
$ tar -zxvf hadoop-2.2.0.tar.gz
$ mv hadoop-2.2.0 hadoop
$ cd hadoop
$ chmod -Rv 755 ./bin/
$ chmod -Rv 755 ./sbin/
$ mkdir -p /home/hadoop/dfs/name
$ mkdir -p /home/hadoop/dfs/data
$ mkdir -p /home/hadoop/hadoop/tmp
上面对两个文件夹进行权限修改,是因为在这两个文件里有一些可执行文件,如果不修改他们的执行权限,那在启动时就会有权限限制。
配置文件
对于上面的下载安装步骤,基本已经 ok,不过如果想要正常使用,还是要配置,而 Hadoop 环境部署的核心就是此处的配置文件。
需要修改的配置文件列表如下:
1. /etc/profile
2.
4.
6.
8. ${HADOOP_HOME}/etc/hadoop/slaves
/etc/profile
这是系统里的环境变量配置文件。配置此项目的目的是在于方便在任意目录都可以使用 Hadoop/bin 里的可执行文件(当然你也可以把 $HADOOP_HOME/sbin 加进去)。
export HADOOP_HOME=/home/hadoop/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
${HADOOP_HOME}/etc/hadoop/hadoop-env.sh
在环境变量配置文件的合适位置添加如下 JAVA_HOME 信息:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_92
${HADOOP_HOME}/etc/hadoop/yarn-env.sh
在环境变量配置文件的合适位置添加如下 JAVA_HOME 信息:
export JAVA_HOME=/usr/lib/jvm/jdk1.8.0_92
${HADOOP_HOME}/etc/hadoop/core-site.xml
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/hadoop/hadoop/tmp</value>
</property>
</configuration>
${HADOOP_HOME}/etc/hadoop/hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.support.append</name>
<value>true</value>
</property>
</configuration>
dfs.replication 的值一般设为 3,但我们只有两个 Slave 节点,所以 dfs.replication 的值重置为 2。
${HADOOP_HOME}/etc/hadoop/mapred-site.xml
<configuration>
<property>
<name>mapreduce.job.tracker</name>
<value>hdfs://master:9001</value>
</property>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
需要先重命名,默认文件名为 mapred-site.xml.template.
${HADOOP_HOME}/etc/hadoop/yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
需要先重命名,默认文件名为 yarn-site.xml.template.
${HADOOP_HOME}/etc/hadoop/slaves
slave1
slave2
下发
这里说的下发就是把配置好的 hadoop,复制到另外两台 Slave 机中。下发的操作是基于 SSH 的,如下:
$ scp -r ~/hadoop slave1:~/
$ scp -r ~/hadoop slave2:~/
启动及验证
格式化 HDFS
在启动 Hadoop 之前,我们需要先格式化 HDFS。如下:
$ hadoop namenode –format
对于正常格式化的操作,这里会显示如下输出:
DEPRECATED: Use of this script to execute hdfs command is deprecated.
Instead use the hdfs command for it.
16/05/04 10:15:38 INFO namenode.NameNode: STARTUP_MSG:
/************************************************************
STARTUP_MSG: Starting NameNode
STARTUP_MSG: host = master/172.16.2.117
STARTUP_MSG: args = [-format]
STARTUP_MSG: version = 2.2.0
STARTUP_MSG: classpath = /home/hadoop/hadoop/etc/hadoop: ( ... 此处省略 N 条 ... ) :/home/hadoop/hadoop/contrib/ capacity-scheduler/*.jar
STARTUP_MSG: build = Unknown -r Unknown; compiled by 'root' on 2013-11-22T03:4 1Z
STARTUP_MSG: java = 1.8.0_92
************************************************************/
( ... 此处省略 N 条 ... )
16/05/04 10:15:45 INFO common.Storage: Storage directory /home/hadoop/dfs/name has been successfully formatted.
16/05/04 10:15:45 INFO namenode.FSImage: Saving image file /home/hadoop/dfs/name/current/fsimage.ckpt_0000000000000000000 using no compression
16/05/04 10:15:45 INFO namenode.FSImage: Image file /home/hadoop/dfs/name/current/fsimage.ckpt_0000000000000000000 of size 198 bytes saved in 0 seconds.
16/05/04 10:15:45 INFO namenode.NNStorageRetentionManager: Going to retain 1 images with txid >= 0
16/05/04 10:15:45 INFO util.ExitUtil: Exiting with status 0
16/05/04 10:15:45 INFO namenode.NameNode: SHUTDOWN_MSG:
/************************************************************
SHUTDOWN_MSG: Shutting down NameNode at master/172.16.2.117
************************************************************/
启动 HDFS
$ ${HADOOP_HOME}/sbin/start-dfs.sh
对于正常的启动来说,会有类似如下的输出内容:
Starting namenodes on [master]
The authenticity of host 'master (172.16.2.144)' can't be established.
RSA key fingerprint is 98:4f:21:03:76:e2:e9:96:77:3e:88:c5:88:70:04:cf.
Are you sure you want to continue connecting (yes/no)? yes
master: Warning: Permanently added 'master,172.16.2.144' (RSA) to the list of kn own hosts.
master: starting namenode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-nam enode-master.out
hadoop@slave1's password: hadoop@slave2's password:
slave1: starting datanode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-dat anode-slave1.out
slave2: starting datanode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-dat anode-slave2.out
Starting secondary namenodes [master]
master: starting secondarynamenode, logging to /home/hadoop/hadoop/logs/hadoop-h adoop-secondarynamenode-master.out
启动 Yarn
$ ${HADOOP_HOME}/sbin/start-yarn.sh
对于正常的启动来说,会有类似如下的输出内容:
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-resourcemanager-master.out
hadoop@slave2's password: hadoop@slave1's password:
slave2: starting nodemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-nodemanager-slave2.out
slave1: starting nodemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-nodemanager-slave1.out
启动全部
$ ${HADOOP_HOME}/sbin/start-all.sh
对于正常的启动来说,会有类似如下的输出内容:
[hadoop@master hadoop]$ ./sbin/start-all.sh
This script is Deprecated. Instead use start-dfs.sh and start-yarn.sh
Starting namenodes on [master]
master: starting namenode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-namenode-master.out
slave2: starting datanode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-datanode-slave2.out
slave1: starting datanode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-datanode-slave1.out
Starting secondary namenodes [master]
master: starting secondarynamenode, logging to /home/hadoop/hadoop/logs/hadoop-hadoop-secondarynamenode-master.out
starting yarn daemons
starting resourcemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-resourcemanager-master.out
slave2: starting nodemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-nodemanager-slave2.out
slave1: starting nodemanager, logging to /home/hadoop/hadoop/logs/yarn-hadoop-nodemanager-slave1.out
验证
(1) 验证启动的进程
$ jps
Master 端
[hadoop@master hadoop]$ jps
3202 Jps
2923 ResourceManager
2795 SecondaryNameNode
2637 NameNode
Slave 端
[hadoop@slave1 ~]$ jps
2256 DataNode
2419 Jps
2319 NodeManager
(2) 网页验证
# 查看 HDFS
登录浏览器,输入 http://master:50070
# 查看 RM
登录浏览器,输入 http://master:8088
关闭全部
$ ${HADOOP_HOME}/sbin/stop-all.sh
对于正常的启动来说,会有类似如下的输出内容:
[hadoop@master hadoop]$ ${HADOOP_HOME}/sbin/stop-all.sh
This script is Deprecated. Instead use stop-dfs.sh and stop-yarn.sh
Stopping namenodes on [master]
master: stopping namenode
slave2: stopping datanode
slave1: stopping datanode
Stopping secondary namenodes [master]
master: stopping secondarynamenode
stopping yarn daemons
no resourcemanager to stop
slave2: no nodemanager to stop
slave1: no nodemanager to stop
no proxyserver to stop