Hadoop | 集群搭建

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/fragrant_no1/article/details/85707774

1.0 集群简介

HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起
HDFS集群:
负责海量数据的存储,集群中的角色主要有 NameNode / DataNode
YARN集群:
负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager

本集群搭建案例,以5节点为例进行搭建,角色分配如下:

hdp-node-01 NameNode SecondaryNameNode
hdp-node-02 ResourceManager
hdp-node-03 DataNode NodeManager
hdp-node-04 DataNode NodeManager
hdp-node-05 DataNode NodeManager

部署图如下:
在这里插入图片描述

如果是虚拟机添加如下设置:
服务器准备
本案例使用虚拟机服务器来搭建HADOOP集群,所用软件及版本:
Vmware 11.0
Centos 6.5 64bit
4.1.3网络环境准备
采用NAT方式联网
网关地址:192.168.33.1
3个服务器节点IP地址:192.168.33.101、192.168.33.102、192.168.33.103
子网掩码:255.255.255.0

1.1 服务器系统设置

添加HADOOP用户
为HADOOP用户分配sudoer权限
同步时间
设置主机名
hdp-node-01
hdp-node-02
hdp-node-03
配置内网域名映射housts 的添加ip:hostname映射:
192.168.33.101 hdp-node-01
192.168.33.102 hdp-node-02
192.168.33.103 hdp-node-03
配置ssh免密登陆
配置防火墙

上述操作说明:

  • 修改主机名

     vi /etc/sysconfig/network
     
     NETWORKING=yes
     HOSTNAME=hadoopmanager ###注意这里最好不要用下划线_分割
    
  • 修改IP 针对虚拟机用户的,真实liunx可以跳过该步骤

     两种方式:
     第一种:通过Linux图形界面进行修改(强烈推荐)
     	进入Linux图形界面 -> 右键点击右上方的两个小电脑 -> 点击Edit connections -> 选中当前网络System eth0 -> 点击edit按钮 -> 选择IPv4 -> method选择为manual -> 点击add按钮 -> 添加IP:192.168.1.101 子网掩码:255.255.255.0 网关:192.168.1.1 -> apply
    
     第二种:修改配置文件方式(屌丝程序猿专用)
     	vim /etc/sysconfig/network-scripts/ifcfg-eth0
     	
     	DEVICE="eth0"
     	BOOTPROTO="static"               ###
     	HWADDR="00:0C:29:3C:BF:E7"
     	IPV6INIT="yes"
     	NM_CONTROLLED="yes"
     	ONBOOT="yes"
     	TYPE="Ethernet"
     	UUID="ce22eeca-ecde-4536-8cc2-ef0dc36d4a8c"
     	IPADDR="192.168.1.101"           ###
     	NETMASK="255.255.255.0"          ###
     	GATEWAY="192.168.1.1"            ###
    
  • 修改主机名和IP的映射关系 这个修改完不需要source 加载

     vim /etc/hosts
     	
     192.168.1.101	hadoopmanager
    
  • 关闭防火墙

     #查看防火墙状态
     service iptables status
     #关闭防火墙
     service iptables stop
     #查看防火墙开机启动状态
     chkconfig iptables --list
     #关闭防火墙开机启动
     chkconfig iptables off
    
  • 修改sudo

     su root
     vim /etc/sudoers
     给hadoop用户添加执行的权限,仿着root的一模一样的写就行
    

如图:
在这里插入图片描述

  • Jdk环境安装

上传jdk安装包
规划安装目录 /home/hadoop/apps/jdk_1.7.65
解压安装包

tar -zxvf jdk-7.tar.gz -C /home/hadoop/jdk

配置环境变量 /etc/profile

        vim /etc/profile
		
		#在文件最后添加
		export JAVA_HOME=/home/hadoop/app/jdk-7
		export PATH=$PATH:$JAVA_HOME/bin

在当前bash中刷新配置 source /etc/profile

1.2 HADOOP安装部署

上传HADOOP安装包到/home/hadoop/(这个目录自己定义)
规划安装目录 /home/hadoop/hadoop-2.6.4
解压安装包
修改配置文件 $HADOOP_HOME/etc/hadoop/

还有一份比较全的,可以一次性全部配置上

xport HADOOP_HOME=/usr/local/hadoop-2.6.4   #后面这个一定要写具体的JDK路径

export HADOOP_PREFIX=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_PREFIX

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_PREFIX/lib/native

export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop

export HADOOP_HDFS_HOME=$HADOOP_PREFIX

export HADOOP_MAPRED_HOME=$HADOOP_PREFIX

#export HADOOP_ROOT_LOGGER=DEBUG,console

export LD_LIBRARY_PATH=$HADOOP_PREFIX/lib/native

PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
  • 配置文件修改第二步 core-site.xml, hdfs-site.xml ,mapred-site.xml ,yarn-site.xml

core-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
	<name>fs.defaultFS</name>
	<value>hdfs://hadoopmanager:9000</value>
	<descript>指定namenodeURI(统一资源定位符),也就是namenode hdfs协议的文件系统通信地址,hadoop客户端访问hdfs的地址</descript>
</property>

<property>
	<name>hadoop.tmp.dir</name>
	<value>/home/hadoop/hadoop-2.6.4/tmp</value>
	<descript>hadoop的临时文件存储目录,目录可以不提前创建</descript>
</property>

<property>
	<name>io.file.buffer.size</name>
	<value>131702</value>
	<descript>IO缓冲区的大小,默认64M </descript>
</property>

<property>
	<name>hadoop.proxyuser.root.hosts</name>
	<value>*</value>
</property>

<property>
	<name>hadoop.proxyuser.root.groups</name>
	<value>*</value>
</property>

<property>
	<name>ha.zookeeper.quorum</name>
	<value>dellserver01:2181,dellserver02:2181,dellserver03:2181,dellserver04:2181,dellserver05:2181</value>
	<descript>是ZooKeeper集群的IP地址或服务器名和端口。注意,数量一定是奇数,且不少于三个节点</descript>
</property>

</configuration>

hdfs-site.xml

<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
	<name>dfs.replication</name>
	<value>2</value>
	<description>也就是上传一个文件,其分割为block块后,每个block的冗余副本个数,每台datanode中只能有该block得一块副本,默认3,多啦不起作用,按实际机器数量分</description>
</property>

<property><!--指定secondary的https协议访问地址-->
	<name>dfs.namenode.secondary.https-address</name>
	<value>hadoopmanager:9001</value>
</property>

<property>
	<name>dfs.namenode.hosts</name>
	<value>hadoopnode1, hadoopnode2</value>
	<description>hadoopnode1, hadoopnode2分别对应DataNode所在服务器主机名</description>
</property>

<!--必须设置为true,否则就不能通过web访问hdfs上的文件信息

从上面的配置,我们可以看到:

主namenode有个hdfs协议的访问地址:hadoopmanager:9000

secondNamenode有个http协议的访问地址:hadoopmanager:9001

hdfs开启了web监视后,主namenode有个默认的http访问地址:hadoopmanager:50070 (通过他来查看hdfs状况)
-->
<property>
	<name>dfs.webhdfs.enabled</name>
	<value>true</value>
	<description>hdfs的web管理端页面监视,不开启就不能访问web,默认端口50070</description>
</property>

 <property>
	 <name>dfs.namenode.name.dir</name>
	 <value>file:/usr/local/hadoop-2.4.1/dfs/name</value>
	 <description>namenode数据的存放地点,也就是元数据存放的地方,记录了hdfs系统中文件的元数据信息,默认是${hadoop.tmp.dir}/dfs/name ,file:代表本地文件系统,可以不加</description>
</property>

<property>
	  <name>dfs.datanode.data.dir</name>
	  <value>file:/usr/local/hadoop-2.4.1/dfs/data</value>
	  <description>datanode数据的存放地点。也就是block块存放的目录了,默认是${hadoop.tmp.dir}/dfs/data</description>
</property>

</configuration>

mapred-site.xml

<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->

<!-- Put site-specific property overrides in this file. -->

<configuration>
<property>
	<name> mapreduce.framework.name</name>
	<value>yarn</value>
	<description>执行框架设置为Hadoop YARN,就是告诉hadoop以后MR(Map/Reduce)运行在YARN上</description>
</property>
<!---- 指定mr框架jobhistory的内部通讯地址。目前还不知道是做什么的 -->
	<name>mapreduce.jobhistory.address</name>
	<value>hadoopmanager:10020</value>
</property>

<property>
<!---- 指定mr框架web查看的地址,也是类似管理端web页面应该,具体不清楚 -->
	<name>mapreduce.jobhistory.webapp.address</name>
	<value>hadoopmanager:19888</value>
</property>
</configuration>

yarn-site.xml

<?xml version="1.0"?>
<!--
  Licensed under the Apache License, Version 2.0 (the "License");
  you may not use this file except in compliance with the License.
  You may obtain a copy of the License at

    http://www.apache.org/licenses/LICENSE-2.0

  Unless required by applicable law or agreed to in writing, software
  distributed under the License is distributed on an "AS IS" BASIS,
  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
  See the License for the specific language governing permissions and
  limitations under the License. See accompanying LICENSE file.
-->
<configuration>
<property>
	<name>yarn.resourcemanager.hostname</name>
	<value>hadoopmanager</value>
	<description></description>
</property>

<property>
	<name>yarn.nodemanager.aux-services</name>
	<value>mapreduce_shuffle</value>
	<description>节点资源管理器nodemanager ,辅助yarn的程序</description>
</property>

<!--不太清楚是干什么的,可以不设置用默认的-->
<property>                                                                
	<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
	<value>org.apache.hadoop.mapred.ShuffleHandler</value>
</property>

<property>
<!--yarn总管理器的IPC通讯地址 不太清楚是干什么的,可以不设置用默认的-->
   <name>yarn.resourcemanager.address</name>
   <value>singlehost:8032</value>
</property>

<property>
<!--yarn总管理器调度程序的IPC通讯地址 不太清楚是干什么的,可以不设置用默认的-->
   <name>yarn.resourcemanager.scheduler.address</name>
   <value>singlehost:8030</value>
</property>

<property>
<!--yarn总管理器的IPC通讯地址 不太清楚是干什么的,可以不设置用默认的-->
  <name>yarn.resourcemanager.resource-tracker.address</name>
  <value>singlehost:8031</value>
</property>

<property>
<!--yarn总管理器的IPC管理地址 不太清楚是干什么的,可以不设置用默认的-->
   <name>yarn.resourcemanager.admin.address</name>
   <value>singlehost:8033</value>
</property>

<property>
	<name>yarn.resourcemanager.webapp.address</name>
	<value>hadoopmanager:8089</value>
	<description>yarn总管理器的web http通讯地址</description>
</property>

<!--
可以看到,yarn-site.xml 配置了很多通讯地址,除了8088都是IPC协议的通讯地址,是为了yarn的多个进程之间进行通讯的。

小知识拓展:如果2个进程在同一台机子且在同一个操作平台,可以选择IPC或TCPIP两种通讯协议,但IPC效率高于TCPIP。因为IPC通讯,2个进程直接发送通讯包,而采用TCPIP,进程要把通讯包先发给LO本地环路接口,再通过LO发给进程2.

如果2个进程在不同物理机器或不同操作平台上,则不能用IPC,只能用TCPIP了。
-->

</configuration>

  • 为了保证集群的启动,还需要配置slaves文件

把所有从节点的主机名写到这儿就可以,这是告诉hadoop进程哪些机器是从节点。每行写一个,例如:

hadoopnode1
hadoopnode2

注意:
1,上面slaves中不需要配置本地localhost,不然也会把本地当作datanode
2,前提是已经为每个节点进行了hostname的命名。而且每个节点的hosts文件你修改了本地dns的指向,让这些主机指向约定好的IP。然后每个节点的hosts文件保持同步。

  • 然后为了方便同步数据,传递数据,需要配置集群中的SSH免密登陆
    1,生成ssh免登陆密钥
    ssh-keygen -t rsa (四个回车)
    执行完这个命令后,会在~目录生成.ssh目录,里面有两个文件id_rsa(私钥)、id_rsa.pub(公钥)

    2,将公钥拷贝到要免密登陆的目标机器上
    默认登陆的是root,所以如果需要指定用户,如hadoop用户,那么需要详细的指定ssh-copy-id -i ~/.ssh/id_rsa.pub [email protected]

    3,验证
    A登陆B ssh ip/hostname
    A从登陆B的状态退出 exit

1.3 hadoop集群启动

初始化HDFS的目录结构以及spaceID等内容

hdfs namenode -format 或者 hadoop namenode -format

启动hadoop

 先启动HDFS
 sbin/start-dfs.sh

 再启动YARN
 sbin/start-yarn.sh

验证是否启动成功

使用jps命令验证
27408 NameNode
28218 Jps
27643 SecondaryNameNode
28066 NodeManager
27803 ResourceManager
27512 DataNode

其他:
http://192.168.1.101:50070 (HDFS管理界面)
http://192.168.1.101:8088 (MR管理界面)

集群是否可以使用验证
即使前面的jps命令验证成功也不一定代表可以使用,还需要查看一下:

hdfs  dfsadmin  –report 

如果显示类似如下内容,代表可以正常使用,反之如果没有显示datanode节点或者可用空间为0的,都是有问题,不能使用。
在这里插入图片描述

可能遇到的问题:

1,yarn连接失败问题:

connecting to resoucemanager 
retrying ....  

–原因是没有启动yarn或者启动失败

2,-format 初始化工作目录结构问题
hdfs namenode -format 只是初始化了namenode的工作目录(记录元数据)
而datanode的工作目录是在datanode启动后自己初始化的

3, datanode不被namenode识别的问题,也就是namenode查看容量等信息的时候无datanode节点
namenode在format初始化的时候会形成两个标识:
blockPoolId:
clusterId:

新的datanode加入时,会自动去namenode中获取这两个标识作为自己工作目录中的标识

一旦namenode重新format后,namenode的身份标识已变,而datanode如果依然
持有原来的id,就不会被namenode识别

解决方法可以讲datanode的工作目录全部删除,重新启动

4,datanode下线后,web管理端没看到下线,仍然显示在线
datanode下线后不会立即显示,而是有一个连接超时时间。

5,关于副本数量的问题
副本数量的配置参数的引用是有优先级的,比如在javaAPI中上传文件:
优先级: conf.set > 源目录中自定义配置文件hdfs-site.xml > hdfs jar包中的hdfs-default.xml(默认3)

注意:集群中配置的hdfs-site.xml 就不在起作用了在上面的使用中

还有一片好文章大家可以也参考看一下,推荐:
hadoop集群配置文件详解
hadoop集群搭建(超详细版)

猜你喜欢

转载自blog.csdn.net/fragrant_no1/article/details/85707774
今日推荐