一、安装操作系统并配置IP
- 在VMware虚拟机中安装三台Centos7,分别作为Master,Slave1,Slave2,并配置root用户。
- 配置三台机器的静态IP地址,本次示例IP分别为:
Master: 192.168.157.128 Slave1: 192.168.157.129 Slave2: 192.168.157.130 (关于设置静态ip连不上网的问题,https://blog.csdn.net/tearofthemyth/article/details/112800999 Mac VMware Fusion CentOS7配置静态IP) - 修改主机名及配置hosts文件(三台机器)
hostnamectl set-hostname master hostnamectl set-hostname slave1 hostnamectl set-hostname slave2 vi /etc/hosts 192.168.157.128 master master.root 192.168.157.129 slave1 slave1.root 192.168.157.130 slave2 slave2.root
二、关闭防火墙(三台机器)
systemctl stop firewalld #关闭防火墙 systemctl status firewalld #查看防火墙状态
三、配置时间同步
- 首先配置好Master时区,在Master上输入命令tzselect,选择时区,依次按提示输入5,9,1,1
- yum install –y ntp #三台机器上安装ntp
- vi /etc/ntp.conf #Master上修改配置文件
server 127.127.1.0 fudge 127.127.1.0 stratum 10 - /bin/systemctl restart ntpd.service #Master上重启ntp服务
- ntpdate master #在Slave1、Slave2上输入命令
四、配置SSH免密
- 在Master上执行以下操作:
cd ~ ssh-keygen -t dsa -P ‘’ -f ~/.ssh/id_dsa cd .ssh/ cat id_dsa.pub >> authorized_keys # ssh master #ssh内环 exit #登出 ssh master #再次登陆ssh exit - 在Slave1、Slave2上分别执行以下操作:
scp master:~/.ssh/id_dsa.pub ./master_dsa.pub cat master_dsa.pub >> authorized_keys - 在Master上执行以下操作来验证免密登录:
ssh slave1 exit ssh slave2 exit
五、安装JDK
- 首先,在三台机器上创建java工作目录
mkdir -p /usr/java #创建java工作目录(三台机器) - 在三台机器上配置jdk
以下操作仅在master上进行: tar -zxvf /home/lan/jdk-8u171-linux-x64.tar.gz -C /usr/java #解压安装包 cd /usr/java cd jdk1.8.0.171/ pwd vi /etc/profile #修改环境变量配置文件profile 在 export PATH USER LOGNAME MAIL HOSTNAME HISTSIZE HISTCONTROL 下面添加: /usr/java/jdk1.8.0_281 #java export JAVA_HOME=/usr/java/jdk1.8.0_171 export CLASSPATH=$ JAVA_HOME/lib/ export PATH=$ PATH:$JAVA_HOME/bin export PATH JAVA_HOME CLASSPATH 完成后wq,退出保存,之后再执行: scp -r /etc/profile slave1:/etc/ #分发环境变量至Slave1、Slave2 scp -r /etc/profile slave2:/etc/ (这里分发环境变量就是为了给slave1和slave2 都配置jdk,但是要记住一定要给slave1和slave2也下载jdk,而不仅仅是给它们分发环境变量。否则slave1、slave2中的jdk配置无效,下面的zookeeper也会出错。) - source /etc/profile #使环境变量生效(三台机器)
- java -version #查看java版本号
这里出现的java版本号有可能是虚拟机自带的jdk,需要修改成我们自己下载的jdk。 https://blog.csdn.net/dlc_996/article/details/104414585 
六、Zookeeper安装
- 首先,在三台机器上创建zookeeper工作目录
mkdir -p /usr/zookeeper #创建zookeeper工作目录(三台机器) - 以下操作仅在Master上操作
1)tar -zxvf /home/lan/zookeeper-3.4.10.tar.gz -C /usr/zookeeper #解压 2)cd /usr/zookeeper/zookeeper-3.4.10/conf/ scp zoo_sample.cfg zoo.cfg #拷贝zoo_sample.cfg并命名为zoo.cfg 3)接下来修改zoo.cft文件(画下划线的为需要修改或增加的): #The number of milliseconds of each tick tickTime=2000 #The number of ticks that the initial #synchronization phase can take initLimit=10 #The number of ticks that can pass between #sending a request and getting an acknowledgement syncLimit=5 #the directory where the snapshot is stored. #do not use /tmp for storage, /tmp here is just #example sakes. dataDir=/usr/zookeeper/zookeeper-3.4.10/zkdata #the port at which the clients will connect clientPort=2181 #the maximum number of client connections. #increase this if you need to handle more clients #maxClientCnxns=60 # #Be sure to read the maintenance section of the #administrator guide before turning on autopurge. # #http://zookeeper.apache.org/doc/current/zookeeperAdmin.html #sc_maintenance # #The number of snapshots to retain in dataDir #autopurge.snapRetainCount=3 #Purge task interval in hours #Set to “0” to disable auto purge feature #autopurge.purgeInterval=1 dataLogDir=/usr/zookeeper/zookeeper-3.4.10/zkdatalog server.1=master:2888:3888 server.2=slave1:2888:3888 server.3=slave2:2888:3888 4)之后返回zookeeper-3.4.10文件夹,创建zkdata和zkdatalog两个文件夹。 cd … mkdir zkdata mkdir zkdatalog 5)进入zkdata文件夹,创建文件myid,用于表示是几号服务器。master主机中,设置服务器id为1: vi myid 1 6)接下来修改环境变量文件,在java增加的下边添加: #zookeeper export ZOOKEEPER_HOME=/usr/zookeeper/zookeeper-3.4.10 export PATH=$ PATH:$ZOOKEEPER_HOME/bin 7)修改后,分发到Slave1和Slave2上: scp -r /etc/profile slave1:/etc/ scp -r /etc/profile slave2:/etc/ scp -r /usr/zookeeper slave1:/usr/zookeeper scp -r /usr/zookeeper slave2:/usr/zookeeper - 使三台机器的环境变量生效
source /etc/profile #在三台机器上输入命令,使环境变量生效。 - 之后需要修改Slave1和Slave2的myid文件
cd /usr/zookeeper/zookeeper-3.4.10/zkdata #在Slave1上操作 vi myid 2 cd /usr/zookeeper/zookeeper-3.4.10/zkdata #在Slave2上操作 vi myid 3 - 启动zookeeper集群(三台机器)
cd /usr/zookeeper/zookeeper-3.4.10/ bin/zkServer.sh start bin/zkServer.sh status
七、Hadoop安装
1.为Master创建工作目录,并解压 mkdir -p /usr/hadoop tar -zxvf /home/lan/hadoop-2.7.3.tar.gz -C /usr/hadoop
2.修改环境变量文件: vi /etc/profile 在zookeeper下增加以下内容: #hadoop export HADOOP_HOME=/usr/hadoop/hadoop-2.7.3 export CLASSPATH=$ CLASSPATH:$ HADOOP_HOME/lib export PATH=$ PATH:$HADOOP_HOME/bin
3.配置hadoop组件 1)cd /usr/hadoop/hadoop-2.7.3/etc/hadoop 2)vi hadoop-env.sh #编辑hadoop-env.sh文件 #The jsvc implementation to use. Jsvc is required to run secure datanodes export JAVA_HOME=/usr/java/jdk1.8.0_171 #that bind to privileged ports to provide authentication of data transfer #protocol. Jsvc is not required if SASL is configured for authentication of #data transfer protocol using non-privileged ports. #export JSVC_HOME=${JSVC_HOME} 3)vi core-site.xml #编辑core-site.xml文件
```
<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/hadoop/hadoop-2.7.3/hdfs/tmp</value>
<description>A base for orher temporary directories</description>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>fs.checkpoint.perio</name>
<value>60</value>
</property>
<property>
<name>fs.checkpoint.size</name>
<value>67108864</value>
</property>
</configuration>
```
4)vim yarn-site.xml #编辑yarn-site.xml文件
```
<configuration>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:18040</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:18030</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:18088</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:18025</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:18141</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.auxservices.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<!-- Site specific YARN configuration properties -->
</configuration>
```
5)vi hdfs-site.xml #编辑hdfs-site.xml文件
```
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/hadoop/hadoop-2.7.3/hdfs/name</value>
<final>ture</final>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/hadoop/hadoop-2.7.3/hdfs/data</value>
<final>ture</final>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>ture</value>
</property>
<property>
<name>dfs.permissions</name>
<value>flase</value>
</property>
</configuration>
```
6)由于Hadoop没有mapred-site.xml文件,需要拷贝mapred-site.xml.template后再修改mapred-site.xml文件内容。 cp mapred-site.xml.template mapred-site.xml #拷贝mapred-site.xml文件 vim mapred-site.xml #编辑mapred-site.xml文件
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
7)vim slaves #编辑slaves文件 master slave1 slave2 8)vi master #创建并编辑master文件 master
4.以上在Master上已经搭建好hadoop,接下来分发到Slave1和Slave2上: scp -r /etc/profile slave1:/etc/ #分发环境变量文件 scp -r /etc/profile slave2:/etc/ scp -r /usr/hadoop slave1:/usr/ #分发hadoop目录 scp -r /usr/hadoop slave2:/usr/ 5.使环境变量生效 三台机器分别source /etc/profile 至此,三台机器hadoop已安装完毕。 6.在Master上格式化Namenode cd /usr/hadoop/hadoop-2.7.3/etc/hadoop hadoop namenode –format 当出现“Exiting with status 0”的时候,表明格式化成功。之后需要开启集群: cd /usr/hadoop/hadoop-2.7.3/ sbin/start-all.sh master启动情况: slave1、2启动情况: 
这里我遇到的错误:
错误1:slave1、2节点没有nodemanager
- 可能是因为yarn-site.xml文件中配置错误(之前我把mapreduce打成了mapseduce)
- 也有可能是因为:

错误2:访问50070界面的DataNode information没有从节点
是因为NameNode的9000端口没有打开。使用: firewall-cmd --zone=public --add-port=9000/tcp --permanent打开9000端口。 9000端口已开放:  参考知识1:  参考知识2:  访问50070界面,配置成功: 
错误3:无法访问8080界面
配置文件不同,访问的端口也不同,端口地址可以如下查看,我应该是访问8088端口。 
|