前期准备
需要把hadoop-2.7.3.tar.gz拷贝到/usr/local/src/目录下,并进行解压
进入到/usr/local/src/目录下进行解压命令
tar -zxvf hadoop-2.7.3.tar.gz
- 进入到/usr/local/src/hadoop-2.7.3/etc/hadoop/目录修改对应文件
core-site.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--关注微信公众号:阿布的进击-->
<!--文件:core-site.xml -->
<!--参考地址 http://hadoop.apache.org/docs/r2.7.3/-->
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
<description>用来指定默认的文件系统</description>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/src/hadoop-2.7.3/tmp</value>
<description>hadoop临时文件存放目录</description>
</property>
</configuration>
hdfs-site.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--参考地址 http://hadoop.apache.org/docs/r2.7.3/-->
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
<description>secondaryNamenode地址和端口</description>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/src/hadoop-2.7.3/dfs/name</value>
<description>保存FsImage镜像的目录,作用是存放hadoop的名称节点namenode里的metadata</description>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/src/hadoop-2.7.3/dfs/data</value>
<description>存放HDFS文件系统数据文件的目录,作用是存放hadoop的数据节点datanode里的多个数据块</description>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
<description>block块副本数,默认值3</description>
</property>
</configuration>
mapred-site.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--参考地址 http://hadoop.apache.org/docs/r2.7.3/-->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
<description>指定运行mapreduce的环境是yarn</description>
</property>
<!--hadoop历史服务器-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>master:10020</value>
<description>MR JobHistory服务器进程间通信地址</description>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>master:19888</value>
<description>MR JobHistory服务器的用户界面地址</description>
</property>
<property>
<name>mapreduce.jobhistory.done-dir</name>
<value>/mr-history/done</value>
<description>已执行完毕作业信息存储位置</description>
</property>
<property>
<name>mapreduce.jobhistory.intermediate-done-dir</name>
<value>/mr-history/tmp</value>
<description>正在运行的作业信息存储位置</description>
</property>
<property>
<name>yarn.app.mapreduce.am.staging-dir</name>
<value>/mr-history/hadoop-yarn/</value>
<description>MR作业在提交时所使用的临时目录, 是一个本地路径</description>
</property>
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
<description>调度器为每个map task申请的内存数,各Job也可以单独指定,如果实际使用的资源量超过该值,则会被强制杀死</description>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>2048</value>
<description>调度器为每个reduce task申请的内存数,同map task,超出强制杀死</description>
</property>
<property>
<name>mapreduce.job.reduce.slowstart.completedmaps</name>
<value>0.8</value>
<description>当map task完成80%时,为reduce申请资源,reduce开始进行拷贝map结果数据和做reduce shuffle操作,默认0.05</description>
</property>
</configuration>
slaves文件如下:
slave1
slave2
yarn-site.xml文件如下:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--关注微信公众号:阿布的进击-->
<!--文件:yarn-site.xml -->
<!--参考地址 http://hadoop.apache.org/docs/r2.7.3/-->
<configuration>
<!--日志聚合相关-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
<description>开启日志聚合功能,开启后日志保存在hdfs上</description>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
<description>聚合后的日志在hdfs上的保存时间,单位为秒</description>
</property>
<property>
<name>yarn.log.server.url</name>
<value>http://master:19888/jobhistory/logs</value>
<description>日志聚合服务器URL</description>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
<description>NodeManager上运行的附属服务,需配置成mapreduce_shuffle,才可运行MapReduce程序</description>
</property>
<property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
<property>
<name>yarn.resourcemanager.address</name>
<value>master:8032</value>
<description>RM 对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序</description>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>master:8030</value>
<description>RM 对ApplicationMaster暴露的访问地址。AM通过该地址向RM申请资源、释放资源</description>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>master:8035</value>
<description>RM 对NodeManager暴露的地址,NM通过该地址向RM汇报心跳,领取任务</description>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>master:8033</value>
<description>RM 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等</description>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>master:8088</value>
<description>RM对外web ui地址。用户可通过该地址在浏览器中查看集群各类信息</description>
</property>
<!-- 关闭虚拟内存检查-->
<property>
<name>yarn.nodemanager.pmem-check-enabled</name>
<value>false</value>
<description>是否启动一个线程检查每个任务正使用的物理内存量,如果任务超出分配值,则直接将其杀掉,默认为true</description>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
<description>是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是true</description>
</property>
</configuration>
- 进入到/usr/local/src/hadoop-2.7.3/目录下创建对应目录
mkdir -p dfs/data
mkdir -p dfs/name
mkdir tmp
- 配置/root/.bashrc全局环境变量,如下:
进入vi /root/.bashrc,进行添加如下内容:
# set hadoop environment
export HADOOP_HOME=/usr/local/src/hadoop-2.7.3
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
添加之后esc退出保存,并重新加载环境变量
source /root/.bashrc
搭建hadoop集群条件
需要准备三台centos7系统;每个系统节点,都需要关闭防火墙(iptables,selinux)、jdk、互信、ip映射
VM克隆slave两台
- 克隆完两台slave之后,修改对应IP地址,并重新启动网络
/etc/init.d/network restart
- 配置三台对应hostname,操作命令如下:
hostnamectl set-hostname master
- 配置主机文件(每一个节点都需要执行)
vi /etc/hosts
192.168.127.130 master
192.168.127.131 slave1
192.168.127.132 slave2
修改为一台机器的hosts文件之后,也可以通过scp进行分发hosts文件,操作命令如下:
scp -r /etc/hosts root@slave1:/etc/
提示输入yes/no,输入yes;
提示输入slave1的密码,输入slave1密码,就会自动分发到对应节点,依次类推发到slave2节点
- SSH互信配置
ssh-keygen -t rsa
三次回车生成密钥(每一个节点都需要执行)
生成公钥(主节点执行)
cat /root/.ssh/id_rsa.pub > /root/.ssh/authorized_keys
chmod 600 /root/.ssh/authorized_keys
复制其他节点的公钥(主节点执行)
ssh slave1 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys
ssh slave2 cat /root/.ssh/id_rsa.pub >> /root/.ssh/authorized_keys# 复制公钥到其他节点(主节点执行)
scp /root/.ssh/authorized_keys root@slave1:/root/.ssh/authorized_keys
scp /root/.ssh/authorized_keys root@slave2:/root/.ssh/authorized_keys
免密SSH测试
ssh slave1 ip addr
ssh slave2 ip addr
- 格式化hadoop集群
hadoop namenode -format
在那节点格式化,对应节点就是主节点
- 启动hadoop集群
[root@master hadoop-2.7.3]# sbin/start-all.sh
- 检查hadoop集群是否正常
- 检查进程是否正常 jps
[root@master hadoop-2.7.3]# jps
1777 ResourceManager
2034 Jps
1483 NameNode