关闭防火墙和SELinux systemctl stop firewalld.service systemctl disable firewalld.service setenforce 0 sed -i 's/^SELINUX=.*$/SELINUX=disabled/g' /etc/selinux/config 修改/etc/hosts 文件,加入引入其他服务器主机 10.10.10.62 testdb62 10.10.10.136 testdb136 10.10.10.63 testdb63 集群部署规划 testdb62 NameNode(HDFS) DataNode(HDFS) NodeManager(YARN) testdb136 DataNode(HDFS) ResourceManager(YARN) NodeManager(YARN) testdb63 SecondaryNameNode(HDFS) DataNode(HDFS) NodeManager(HDFS) 创建 hadoop 用户 useradd hadoop 修改hadoop 用户密码 passwd hadoop 给hadoop sudo权限 vi /etc/sudoers hadoop ALL=(root) NOPASSWD:ALL 为hadoop用户配置ssh免密登录 ssh-keygen cd ~/.ssh cat id_rsa.pub > authorized_keys chmod 600 * cd ~/ scp -r .ssh testdb136:~/ scp -r .ssh testdb63:~/ 最后每个节点都要验证 ssh testdb62 date ssh testdb136 date ssh testdb63 date 创建目录 mkdir /opt/hadoop mkdir /data/hadoop/data/tmp -p 查询是否安装jdk rpm -qa | grep jdk 如果安装的版本低于1.7,卸载该JDK rpm -e 软件包 查看JDK安装路径 which java 安装jdk 这里使用的是rpm 包的安装方式,所以,JAVA_HOME是在 /usr/java/jdk1.8.0_65 打开/etc/profile文件,在profile文件末尾添加jdk路径 vi /etc/profile #JAVA_HOME export JAVA_HOME=/usr/java/jdk1.8.0_65 export PATH=$PATH:$JAVA_HOME/bin 解压安装文件到 /opt/hadoop 下面 tar -zxvf hadoop-2.7.2.tar.gz -C /opt/hadoop/ 修改权限 chown -R hadoop:hadoop /opt/hadoop chown -R hadoop:hadoop /data/hadoop 打开/etc/profile文件,在profile文件末尾添加hadoop路径 vi /etc/profile ##HADOOP_HOME export HADOOP_HOME=/opt/hadoop/hadoop-2.7.2 export PATH=$PATH:$HADOOP_HOME/bin export PATH=$PATH:$HADOOP_HOME/sbin 让修改后的文件生效 source /etc/profile 测试是否安装成功 hadoop version 创建集群同步命令脚本 vi /opt/hadoop/hadoop-2.7.2/bin/xsync #!/bin/bash #1 获取输入参数个数,如果没有参数,直接退出 pcount=$# if((pcount==0)); then echo no args; exit; fi #2 获取文件名称 p1=$1 fname=`basename $p1` echo fname=$fname #3 获取上级目录到绝对路径 pdir=`cd -P $(dirname $p1); pwd` echo pdir=$pdir #4 获取当前用户名称 user=`whoami` #5 循环 for i in {testdb62,testdb136,testdb63} do echo ------------------- $i -------------- rsync -rvl $pdir/$fname $user@$i:$pdir done 给脚本执行权限 chmod 755 /opt/hadoop/hadoop-2.7.2/bin/xsync 创建集群分发命令脚本 vi /opt/hadoop/hadoop-2.7.2/bin/xcall #!/bin/bash pcount=$# if((pcount==0));then echo no args; exit; fi for i in {testdb62,testdb136,testdb63} do echo ----------hostName $i--------- ssh $i $@ done 给脚本执行权限 chmod 755 /opt/hadoop/hadoop-2.7.2/bin/xcall 配置文件所在的目录: /opt/hadoop/hadoop-2.7.2/etc/hadoop 配置core-site.xml vi core-site.xml <!-- 指定HDFS中NameNode的地址 --> <property> <name>fs.defaultFS</name> <value>hdfs://testdb62:9000</value> </property> <!-- 指定Hadoop运行时产生文件的存储目录 --> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop/data/tmp</value> </property> 配置hadoop-env.sh vi hadoop-env.sh export JAVA_HOME=/usr/java/jdk1.8.0_65 配置hdfs-site.xml vi hdfs-site.xml <property> <name>dfs.replication</name> <value>3</value> </property> <!-- 指定Hadoop辅助名称节点主机配置 --> <property> <name>dfs.namenode.secondary.http-address</name> <value>testdb63:50090</value> </property> 配置yarn-env.sh vi yarn-env.sh export JAVA_HOME=/usr/java/jdk1.8.0_65 配置yarn-site.xml vi 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>testdb136</value> </property> 配置mapred-env.sh vi mapred-env.sh export JAVA_HOME=/usr/java/jdk1.8.0_65 配置mapred-site.xml cp mapred-site.xml.template mapred-site.xml vi mapred-site.xml <!-- 指定mr运行在yarn上 --> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> 配置slaves vi slaves 在该文件中增加如下内容: testdb62 testdb136 testdb63 在集群上分发配置好的Hadoop配置文件 xsync core-site.xml xsync hadoop-env.sh xsync hdfs-site.xml xsync yarn-env.sh xsync yarn-site.xml xsync mapred-env.sh xsync mapred-site.xml xsync slaves 启动集群 如果集群是第一次启动,需要格式化NameNode hdfs namenode -format 启动HDFS start-dfs.sh jps 4166 NameNode 4482 Jps 4263 DataNode jps 3218 DataNode 3288 Jps jps 3221 DataNode 3283 SecondaryNameNode 3364 Jps 启动YARN start-yarn.sh 注意:NameNode和ResourceManger如果不是同一台机器,不能在NameNode上启动 YARN,应该在ResouceManager所在的机器上启动YARN。 web端查看SecondaryNameNode,浏览器中输入:http://10.10.10.63:50090/status.html 集群基本测试 上传小文件 hadoop fs -mkdir -p /user/hadoop_test/input hadoop fs -put rsync-test-scp.log /user/hadoop_test/input 上传大文件 hadoop fs -put /home/hadoop/hadoop-2.7.2.tar.gz /user/hadoop_test/input 下载 hadoop fs -get /user/hadoop_test/input/hadoop-2.7.2.tar.gz ./ 集群启动/停止方式总结 各个服务组件逐一启动/停止 分别启动/停止HDFS组件 hadoop-daemon.sh start / stop namenode / datanode / secondarynamenode 启动/停止YARN yarn-daemon.sh start / stop resourcemanager / nodemanager 各个模块分开启动/停止(配置ssh是前提)常用 整体启动/停止HDFS start-dfs.sh / stop-dfs.sh 整体启动/停止YARN start-yarn.sh / stop-yarn.sh