NameNode
DataNode

NodeManager
ResourceManager
SecondaryNameNode
DataNode

NodeManager


DataNode

NodeManager
hadoop1 hadoop2 hadoop3

基础准备

  1. ping www.baidu.com
  2. yum install -y epel-release
  3. yum install -y net-tools
  4. yum install -y vim

所有机器修改hostname和ip

hostname hadoop1 #临时修改hostname

vi /etc/sysconfig/network #修改配置文件后,即使重启hostname也不会变

vi /etc/sysconfig/network-scripts/ifcfg-eth0 #所有机器修改IP(按量计费的阿里云每次重启会变更公网IP,私网IP不会变。所以这个文件不变更也行)
DEVICE=eth0
HWADDR=00:0c:29:d2:4f:9c
TYPE=Ethernet
UUID=b3239952-b75f-425a-ad51-6214bdf84c74
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static #静态ip
IPADDR=192.168.23.2 #主要是黄色的这两行
NETMASK=255.255.255.0
IPV6INIT=no
USERCTL=no

service network restart #变更完IP后要重启网卡生效

所有机器修改hosts

vi /etc/hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
172.16.93.134 hadoop2
172.16.35.251 hadoop3
172.16.93.133 hadoop1
172.16.93.133 iZbp14q3an712bplg9gt33Z iZbp14q3an712bplg9gt33Z

倒数2、3、4行是新加的,用阿里云的服务器搭建hadoop,最后一行必须是 默认配置中的最后一行。

所有机器关闭防火墙

**CentOS 6.x
service iptables stop #临时关闭iptables
chkconfig iptables off #关闭iptables开机自启

setenforce 0零 #临时关闭selinux
vi /etc/selinux/config #里改成面的SELINUX=disabled(小写) 即使重启selinux也不会开启

**CentOS 7.x
systemctl stop firewalld.service #关闭防火墙
systemctl disable firewalld.service #关闭开机自动启动

setenforce 0零 #临时关闭selinux
vi /etc/selinux/config #里改成面的SELINUX=disabled(小写) 即使重启selinux也不会开启

所有机器配置ssh

ssh-keygen -t rsa #三个回车 生成id_rsa 和id_rsa.pub

ssh-copy-id -i root@hadoop1
ssh-copy-id -i root@hadoop2
ssh-copy-id -i root@hadoop3

三台机器对时操作

参考linux里

所有机器安装java (不建议rpm删除java,因为可能会有依赖,安装java建议安装tar包,解压就可用)

java -version

rpm -qa | grep jdk
java-1.6.0-openjdk-1.6.0.38-1.13.10.4.el6.x86_64
java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64

yum -y remove java-1.6.0-openjdk-1.6.0.38-1.13.10.4.el6.x86_64
yum -y remove java-1.7.0-openjdk-1.7.0.99-2.6.5.1.el6.x86_64

rpm -e #删除

vim /etc/profile
#java
export JAVA_HOME=/opt/egg/jdk1.8.0_191
export PATH=$PATH:$JAVA_HOME/bin

source /etc/profile

scp -r /opt/egg/jdk1.8.0_191 root@hadoop2:/opt/egg
scp -r /opt/egg/jdk1.8.0_191 root@hadoop3:/opt/egg
其他两台机器修改/etc/profile并source

安装hadoop

tar -zxvf hadoop-2.7.2.tar.gz -C /opt/egg

vim /etc/profile
##HADOOP_HOME
export HADOOP_HOME=/opt/egg/hadoop-2.7.2
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

source /etc/profile

etc/hadoop目录下
vi hadoop-env.sh
vi yarn-env.sh
vi mapred-env.sh
以上三个文件加export JAVA_HOME=/opt/egg/jdk1.8.0_191

mkdir -p /opt/egg/hadoop-2.7.2/data/tmp
三台都执行

core-site.xml

  1. <!-- 指定HDFSNameNode的地址 -->
  2. <property>
  3. <name>fs.defaultFS</name>
  4. <value>hdfs://hadoop1:9000</value>
  5. </property>
  6. <!-- 指定Hadoop运行时产生文件的存储目录 -->
  7. <property>
  8. <name>hadoop.tmp.dir</name>
  9. <value>/opt/egg/hadoop-2.7.2/data/tmp</value>
  10. </property>

hdfs-site.xml

<!-- 指定hdfs复制几份 -->
<property>
    <name>dfs.replication</name>
    <value>3</value>
</property>


<!— snn web端访问地址 -->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop2:50090</value>
</property>


<!-- 数据存放的目录 linux目录,配置hadoop.tmp.dir后 以下三者数据就存到hadoop.tmp.dir了,不再需要配置以下三者了。当然配置也行
<property>
    <name>dfs.namenode.name.dir</name>
    <value>file:///opt/egg/hadoop-2.7.2/data/namenode</value>
</property>
<property>
    <name>dfs.datanode.data.dir</name>
    <value>file:///opt/egg/hadoop-2.7.2/data/datanode</value>
</property>
<property>
    <name>dfs.namenode.checkpoint.dir</name>
    <value>file:///opt/egg/hadoop-2.7.2/data/secondary</value>
</property>
-->


<!-- datanode和namenode的心跳时间,默认是五分钟和三秒 -->
<!--datanode进程死亡或者网络故障造成datanode无法与namenode通信,
    namenode不会立即把该节点判定为死亡,要经过一段时间,这段时间暂称作超时时长。
    HDFS默认的超时时长为
    10分钟+30秒= 2 * dfs.namenode.heartbeat.recheck-interval + 10 * dfs.heartbeat.interval-->
<property>
    <name>dfs.namenode.heartbeat.recheck-interval</name>
    <value>300000</value>
    <description>毫秒</description>
</property>
<property>
    <name>dfs.heartbeat.interval</name>
    <value>3</value>
    <description>秒</description>
</property>


<!-- 1、SecondaryNameNode每隔一小时执行一次fsimage和Edits的合并 -->
<property>
    <name>dfs.namenode.checkpoint.period</name>
    <value>3600</value>
</property>
<!-- 2、一分钟检查一次操作次数,当操作次数达到1百万时,SecondaryNameNode执行一次合并操作
<property>
    <name>dfs.namenode.checkpoint.txns</name>
    <value>1000000</value>
    <description>操作动作次数</description>
</property>
<property>
    <name>dfs.namenode.checkpoint.check.period</name>
    <value>60</value>
    <description> 1分钟检查一次操作次数</description>
</property >
-->

yarn-site.xml

<!-- Reducer获取数据的方式 -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>


<!-- 指定YARN的ResourceManager的地址 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop1</value>
</property>


<!-- 日志聚集功能 -->
<property>
    <name>yarn.log-aggregation-enable</name>
    <value>true</value>
</property>


<!-- 日志聚合保留时间设置7天 -->
<property>
    <name>yarn.log-aggregation.retain-seconds</name>
    <value>604800</value>
</property>

mapred-site.xml

<!-- 指定MR运行在Yarn上 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>


<!-- 历史服务器端地址 -->
<property>
    <name>mapreduce.jobhistory.address</name>
    <value>hadoop1:10020</value>
</property>


<!-- 历史服务器web端地址 -->
<property>
    <name>mapreduce.jobhistory.webapp.address</name>
    <value>hadoop1:19888</value>
</property>

conf目录下
vi slaves
hadoop1
hadoop2
hadoop3

scp -r /opt/egg/hadoop-2.7.2 root@hadoop2:/opt/egg
scp -r /opt/egg/hadoop-2.7.2 root@hadoop3:/opt/egg
修改其余两台的 /etc/profile并source

bin/hadoop namenode -format

sbin/start-all.sh
sbin/mr-jobhistory-daemon.sh start historyserver #开启jobhistory,使得19888可以访问
jps

测试mr
随便上传一个文件到hdfs
hadoop jar /opt/egg/hadoop-2.7.2/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /kms.sh /out3

若执行不成功或卡住 可到/opt/egg/hadoop-2.7.2/logs/yarn-root-resourcemanager-hadoop1.log 查看日志

1、配置历史服务器 19888:为了查看程序的历史运行情况
2、配置日志聚合:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。在yarn界面可以查看log