搭建Hadoop,需要在安装jdk,hadoop,以及配置它们的环境变量,还有SSH
(虚拟机自带,不用自己安装)
三台主机的普通用户都是同一个:Mcwang
2018/5/16
创建三台虚拟机:master、slave1、slave2
三台主机ip地址分别为:
master:192.168.201.135
slave1: 192.168. 201.133
slave2: 192.168. 201.134
在Mcwang账户下创建一个soft文件夹,专门用来存放软件
1.CentOS自带jdk删除:2种选择
1. rpm -qa | grep jdk
rpm e jdk1.8.0*
2.yum -y remove java*
2.jdk1.8安装
利用SSH上传jdk的tar.gz压缩包到master主机的Linux系统上(上传文件建议在普通用户下上传)
解压:
tar -zxvf jdk...tar.gz
将解压后的文件重命名为jdk,mv old newname , 创建软连接到jdk文件夹:
ln -s jdk jdk.soft
配置环境变量:
root用户下:
vi /etc/profile
export JAVA_HOME=/home/Mcwang/soft/jdk.soft
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:JAVA_HOME/bin:JRE_HOME/bin
export JAVA_HOME=/home/Mcwang/soft/jdk.soft
export JRE_HOME=$JAVA_HOME/jre
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$PATH:JAVA_HOME/bin:JRE_HOME/bin
export是使它生效
输入java -version查看安装的jdk版本;
也可以直接输入java 或javac ,出现一长串文件说明配置没错。
3.hadoop搭建
关闭防火墙和SElinux:
1..查看防火墙的状态:
chkconfig iptables --list
chkconfig ip6tables --list
2. 关闭防火墙(临时)
chkconfig iptables stop
chkconfig ip6tables stop
3.永久关闭
chkconfig iptables off
chkconfig ip6tables off
4.vi /etc/sysconfig/selinux
SELINUX=disabled
如何使普通用户拥有sudo权限,博客在此:https://blog.csdn.net/xiaozelulu/article/details/80343532
需要重启reboot.
ssh上传hadoop2.7.3的压缩包
解压:
tar -zxvf hadoop2.7.3.tar.gz
重命名:为hadoop下创建文件夹:
mkdir dfs dfs/name dfs/data tmp
配置hadoop环境: sudo可以使普通用户获得root权限去修改配置文件
一般配置文件我们需要在root下执行,但有了sudo权限我们不用切换到root
sudo vi /etc/profile
export HADOOP_HOME=/home/Mcwang/soft/hadoop.soft
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
export HADOOP_HOME=/home/Mcwang/soft/hadoop.soft
export HADOOP_INSTALL=$HADOOP_HOME
export HADOOP_MAPRED_HOME=$HADOOP_HOME
export HADOOP_COMMON_HOME=$HADOOP_HOME
export HADOOP_HDFS_HOME=$HADOOP_HOME
export YARN_HOME=$HADOOP_HOME
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/sbin:$HADOOP_HOME/bin
配置环境之后,需要:source /etc/profile, 目的是使它生效
修改/home/hadoop/soft/hadoop/etc/hadoop下的7个文件:
1)sudo vi hadoop-env.sh
# The java implementation to use.
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/home/Mcwang/soft/hadoop.soft
2) suod vi core-site.xml
</configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/home/Mcwang/soft/Mcwang/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
master是你的主机名,value:是你tmp的路径
3) sudo vi hdfs-site-xml
<!-- Put site-specific property overrides in this file. -->
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/Mcwang/soft/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/Mcwang/soft/hadoop/dfs/data</value>
</property>
</configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/home/Mcwang/soft/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/home/Mcwang/soft/hadoop/dfs/data</value>
</property>
</configuration>
*master主机名,还有name和data的路径
4) sudo vi yarn-site.xml
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
**master主机名
5)先将mapred-site.xml.template复制到mapred-site.xml
cp mapred-site.xml.template mapred-site.xml
sudo vi mapred-site.xml
<!-- Put site-specific property overrides in this file. -->
<configuration>
<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>
<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>
**master(2)个主机名
6) sudo vi slaves
添加两个主机名:(每个机器上都写对应的另两个主机名)
slave1
slave2
7) sudo vi yarn-env.sh
添加JAVA_HOME
export JAVA_HOME=/home/Mcwang/soft/hadoop.soft
注意:
jdk的安装和hadoop的安装,以及它们俩的环境变量在三台主机都得配置,但是唯独修改的第六个文件
里面主机名不同,里面是写除本身以外的两个主机名。
将master主机上的/home/Mcwnag/soft/文件夹通过超级命令复制到slave1和slave2主机上,(scp -r ...)
只需要将soft文件夹中的软连接删除,重新创建软连接:
rm -rf jdk.soft hadoop.soft 删除软连接
ln -s jdk jdk.soft 创建jdk软连接
ln -s hadoop hadoop.soft 创建hadoop软连接
这样三台主机上的hadoop(hdfs)命令可以运行,但是hadoop搭建并未perfect
还有一些配置需要在另外两个机器上:
①vi /etc/profile :jdk和hadoop的环境配置;source /etc/profile
②vi /etc/hosts :ip hostname形式写入三台机器上,主要是想要主机名代替IP;
SSH免密登录(三台主机):
1. master 想登陆locahost:
在master主机上运行命令:
ssh-keygen -t rsa
在home/Mcwang下生成新文件夹.ssh(公钥id_rsa.pub、私钥id_rsa和known_hosts文件)
将公钥复制成新文件:authorized_keys
cp id_rsa.pub authorized_keys
修改authorized_keys权限为600,.ssh权限为700
sudo chmod 600 authorized_keys
sudo chmod 700 .ssh
此时ssh登录localhost,可以免密登录
2.如果master想免密登录slave1,
需要在slave1中/home/Mcwang下创建文件夹.ssh,并修改权限700
mkdir .ssh
sudo chmod 700
将authorized_keys通过超级命令复制到slave1主机中
scp authorized_keys Mcwang@192.168.29.133:/home/hadoop/.ssh
3.master 免密登录slave2:
需要在slave2中/home/hadoop下创建文件夹.ssh,并修改权限700
mkdir .ssh
sudo chmod 700 /home/Mcwang/.ssh
将authorized_keys通过超级命令复制到slave2主机中
scp authorized_keys Mcwang@192.168.201.134:/home/Mcwang/.ssh
此时master主机可以通过ssh免密登录slave1和slave2主机
4注意:想要三台机器互相录免密登录:
master:
ssh-keygen -t rsa //生成自己的私钥和公钥,/home/Mcwang就会自动生成.ssh文件
chmod 700 .ssh //.ssh权限700
cp id_rsa.pub authorized_keys //master已经有了自己的公钥
chmod 600 authorized_keys
scp authorized_keys Mcwang@192.168.29.137:/home/Mcwang/.ssh/authorized //将公钥复制到slave1中
slave1:生成自己的公钥
ssh-keygen -t rsa //生成自己的私钥和公钥,/home/Mcwang就会自动生成.ssh文件
chmod 700 .ssh //.ssh权限700
cat id_rsa.pub authorized_keys //slave1公钥追加到authorized_keys (2)
chmod 600 authorized_keys
scp authorized_keys Mcwang@192.168.29.138:/home/Mcwang/.ssh/authorized //将2个公钥复制到slave2中
slave2:
mkdir .ssh
chmod 700 .ssh
ssh-keygen -t rsa //生成自己的公钥和私钥
cat id_rsa.pub authorized_keys //此时已有三个公钥,
scp authorized_keys Mcwang@192.168.29.136:/home/Mcwang/.ssh/authorized //将三个公钥复制到master中
scp authorized_keys Mcwang@192.168.29.137:/home/Mcwang/.ssh/authorized //将三个公钥复制到slave1中
注意:在一机器上是不能追加文件到另外的机器上的。
此时可实现三台主机互相免密登录
如何修改主机hostname
1、临时修改:hostname new hostname
2、永久修改:
sudo vi /etc/hostname
添加主机名(例如在master主机下):master(其他两个主机也需要添加主机名)
HOSTNAME=master
重启虚拟机以上配置会生效
启动Hadoop
在master主机上将节点文件系统格式化(只需要格式化一次,一次以上会出现问题:需要把创建的dfs,
dfs/name,dfs/data,tmp这四个文件删掉就好,再重新创建,然后该虚拟机又可以继续用。
格式化命令:hdfs namenode -format
在/home/hadoop/soft/hadoop/sbin下有start-all.sh 和 stop-all.sh,
是开启服务和关闭服务
在命令行执行:./start-all.sh 开启服务
在命令行执行:jps 查看服务
在master主机上会开启以下四项服务:
1 NameNode
2 SecondaryNameNode
3 ResourceManager
4 Jps
在slave1和slave2主机上会开启以下三项服务:
1 DataNode
2 Jps
3 NodeManager
如果要在Windows下的浏览器上访问hadoop,需要进行以下更改:
修改文件:C:/Windows/System32/drivers/etc/hosts
在文件中添加键值对:和vi /etc/hosts一样
192.168.201.133 slave1
192.168.201.134 slave2
192.138.201.135 master
在浏览器上访问:http://master:50070 可进入hadood的页面
master:8088