自己动手搭建了一下hadoop完全分布式,现在做下总结,希望对他人能有所帮助,接触时间不长,如有不足,欢迎指正指正。
一 相关准备
hadoop版本: hadoop-2.7.3
jdk版本:1.8.0_65
Linux版本:centos7
VMware Workstation : 搭建四台虚拟机,一台namenode,三台datanode(其实两台就够用)四台虚拟机需要能相互ping通
本文四台主机:s201 s202 s203 s204 其中s201作为namonode,其他三台为datanode
二 搭建hadoop环境
1.安装虚拟机镜像
安装虚拟机的过程在此省略。先只搭建一台虚拟机,作为namenode,安装好之后克隆三份,克隆的三份将携带本所有配置,集群中所有主机配置完全一致。
安装之后,修改本机主机名。本文中namedode主机名称为s201。
vi /etc/hostname 将localhost.domain修改为s201。
保存退出后重启,输入hostname验证主机名。
修改 /etc/hosts 将本机ip与主机名映射。
2. 创建新用户。
尽量不要用root用户,提高安全性。本文中用户为centos
# useradd centos
# psswd centos
之后设置新密码。
登陆centos: su centos
centos所在家目录为 /home/centos,进入该目录并创建downloads文件夹。
$ cd ~ && mkdir downloads
将下载的hadoop和jdk安装包上传到downloads文件夹。
3. 环境搭建。
安装JDK,解压jdk-8u65-linux-x64.tar.gz
[centos@s201 /downloads]$tar -zxvf jdk-8u65-linux-x64.tar.gz
解压完成后会出现jdk1.8.0_65文件夹。创建 /soft 文件夹,作为软件安装目录。使用sudo命令,以管理员身份运行, 需要输入密码。并将soft文件夹的所有权限指定给centos用户。
[centos@s201 /downloads]$ sudo mkdir /soft
[centos@s201 /downloads]$ sudo chown centos:centos /soft
将解压后的jdk文件夹移动到/soft下:
[centos@s201 /soft]$ mv ~/downloads/jdk-1.8.0_65 /soft/
到soft文件夹下确认移动完成后修改配置文件
[centos@s201 /soft]$ sudo vi /etc/profile
在末尾处添加如下内容:
export JAVA_HOME=/soft/jdk1.8.0_65
exprot PATH=$PATH:$JAVA_HOME/bin
保存退出后,输入 sudo source /etc/profile,使配置文件生效。之后验证jdk安装情况,出现以下内容说明jdk配置成功。
[centos@s201 /home/centos]$java -version
java version "1.8.0_65"
Java(TM) SE Runtime Environment (build 1.8.0_65-b17)
Java HotSpot(TM) 64-Bit Server VM (build 25.65-b01, mixed mode)
解压hadoop
[centos@s201 /home/centos/downloads]$ tar -zxvf hadoop-2.7.3.tar.gz
.......解压过程....... 解压完成后移动
[centos@s201 /home/centos/downloads]$ mv hadoop-2.7.3 /soft/
配置hadoop环境变量
[centos@s201 /home/centos/downloads]$ vi /etc/profile
在末尾处添加
export HADOOP_HOME=/soft/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
保存退出后,输入 sudo source /etc/profile,使配置文件生效。之后验证hadoop安装情况,出现以下内容说明配置成功。
[centos@s201 /home/centos/downloads]$hadoop version
Hadoop 2.7.3
Subversion https://git-wip-us.apache.org/repos/asf/hadoop.git -r baa91f7c6bc9cb92be5982de4719c1c8af91ccff
Compiled by root on 2016-08-18T01:41Z
Compiled with protoc 2.5.0
From source with checksum 2e4ce5f957ea4db193bce3734ff29ff4
This command was run using /soft/hadoop-2.7.3/share/hadoop/common/hadoop-common-2.7.3.jar
修改hadoop配置文件,涉及到 hadoop-env.sh,core-site.xml,hdfs-site.xml,mapred-site.xml,yarn-site.xml那文件位 置: /soft/hadoop/etc/hadoop
修改hadoop-env.sh 找到export JAVA_HOME 将值改为本地的java_home 即 /soft/jdk1.8.0_65
修改core-site.xml 的configuration元素
<configuration>
<!--hadoop访问目录节点nameNode-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://s201/</value>
</property>
<!--- 配置新的本地目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/centos/hadoop</value>
</property>
</configuration>
修改hdfs-site.xml 的configuration元素
<configuration>
<property> <!--制定副本数量,本文中有三个副本因此是3-->
<name>dfs.replication</name>
<value>3</value>
</property>
</configuration>
修改mapred-site.xml 的configuration元素
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改yarn-site.xml 的configuration元素
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>s201</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
创建符号连接
[centos@s201 /soft/hadoop/etc/hadoop]$ ln -s /soft/hadoop-2.7.3 /soft/hadoop
配置ssh无密登陆
1)检查是否安装了ssh相关软件包(openssh-server + openssh-clients + openssh)
$yum list installed | grep ssh
2)检查是否启动了sshd进程
$>ps -Af | grep sshd
3)在client侧生成公私秘钥对。
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
4)生成~/.ssh文件夹,里面有id_rsa(私钥) + id_rsa.pub(公钥)
5)追加公钥到~/.ssh/authorized_keys文件中(文件名、位置固定)
$>cd ~/.ssh
$>cat id_rsa.pub >> authorized_keys
6)修改authorized_keys的权限为644.
$>chmod 644 authorized_keys
7)测试
$>ssh localhost
至此,s201的hadoop已经搭建完成。
三 搭建其他三台主机
1 在vm界面将s201克隆三份。
2 三台主机分别修改主机名为s202 s203 s204
3 修改三台主机的ip地址,克隆后的主机ip与s201相同,需要手动修改.
4 修改四台主机的hosts文件,将四台主机的ip与主机名映射配置进去。
5 修改s201的slaves文件,位于/soft/hadoop/etc/hadoop
[centos@s201 /soft/hadoop/etc/hadoop]$ vi slaves
添加以下内容,配置datanode主机
s202
s203
s204
6 在s201上分发slaves文件
[centos@s201 /soft/hadoop/etc/hadoop]scp slaves centos@s202:/soft/hadoop-2.7.3/etc/hadoop
[centos@s201 /soft/hadoop/etc/hadoop]scp slaves centos@s203:/soft/hadoop-2.7.3/etc/hadoop
[centos@s201 /soft/hadoop/etc/hadoop]scp slaves centos@s204:/soft/hadoop-2.7.3/etc/hadoop
7 配置完全分布的ssh
1.删除所有主机上的/home/centos/.ssh/*
2.在s201主机上生成密钥对
$>ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
3.将s201的公钥文件id_rsa.pub远程复制到202 ~ 204主机上。
并放置/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s201:/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s202:/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s203:/home/centos/.ssh/authorized_keys
$>scp id_rsa.pub centos@s204:/home/centos/.ssh/authorized_keys
8 关闭防火墙,四台主机都关
$>sudo systemctl stop firewalld.service //停止防火墙
$>sudo chkconfig firewalld off //"开启自启"禁用
补充防火墙其他指令:
centos防火墙操作
[cnetos 6.5之前的版本]
$>sudo service firewalld stop //停止服务
$>sudo service firewalld start //启动服务
$>sudo service firewalld status //查看状态
[centos7]
$>sudo systemctl enable firewalld.service //"开机启动"启用
$>sudo systemctl disable firewalld.service //"开机自启"禁用
$>sudo systemctl start firewalld.service //启动防火墙
$>sudo systemctl stop firewalld.service //停止防火墙
$>sudo systemctl status firewalld.service //查看防火墙状态
[开机自启]
$>sudo chkconfig firewalld on //"开启自启"启用
$>sudo chkconfig firewalld off //"开启自启"禁用
9 启动hadoop 在s201上依次执行 hdfs namenode -format (第一次启动需要格式化) start-dfs.sh 和 start-yarn.sh 完成后输入jps可看到如下结果
[centos@s201 /soft/hadoop/etc/hadoop]$jps
6805 Jps
5558 SecondaryNameNode
5721 ResourceManager
5341 NameNode
在其他三台机器上输入jps,可以看到如下结果
[centos@s202 /soft/hadoop/etc/hadoop]$jps
5301 NodeManager
5174 DataNode
6079 Jps
[centos@s203 /home/centos]$jps
6053 Jps
5079 NodeManager
4952 DataNode
[centos@s204 /home/centos]$jps
5027 DataNode
6151 Jps
5162 NodeManager
在s201上启动了NameNode,ResourceManager,SecondaryNameNode,在其他三台主机上启动了DataNode和 NodeManager,说明集群已经启动成功。
10 查看webUI 访问s201的50070端口,可见如下界面
启动了namenode和三个datanode,至此,hadoop完全分布式已经搭建完成,相关日志,可查看 ${HADOOP_HOME}/logs
四 伪分布式的搭建
伪分布式在性质上等同于完全分布式,只不过都是在一台机器上运行,只有一个节点。
大部分步骤同上,只是配置文件不同,不需要修改slaves文件
伪分布模式。
a)进入${HADOOP_HOME}/etc/hadoop目录
b)编辑core-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost/</value>
</property>
</configuration>
c)编辑hdfs-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
d)编辑mapred-site.xml
注意:cp mapred-site.xml.template mapred-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
e)编辑yarn-site.xml
<?xml version="1.0"?>
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>