前言

本教程分为完全分布式和伪分布式搭建

伪分布式平台搭建

此笔记用于在Centos7环境上搭建单机版伪分布式 Hadoop平台

需要3台虚拟机:

  • master
  • slave1
  • slave2

用到的文件:

  • JDK 1.8.0_201
  • Hadoop-2.6.0
  • Centos7.4

配置文件

core-site.xml

<property>
   <name>hadoop.tmp.dir</name>
   <value>file:/home/hadoop/hadoop-2.6.0/hdfs/tmp</value>
   <description>A base for other temporary directories.</description>
 </property>
 <property>
  <name>io.file.buffer.size</name>
   <value>131072</value>
 </property>
 <property>
   <name>fs.defaultFS</name>
   <value>hdfs://master:9000</value><!--master可以换成127.0.0.1-->
 </property>

hdfs-site.xml

<property>
 <name>dfs.replication</name>
   <value>1</value>
 </property>
 <property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/home/hadoop/hadoop-2.6.0/hdfs/name</value>
   <final>true</final>
</property>
 <property>
   <name>dfs.datanode.data.dir</name>
   <value>file:/home/hadoop/hadoop-2.6.0/hdfs/data</value>
   <final>true</final>
 </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>

yarn-site.xml

<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.auxservices.mapreduce.shuffle.class</name>
     <value>org.apache.hadoop.mapred.ShuffleHandler</value>
 </property>

mapred-site.xml

<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

/etc/hosts

127.0.0.1   master
192.168.45.11	slave1
192.168.45.12	slave2

#好像不要
#192.168.45.10	master

slaves

master
slave1
slave2

操作方法

1.安装JDK1.8并配置环境变量

注意:master和slave都需要做

先下载好jdk1.8.0_201的tar.gz的包,传输到虚拟机中解压

tar -zxvf jdk1.8.0_201.tar.gz

解压完成后配置环境变量

vi /etc/profile
export JAVA_HOME=/home/hadoop/java/jdk1.8.0_161  #路径不同自行修改
export JRE_HOME=/home/hadoop/java/jdk1.8.0_161/jre  #路径不同自行修改
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib:$CLASSPATH
export PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$JAVA_HOME:$PATH

输入命令使文件立即生效

source /etc/profile

测试是否配置成功

java -version

2.配置SSH服务并实现无密码(密钥)登录

输入命令查看ssh服务是否允许

systemctl status sshd

输入命令创建rsa密钥

ssh-keygen -t rsa -P "" #P是大写

输入完成命令yes回车后会在**~/.ssh目录下生成一个id_rsa.pub**的文件

id_rsa.pub 中的内容写到 authorized_keys 中实现本机无密码登录

cat id_rsa.pub >> authorized_keys

然后将 authorized_keys 复制一份到slave1slave2虚拟机的**~/.ssh**文件夹中

可以用ftp😅,复制完成后就可以实现 master 无密码连接 slave1slave2

3.安装Hadoop并进行配置文件与添加环境变量

Hadoop-2.6.0.tar.gz 传进虚拟机内,并解压出来

tar -zxvf Hadoop-2.6.0.tar.gz

创建Hadoop的数据目录

mkdir hadoop-2.6.0/hdfs
mkdir hadoop-2.6.0/hdfs/tmp
mkdir hadoop-2.6.0/hdfs/data
mkdir hadoop-2.6.0/hdfs/name

进入Hadoop的配置文件夹

cd hadoop-2.6.0/etc/hadoop

配置文件内容如 配置文件

配置Hadoop中JAVA环境变量

配置 hadoop-env.sh

vi hadoop-env.sh

#The java implenentation to use.
export JAVA_HOME=/home/hadoop/java/jdk1.8.0_161 #自行修改地址

配置 yarn-env.sh

vi yarn-env.sh

#some Java parameters
export JAVA_HOME=/hone/hadoop/java/jdk1.8.0_161  #自行修改地址

配置Hadoop环境变量 注意!这一步在虚拟机Slave1和Slave2上也要做

vi /etc/profile
export HADOOP_HOME=/home/hadoop/hadoop-2.6.0
export PATH="$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH"
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop

输入命令使文件立即生效

source /etc/profile

测试是否配置成功

hadoop version

4.将Hadoop安装到Slave上

直接将配置好的Hadoop传输过去

scp -r hadoop-2.6.0 root@slave1:~/
scp -r hadoop-2.6.0 root@slave2:~/

5.初始化Hadoop

将Hadoop初始化

hdfs namenode -format

注意!不要频繁初始化,每一次初始化建议将 hdfs 下的data、tmp、name中的数据清空

6.启动集群

1.启动 NameNode

sbin/hadoop-daemon.sh start namenode #在hadoop根目录下输入

2.启动DataNode

sbin/hadoop-daemon.sh start datanode #在hadoop根目录下输入

3.必须保证NameNode和DataNode已经启动

输入jps查看已启动服务,要保证NameNodeDataNode已经启动成功

jps

4.启动ResourceManager

sbin/yarn-daemon.sh start resourcemanager

5.启动NodeManager

sbin/yarn-daemon.sh start nodemanager

6.全部启动

start-all.sh

7.检查服务

jps #是否存在6个服务

3348 Jps
2600 SecondaryNameNode
2440 DataNode
3276 NameNode
3055 NodeManager
2767 ResourceManager

7.测试环境是否异常

1.不服跑个分 用来求圆周率,pi是类名,第一个10表示Map次数,第二个10表示随机生成点的次数(与计算原理有关)

hadoop   jar   /home/hadoop/hadoop-2.6.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar  pi 10 10

出现结果

Pi is 3.200000000000000000

2.执行 hadoop dfsadmin -report 看集群的状态

如果出现很多 0DFS Used%: NaN% 说明Datanode出现异常,检查配置文件

注意,访问 master 的 ip :50070,访问不进的话,对照以下几点:

  1. 检查平台是否正常运行,跑测试环境是否有报错

    解决:配置文件或者路径出现错误,请自行查看对照进行修改

  2. master 输入 curl localhost:50070 命令,看是否有html代码

    解决:如果有html代码说明防火墙没关闭,先输入

    systemcrl stop firewalld #停止防火墙
    

    再输入

    systemcrl disable firewalld #关闭防火墙自动启动
    

    然后再次用物理机访问 master 的 ip :50070

那么恭喜你,Hadoop搭建完成!😊

如果出现异常

org.apache.hadoop.ipc.RemoteException

请按照启动集群中一步一步来启动Hadoop

完全分布式平台搭建

此笔记用于在Centos7环境上搭建单机版完全分布式 Hadoop平台

需要3台虚拟机:

  • master
  • slave1
  • slave2

用到的文件:

  • JDK 1.8.0_201
  • Hadoop-2.6.0
  • Centos7.4

完全分布式和伪分布式的区别就是在节点分配的不同,因为节点会占用性能,所以不是所有节点都会分配到master上面,而是有一种分配计划, 例:

masterslave1slave2
HDFSDataNodeDataNodeDataNode
NameNode SecondaryNameNode
YARN ResourceManager
NodeManagerNodeManagerNodeManager

配置文件

core-site.xml

<!-- 指定HDFS中NameNode的地址 -->
<property>
		<name>fs.defaultFS</name>
      <value>hdfs://master:9000</value>
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
		<name>hadoop.tmp.dir</name>
		<value>/root/hadoop-2.6.0/hdfs/tmp</value>
</property>

hdfs-site.xml

<!--指定副本数量-->
<property>
		<name>dfs.replication</name>
		<value>3</value>
</property>

<!-- 指定Hadoop辅助名称节点主机配置  SecondaryNameNode的主机位置-->
<property>
      <name>dfs.namenode.secondary.http-address</name>
      <value>slave2:50090</value>
</property>

<!-- 指定name数据路径 -->
<property>
   <name>dfs.namenode.name.dir</name>
   <value>file:/home/hadoop/hadoop-2.6.0/hdfs/name</value>
</property>

<!-- 指定data数据路径 -->
 <property>
   <name>dfs.datanode.data.dir</name>
   <value>file:/home/hadoop/hadoop-2.6.0/hdfs/data</value>
 </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>slave1</value>
</property>

mapred-site.xml

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

Slaves里的主机名需要在 /etc/hosts 里有对应的主机IP

Slaves

master
slave1
slave2

5.(1-4步跟随上方) 初始化Hadoop

在master上输入命令 将Hadoop初始化

hdfs namenode -format

注意!不要频繁初始化,每一次初始化建议将 hdfs 下的data、tmp、name中的数据清空

6.群起集群

不要使用 Start-all.sh 这个命令,这个命令官方已经弃用

请先在 NameNode 所在的主机输入

hdfs start-dfs.sh //这个是启动hdfs服务的

或 在hadoop的根目录下输入以下指令

[root@master hadoop-2.6.0]$ sbin/start-dfs.sh

其次在 ResourceManager 节点所在的主机输入

hdfs start-yarn.sh //这个是启动yarn服务的

或 在hadoop的根目录下输入以下指令

[root@master hadoop-2.6.0]$ sbin/start-yarn.sh

7.检查集群是否有问题

masterslave1slave2
HDFSDataNodeDataNodeDataNode
NameNode SecondaryNameNode
YARN ResourceManager
NodeManagerNodeManagerNodeManager

核对集群是否有误,节点所拥有的服务和 图纸 是否有出入

启动成功无误后就可以进入 NameNode 所在的主机IP地址:50070 访问web端的NameNode

上一篇 下一篇