1. 环境信息
IP地址 | 主机名 | 备注 |
10.0.1.118 | master | 主节点 |
10.0.1.227 | slave-1 | 子节点1 |
10.0.1.226 | slave-2 | 子节点2 |
说明:两个子节点分别做为datanode ,namenode 和secondnamenode 这里都放在主节点上。
2.新建用户(hadoop)
统一使用hadoop用户管理安装集群
useradd -md /home/hadoop hadoop
passwd hadoop #设置密码
3.ssh免密登录
主节点:
[hadoop@master ~]$ ssh localhost #为了生成家目录下的.ssh 目录,有的话不需要执行
[hadoop@master ~]$ cd .ssh
[hadoop@master .ssh]$ ssh-keygen -t rsa #一路回车
[hadoop@master .ssh]$ cat id_rsa.pub >>authorized_keys
说明:以上操作同理在其他节点机上执行,执行后确保每个主机的authorized_keys文件 都有自己和其他成员的公钥id_rsa.pub(可以复制或者scp拷过去再重定向)。另外,
请注意:authorized_keys文件权限请修改成600(chmod 600 authorized_keys,否则后续验证可能不通过 )
执行后测试:
[hadoop@master .ssh]$ ssh hadoop@slave-1 #第一次是要自己输入YES,以后都可以不用输入密码直接登录(在hadoop用户下操作),另
Last login: Wed Sep 13 08:53:00 2017
[hadoop@slave-1 ~]$
4.配置hadoop
下载hadoop包:
http://mirrors.tuna.tsinghua.edu.cn/apache/hadoop/common/hadoop-2.8.1/hadoop-2.8.1.tar.gz
下载JDK:http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
我下载的是jdk-8u131-linux-x64.rpm(下载后直接用root 执行(rpm -ivh jdk-8u131-linux-x64.rpm))
4.1 JDK安装
请注意:一定要安装Oracle官网的JDK,不要用openJDK,因为后面要用到jps命令,openJDK是没有这个命令,为了以后方便请安装Oracle的JDK!!
[root@master ~]# cat /etc/profile
.........#添加JAVA_HOME到最后
export JAVA_HOME=/usr/java/jdk1.8.0_131/
export HADOOP_HOME=/home/hadoop/hadoop-2.8.1/
export PATH=$PATH:$HADOOP_HOME/bin:$JAVA_HOME/bin
4.2 文件配置
hadoop 2.8.1 配置文件都在hadoop-2.8.1/etc/hadoop 目录下,另建议配置过程使用主机名代替IP,IP使用DHCP 的话,会发生改变,免密登陆会失效,修改配置文件会很麻烦!:
4.2.1 core-site.xml
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
<final>true</final>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
<!-- hdfs://Master.Hadoop:22-->
<final>true</final>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
</configuration>
4.2.2 hadoop-env.sh
修改JAVA_HOME配置
# The java implementation to use.
#请注意: 默认配置 export JAVA_HOME=${JAVA_HOME},按照这个配置本来只需要环境里面有JAVA_HOME变量即可,
但是实际上并没有起作用,再启动的时候还是报错没有JAVA_HOME,所以这里干脆直接写路径!!
export JAVA_HOME=/usr/java/jdk1.8.0_131/
4.2.3 hdfs-site.xml
/home/hadoop/hdfs/下的目录自己手创建
<configuration>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hdfs/data</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master:9001</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
没有该文件请 按照模板copy后,再编辑。
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
4.2.5 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.aux-services.mapreduce.shuffle.class</name>
<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>
</configuration>
4.2.6 slaves
[hadoop@master hadoop]$ vi slaves
slave-1
slave-2
4.2.7 masters
[hadoop@master hadoop]$ vi masters
#添加主节点的主机名
master
5 配置hosts 文件
另需修改主机名:
后续可能数据节点启动了,但是连不上主节点。会报错
[root@master ~]# hostnamectl --static set-hostname master #centos 7
[root@master ~]#
用root修改:
[root@master ~]# vi /etc/hosts
10.0.1.118 master
10.0.1.227 slave-1
10.0.1.226 slave-2
6 复制文件
[hadoop@master sbin]$ pwd
/home/hadoop/hadoop-2.8.1/sbin
[hadoop@master sbin]$ ./start-all.sh
[hadoop@master sbin]$ ./stop-all.sh
[hadoop@master sbin]$ jps #查看hadoop 组件
7 格式化namenode
[hadoop@master ~]$ hdfs namenode -format
[hadoop@master sbin]$ pwd
/home/hadoop/hadoop-2.8.1/sbin
[hadoop@master sbin]$ ./start-all.sh
[hadoop@master sbin]$ ./stop-all.sh
[hadoop@master sbin]$ jps #查看hadoop 组件
http://10.0.1.118:50070/dfshealth.html#tab-datanode
上面 Live Nodes 可能在启动后十几秒后才能看到!耐心等等。
10.附录
10.1 报错信息:
2017-09-12 15:51:11,134 WARN org.apache.hadoop.hdfs.server.datanode.DataNode: Block pool BP-2096182614-127.0.0.1-1505236916451 (Datanode Uuid a960ca3f-d58b-4342-b33a-32f415efdc34) service to 10.0.1.118/10.0.1.118:9000 is shutting down
org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.hdfs.protocol.UnregisteredNodeException): Unregistered server: DatanodeRegistration(10.0.1.118:50010, datanodeUuid=a960ca3f-d58b-4342-b33a-32f415efdc34, infoPort=50075, infoSecurePort=0, ipcPort=50020, storageInfo=lv=-57;cid=CID-06e4c25f-3fac-4187-8847-c764a889817a;nsid=1530532974;c=1505236916451)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.verifyRequest(NameNodeRpcServer.java:1545)
at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.sendHeartbeat(NameNodeRpcServer.java:1397)
at org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolServerSideTranslatorPB.sendHeartbeat(DatanodeProtocolServerSideTranslatorPB.java:119)
at org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos$DatanodeProtocolService$2.callBlockingMethod(DatanodeProtocolProtos.java:28421)
at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:447)
at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:989)
at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:845)
at org.apache.hadoop.ipc.Server$RpcCall.run(Server.java:788)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1807)
at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2455)
解决:修改主机名跟etc/hosts 一致!
10.2 如果节点机datanode 都是启动的(jps 查看),在主机上查看没有9000 的端口 ,或者IP是127.0.0.1:9000 请修改hosts 文件。或者namenode 格式化错误
[hadoop@master sbin]$ netstat -an|grep 9000
tcp 0 0 10.0.1.118:9000 0.0.0.0:* LISTEN
tcp 0 0 10.0.1.118:9000 10.0.1.226:43822 ESTABLISHED
tcp 0 0 10.0.1.118:60549 10.0.1.118:9000 TIME_WAIT
tcp 0 0 10.0.1.118:9000 10.0.1.227:42736 ESTABLISHED