Centos7上搭建hadoop2.7分布式集群环境实验记录
1.准备三台虚拟机。
2.修改三台虚拟机的主机名分别为master,slave01,slave02,然后修改每台机器的/etc/hosts
文件,清空原来的内容,添加如下内容:
172.16.136.227 master
172.16.136.229 slave01
172.16.136.228 slave02
3.配置ssh免密登陆和访问集群机器
(1)所有机器上安装ssh服务器
yum -y install openssh-server
(2)生成公钥
ssh-keygen -t rsa -P ""
cat $HOME/.ssh/id_rsa.pub >>$HOME/.ssh/authorized_keys
(3)发送公钥
scp ~/.ssh/id_rsa.pub root@slave01:/home/
scp ~/.ssh/id_rsa.pub root@slave02:/home/
(4)在slave01和slave02上执行如下命令。
cat /home/id_rsa.pub >>~/.ssh/authorized_keys
(注,若在这一步时提示不存在.ssh目录,就自己在根目录下创建一个.ssh目录:mkdir .ssh)
(5)测试
ssh slave01
4.安装jdk(所有机器都要装,本实验装的是1.7,如果接下来你还要装spark的话,请装jdk1.8,不然可能会出现兼容性的问题)
(1)在/usr/目录下创建java目录
mkdir /usr/java
cd /usr/java
(2)把下载好的安装目录上传到这个目录下,然后安装,
tar -zxvf jdk-7u79-linux-x64.tar.gz
(3)设置环境变量
vim ~/.bashrc
export JAVA_HOME=/usr/java/jdk1.7.0_79
vim /etc/profile
在profile中添加如下内容:
#set java environment
JAVA_HOME=/usr/java/jdk1.7.0_79
JRE_HOME=/usr/java/jdk1.7.0_79/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
(4) 让配置生效
source /etc/profile
source ~/.bashrc
(5)验证
java -version
5.安装hadoop,先在master主机上做安装Hadoop,暂时不需要在slave01,slave02主机上安装Hadoop.稍后会把master配置好的Hadoop发送给slave01,slave02.在master主机执行下列操作:
(1)把下载好的安装包hadoop-2.7.3.tar.gz上传到/usr/local目录,然后解压安装
tar-zxvf hadoop-2.7.3.tar.gz
(2) 将文件夹名改为hadoop
mv ./hadoop-2.7.3/ ./hadoop
(3)编辑~/.bashrc文件
vi ~/.bashrc
添加如下内容:
export HADOOP_HOME=/usr/local/hadoop
exportPATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
更新
source ~/.bashrc
6.hadoop集群配置
在master主机下执行
cd /usr/local/hadoop/etc/hadoop/
(1)修改slaves:
这里把DataNode的主机名写入该文件,每行一个。这里让master节点主机仅作为NameNode使用。
slave01
slave02
(2) 修改core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporarydirectories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
</configuration>
(3) 修改hdfs-site.xml:
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>:
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/dfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
(4) 修改mapred-site.xml(复制mapred-site.xml.template,再修改文件名)
直接执行如下命令即可完成复制
cp mapred-site.xml.templatemapred-site.xml
在修改mapred-site.xml文件:vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
(5) 修改yarn-site.xml
<configuration>
<!-- Site specific YARNconfiguration properties -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
</configuration>
(6)配置好后,将 master 上的/usr/local/hadoop 文件夹复制到各个节点上。之前有跑过伪分布式模式,建议在切换到集群模式前先删除之前的临时文件。在 master 节点主机上执行:
cd /usr/local/
$rm -rf ./hadoop/tmp # 删除临时文件
$rm -rf ./hadoop/logs/* # 删除日志文件(这两步删除操作在本实验中不需要)
$tar -zcf ~/hadoop.master.tar.gz ./hadoop(把hadoop目录压缩到hadoop.master.tar.gz文件中)
$cd ~
$scp ./hadoop.master.tar.gz slave01:/home(通过scp命令把刚刚压缩的文件发过去)
$scp ./hadoop.master.tar.gz slave02:/home
(7) 在slave01,slave02节点上执行:
$sudo rm -rf /usr/local/hadoop/(若已经有hadoop目录的话,就把它删除)
$sudo tar -zxf /home/hadoop.master.tar.gz -C /usr/local
$sudo chown -R hadoop /usr/local/hadoop(这一步是在用hadoop时用来获取权限的,本实验用的是root用户,不需要)
7.启动集群
格式化主节点:hdfs namenode -format
启动:start-all.sh
查看节点:jps
错误记录1:查看的时候遇到了一个错误,datanode,启动不了,弄了好久,最后发现是hdfs-site.xml有一个单词少了一个字母,当时在master节点改过来了,却忘记在slave01和slave02改过来,我觉得这是跟我当时做这个的时候心情烦躁,所以注意力不集中的导致的。最后是第二天早上过来查看slave01和slave02的日志才发现的。这就告诉我们做实验的时候,注意力一定要集中,还有出了错误一定要首先去看日志找错误原因。
错误记录2:错误一解决了之后,又出现了一个错误,slave01节点的datanode无法启动,原因是格式化太多次,id不同步导致的,删除dfs下data的所有文件然后重新格式化和启动集群即可。