一、准备工作
若有hadoop-2.x.y.tar.gz.mds 这个文件建议也可下载,因为该文件包含了检验值可用于检查hadoop-2.x.y.tar.gz 的完整性,否则若文件发生了损坏或下载不完整,Hadoop 将无法正常运行。想验证文件完整性,可在自行百度搜索,
PS:如果浏览器下载过慢,可复制下载链接到迅雷打开下载。
二、开始搭建虚拟机
前面准备工作完成后即可开始搭建虚拟机,进行hadoop集群操作。
下面为三台虚拟机的hostname和IP地址
hostname | Ip地址 |
---|---|
Master | 192.168.100.13 |
Slave1 | 192.168.100.14 |
Slave2 | 192.168.100.15 |
以Ubuntu 64 为主机,命名为Master,克隆两台机器作为slaves节点
点击Ubuntu主机右键->管理->克隆->选择要安装的位置,然后静静的等待克隆完成
网络配置
1.VMware 网络配置(使虚拟机上的各个节点能够互联,用同一个网段)
开始菜单->运行->services.msc或从控制面板中找到“服务”一项打开如下图所示,找到以vmware开头的服务,确保都启用
打开控制面板->系统和安全->网络和 Internet->网络和共享中心->更改适配器设置,启用VMnet8,再查看属性,双击Intter协议版本4看IP地址与子网掩码是否配好,若没则进行相应配置。(注意IP地址与子网掩码是于上面虚拟机配置相对应的)
2.Ubuntu网络配置
如果节点的系统是在虚拟机中直接复制的,要确保各个节点的 Mac 地址不同
Linux 中查看节点 IP 地址的命令为 ifconfig
sudo vim /etc/hostname //修改各个节点的主机名
sudo vim /etc/hosts //修改自己所用节点的IP映射
例如本项目中使用三个节点的名称与对应的 IP 关系如下:
192.168.100.13 Master
192.168.100.14 Slave1
192.168.100.15 Slave2
在 /etc/hosts 中将该映射关系填写上去即可,如下图所示(一般该文件中只有一个 127.0.0.1,其对应名为 localhost,如果有多余的应删除,特别是不能有 “127.0.0.1 Master” 这样的记录):
修改完成后需要reboot
重启一下,重启后在终端中才会看到机器名的变化
以上在所有节点上都需要完成网络配置
配置好后需要在各个节点上执行如下命令,测试是否相互 ping 得通,如果 ping 不通,后面就无法顺利配置成功
ping Master
ping Slave1
ping Slave2
配置ssh免密码登录(在Master、 Slave1、Slave2 节点依次配一遍)
cd .ssh/
ssh-keygen -t rsa //配置公钥,一直按回车即可
将公匙传输到Master、 Slave1、Slave2 节点上(传输过程中可能需要输入yes和对应的密码)
ssh-copy-id Master
ssh-copy-id Slave1
ssh-copy-id Slave2
检验免密码是否配置成功 (成功后是不用输密码即可登录,同时执行 exit
即可返回到原来的终端)
ssh Master
ssh Slave1
ssh Slave2
cd .ssh/
cat id_rsa.pub //查看自身公钥
cat authorized_keys /查看公钥文件
安装java环境
1配置本地源
sudo apt-get update //更新apt
2.安装jdk
在Master上
sudo apt-get install openjdk-8-jdk openjdk-8-source
配置环境变量
vim ~/.bashrc // 添加如下几行内容:
export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64
export CLASSPATH=${JAVA_HOME}/lib/dt.jar:${JRE_HOME}/lib/tools.jar
export PATH=${PATH}:${JAVA_HOME}/bin
3.验证
java -version //查看java 版本信息
which java //查看java的目录位置
(Slave1、Slave2的jdk安装配置同上)
Hadoop的安装
在Master上
hadoop若是下载在windows上则用sudo rz -be
进行上传
sudo tar -zxf hadoop-2.7.7tar.gz -C /usr/local # 解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.7.7/ ./hadoop # 将文件夹名改为hadoop
sudo chown -R hadoop ./hadoop # 修改文件权限
配置PATH变量
vim ~/.bashrc
#在下面添加
export PATH=$PATH:/usr/local/hadoop/bin:/usr/local/hadoop/sbin
source ~/.bashrc
#使配置生效
hadoop version
#进行验证
配置集群/分布式环境
集群/分布式模式需要修改 /usr/local/hadoop/etc/hadoop 中的以下几个配置文件hadoop-env.sh、 mapred-env.sh、slaves、core-site.xml、hdfs-site.xml、mapred-site.xml、yarn-site.xml 。
在Master上
vim hadoop-env.sh
#进入修改一下JAVA_HOME的安装目录
vim mapred-env.sh
#同样进入修改一下JAVA_HOME的安装目录
sudo vi slaves
#配置slaves
修改
localhost—>Slave1 Slave2
#Slave1 Slave2为你要集群的机器
sudo vi core-site.xml
#添加以下内容
fs.defaultFS</name>
hdfs://Master:9000</value>
</property>
hadoop.tmp.dir</name>
file:/usr/local/hadoop/tmp</value>
Abase for other temporary directories.</description>
</property>
</configuration>
sudo vi hdfs-site.xml
#添加以下内容,其中dfs.replication 一般设为 3
dfs.namenode.secondary.http-address</name>
Master:50090</value>
</property>
dfs.replication</name>
3</value>
</property>
dfs.namenode.name.dir</name>
file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
dfs.datanode.data.dir</name>
file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
cp mapred-site.xml.template mapred-site.xml
#复制一份 mapred-site.xml
sudo vi mapred-site.xm
l#添加以下内容:
mapreduce.framework.name</name>
yarn</value>
</property>
mapreduce.jobhistory.address</name>
Master:10020</value>
</property>
mapreduce.jobhistory.webapp.address</name>
Master:19888</value>
</property>
</configuration>
sudo vi yarn-site.xml
#添加以下内容:
yarn.resourcemanager.hostname</name>
Master</value>
</property>
yarn.nodemanager.aux-services</name>
mapreduce_shuffle</value>
</property>
</configuration>
配置好后,将 Master 上的 /usr/local/Hadoop 文件夹复制到各个节点上。因为之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。在 Master 节点上执行:
cd /usr/local
sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件
sudo rm -r ./hadoop/logs/* # 删除日志文件
tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制
cd ~
scp ./hadoop.master.tar.gz Slave1:/home/hadoop
scp ./hadoop.master.tar.gz Slave2:/home/hadoop
在 Slave1 、2节点上执行:
sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在)
sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
sudo chown -R hadoop /usr/local/hadoop
同样,如果还有其他 Slave 节点,也要执行将 hadoop.master.tar.gz 传输到 Slave 节点、在 Slave 节点解压文件的操作。
首次启动需要先在 Master 节点执行 NameNode 的格式化:
hdfs namenode -format # 首次运行需要执行初始化,之后不需要
#成功的话,会看到 “successfully formatted” 和 “Exitting with status 0” 的提示,若为 “Exitting with status 1” 则是出错
启动 hadoop 了,启动需要在 Master 节点上进行:
start-dfs.sh
start-yarn.sh
mr-jobhistory-daemon.sh start historyserver
通过命令 jps
可以查看各个节点所启动的进程。正确的话,在 Master 节点上可以看到 NameNode、ResourceManager、SecondrryNameNode、JobHistoryServer 进程,如下图所示:
在 Slave1、2 节点可以看到 DataNode 和 NodeManager 进程,如下图所示:
关闭集群,关闭也是在 Master 节点上进行:
stop-yarn.sh
stop-dfs.sh
mr-jobhistory-daemon.sh stop historyserver
伪分布式、分布式配置切换时的注意事项 :
1.从分布式切换到伪分布式时,不要忘记修改 slaves 配置文件;
2.在两者之间切换时,若遇到无法正常启动的情况,可以删除所涉及节点的临时文件夹,这样虽然之前的数据会被删掉,但能保证集群正确启动。所以如果集群以前能启动,但后来启动不了,特别是 DataNode 无法启动,不妨试着删除所有节点(包括 Slave 节点)上的 /usr/local/hadoop/tmp文件夹,再重新执行一次 hdfs namenode -format,再次启动试试。
对于Hadoop的认识及单机/伪分布式配置可以参考此处
在CentOS下搭建Hadoop集群可以参考此处
搭建Hadoop时Slave节点没出现DateNode进程的可以参考此处