1. 安装最小化的系统,也就是什么多余的组件都没有,全部需要手动DIY,这样可以最大化保证系统的安全性,CentOS7中早就废弃了ifconfig这一命令来查询网络地址状态,我们可以通过ip addr命令来查询。
2. ip addr查询网络地址状态后发现有两个值,第一个明显是本机服务的inet,第二个并没有inet这个属性值。下一步就是配置网卡,我的为ens33
3. 将onboot的no值改为yes。J向下移动,L向右移动,A进入插入模式,ESC退出模式,然后输入命令“:wq”回车写入并退出当前文件回到命令行。
4. 重启服务并重新查看IP地址,发现有IP了。
5. 分别在剩余的两台CentOS7服务器上执行同样的操作,并更改主机名,命令“vi /etc/hostname”,主机名分别修改为master、slave1、slave2.
6. 在三个节点上分别创建Hadoop平台的管理员用户“hadoop”
创建管理员:adduser hadoop
设置密码:passwd hadoop
查看系统中存在的用户:cat /etc/passwd
设置新用户权限,让新用户能够使用“sudo”命令,sudo默认只允许执行。
更改root用户对sudoers文件的操作权限:chmod -v u+w /etc/sudoers
添加hadoop ALL=(ALL) ALL,如果最后一个ALL更改为NOPASSWD:ALL,即在使用sudo命令的时候不用输入密码,这样极为不安全。
撤回对sudoers的权限:chmod -v u-w /etc/sudoers
7. 同时安装Java环境和Hadoop环境
解压:tar -zxvf jdk-8u191-linux-x64.tar.gz -C /usr/java
解压:tar -zxvf hadoop-2.8.5.tar.gz -C /hadoopeco
配置环境变量:root下:/etc/profile,user级:~/.bashrc,两个环境变量都配置一下,配置完记得source一下文件,如下:
export JAVA_HOME=/usr/java/jdk1.8.0_191
export JRE_HOME=
J
A
V
A
H
O
M
E
/
j
r
e
e
x
p
o
r
t
C
L
A
S
S
P
A
T
H
=
.
:
{JAVA_HOME}/jre export CLASSPATH=.:
JAVAHOME/jreexportCLASSPATH=.:{JAVA_HOME}/lib:
J
R
E
H
O
M
E
/
l
i
b
e
x
p
o
r
t
H
A
D
O
O
P
H
O
M
E
=
/
h
a
d
o
o
p
e
c
o
/
h
a
d
o
o
p
−
2.8.5
e
x
p
o
r
t
P
A
T
H
=
{JRE_HOME}/lib export HADOOP_HOME=/hadoopeco/hadoop-2.8.5 export PATH=
JREHOME/libexportHADOOPHOME=/hadoopeco/hadoop−2.8.5exportPATH={HADOOP_HOME/bin}:
H
A
D
O
O
P
H
O
M
E
/
s
b
i
n
:
{HADOOP_HOME}/sbin:
HADOOPHOME/sbin:{JAVA_HOME}/bin:$PATH
验证Java环境和Hadoop环境,hadoop需要依赖Java环境,务必先验证Java环境:
java -version、javac -version、hadoop version,hadoop的版本查看命令没有“-”。
8. 在master节点中的/etc/hosts文件中配置映射,根据每台服务器的IP添加如下:
172.16.137.123 master
172.16.137.126 slave1
172.16.137.127 slave2
9. 配置master节点与slave节点之间无密通讯,不用配置slave之间的无密通讯(以下全部在管理员用户hadoop和root用户下各自操作一遍,保证两个用户都能对slave节点进行无密通讯)。
在三台节点中生成RSA密钥和公钥:ssh-keygen -t rsa
在master节点上进行汇总(务必手敲,复制过去可能会格式错误而抛出没找到相关命令的异常):
ssh master cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh master cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
ssh master cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
保护文件安全,更改文件权限,保证分发到slave中的文件不能被随意更改。
chmod 755 ~/.ssh #所有者读取和写入
chmod 600 ~/.ssh/authorized_keys #所有者完全权限,其它读取和执行
将包含了所有互信机器认证key的认证文件分发到每台slave中:
scp -r ~/.ssh/authorized_keys slave1:~/.ssh/
scp -r ~/.ssh/authorized_keys slave2:~/.ssh/
Root用户下时:
scp -r ~/.ssh/authorized_keys root@slave1:~/.ssh/
scp -r ~/.ssh/authorized_keys root@slave2:~/.ssh/
节点无密互通验证:
10. 复制重复的文件到slave节点中
在root用户中操作:
复制hosts文件:
复制root下的/etc/profile和hadoop用户下的~/.bashrc
11. Master的Java-1.8安装包和hadoop-2.8安装包copy到slave节点并解压
scp -r /hadoopeco/jdk-8u191-linux-x64.tar.gz root@slave1:/hadoopeco
scp -r /hadoopeco/jdk-8u191-linux-x64.tar.gz root@slave2:/hadoopeco
scp -r hadoop-2.8.5.tar.gz root@slave1:/hadoopeco
scp -r hadoop-2.8.5.tar.gz root@slave2:/hadoopeco
ssh slave1 tar -zxvf /hadoopeco/jdk-8u191-linux-x64.tar.gz -C /usr/java
ssh slave2 tar -zxvf /hadoopeco/jdk-8u191-linux-x64.tar.gz -C /usr/java
ssh slave1 tar -zxvf /hadoopeco/hadoop-2.8.5.tar.gz -C /hadoopeco
ssh slave2 tar -zxvf /hadoopeco/hadoop-2.8.5.tar.gz -C /hadoopeco
验证:
ssh slave1 java -version
ssh slave2 java -version
ssh slave1 hadoop version
ssh slave2 hadoop version
12. 修改hadoopeco的所属和创建一个资源文件保存hadoop的数据
ssh master chown -vR hadoop /hadoopeco
ssh slave1 chown -vR hadoop /hadoopeco
ssh slave2 chown -vR hadoop /hadoopeco
ssh master mkdir /hadoopeco/hresource
ssh slave1 mkdir /hadoopeco/hresource
ssh slave2 mkdir /hadoopeco/hresource
13. 配置核心配置
core-site.xml:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:///hadoopeco/hresource/tmp</value>
<description>其他临时目录的基础文件</description>
</property>
</configuration>
export JAVA_HOME=/usr/java/jdk1.8.0_191 #配置Java路径
export HADOOP_LOG_DIR=/hadoopeco/hresource/logs #配置日志路径
#开启并行GC
export HADOOP_NAMENODE_OPTS="-XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}"
hdfs-site.xml:
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:///hadoopeco/hresource/dfs/name</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>268435456</value>
<description>用于大型文件系统的HDFS块大小默认为256MB</description>
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>100</value>
<description>更多的NameNode服务器线程处理大量来自DataNode的RPC</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///hadoopeco/hresource/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
<!--
#NameNode配置
<property>
<name>dfs.hosts</name>
<value>/hadoopeco/hadoop-2.8.5/etc/hadoop/datanode-allow-list</value>
<description>允许加入NameNode的datanode列表,默认为空全部都加入</description>
</property>
<property>
<name>dfs.hosts.exclude</name>
<value>/hadoopeco/hadoop-2.8.5/etc/hadoop/datanode-deny-list</value>
<description>不允许加入NameNode的dataNode列表</description>
</property>
-->
yarn-site.xml
<configuration>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
<description>默认false,进行日志聚合,集中化处理</description>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>2592000</value>
<description>收集的日志的保留时间,以秒为单位,到时后被删除,保留30天后删除</description>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs</value>
<description>log server的地址</description>
</property>
<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.local-dirs</name>
<value>/hadoopeco/hresource/yarn/local</value>
<description>存放application执行本地文件的根目录,执行完毕后删除,按用户名存储</description>
</property>
<property>
<name>yarn.nodemanager.log-dirs</name>
<value>/hadoopeco/hresource/yarn/log</value>
<description>存放application本地执行日志的根目录,执行完毕后删除,按用户名存储</description>
</property>
<property>
<name>yarn.nodemanager.log.retain-second</name>
<value>604800</value>
<description>日志的保留时间,log aggregation没有enable时,有效</description>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir</name>
<value>/tmp/logs</value>
<description>聚合日志后在hdfs的存放地址</description>
</property>
<property>
<name>yarn.nodemanager.remote-app-log-dir-suffix</name>
<value>logs</value>
<description>集合日志后的存放地址由 ${remote-app-log-dir}/${user}/{thisParam}构成</description>
</property>
<property>
<name>yarn.nodemanager.delete.debug-delay-sec</name>
<value>0</value>
<description>application执行结束后立即删除本地文件及日志</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
mapred-site.xml:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>hdfs://master:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
</property>
</configuration>
Slaves文件:
slave1
slave2
14. 将核心配置全部复制到slave节点中
scp -r $HADOOP_HOME/etc/hadoop root@slave1:$HADOOP_HOME/etc/
scp -r $HADOOP_HOME/etc/hadoop root@slave2:$HADOOP_HOME/etc/