Hadoop集群搭建
Posted 有智者弑静成
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Hadoop集群搭建相关的知识,希望对你有一定的参考价值。
发行版本
集群简介
HDFS集群负责海量数据的存储
YARN集群负责海量数据运算时的资源调度
MapReduce
Hadoop部署方式分类
集群按以上分布的原因
具体搭建步骤
搭建前准备
1.准备Linux环境
1.0 配置好各虚拟机的网络(采用NAT联网模式)
1.1修改各个虚拟机主机名
1.2修改主机名和IP的映射关系
1.3关闭防火墙
1.4.配置ssh免登陆
1.5 同步集群时间
注:在分布式集群环境中 系统的时间同步非常重要有些软件就是根据彼此时间差来判断对方是否活着在集群中,优先确保各个机器之间的时间是同步的,其次在去确保集群跟外界时间同步。
2.安装JDK
2.1上传jdk
2.2解压jdk
2.3将java添加到环境变量中
3.安装hadoop2.7.4
注意:hadoop2.x的配置文件目录:$HADOOP_HOME/etc/hadoop
3.1配置hadoop
第一个:hadoop-env.sh
第二个:core-site.xml
第三个:hdfs-site.xml
第四个:mapred-site.xml
第五个:yarn-site.xml
第六个:slaves文件,里面写上从节点所在的主机名字
3.2将hadoop添加到环境变量
3.3格式化namenode(本质是对namenode进行初始化)
首次启动HDFS时,必须对其进行格式化操作
3.4启动hadoop
单点逐个启动
脚本一键启动
3.5验证是否启动成功
Hadoop初体验
HDFS使用
运行mapreduce程序
Hadoop集群搭建
发行版本
Hadoop发行版本分为开源社区版和商业版。
- 社区版是Apache基金会维护的版本,官方维护版本体系。
- 商业版是第三方商业公司在社区办Hadoop基础上进行了修改整合以及各个服务组件兼容性测试而发行的版本
Hadoop1.0是由一个分布式文件系统HDFS和一个离线计算框架MapReduce组成
Hadoop2.0则包含一个支持NameNode横向扩展的HDFS,一个资源管理系统YARN和一个运行在YARN上的离线计算框架MapReduce。相比1.0Hadoop2.0功能更加强大,且具有更好的扩展性、性能,并支持多种计算框架
Hadoop3.0相比之前的Hadoop2.0有一系列的功能增强。但目前还是alpha版本有很多bug不能保证API的稳定和质量
集群简介
Hadoop集群具体来说是包含两个集群:HDFS集群和YARN集群,两者逻辑上分离但物理上常在一起
集群是多台机器做同一件事情(高性能HPC) 或者任意一台机器处理一个事情(负载均衡LBC)主备高可用(HA)
主从和主备
* 主从:主和从干的活不一样,但是从受主的管理,而且主从同时运行
* 主备:主和备干的活一模一样 同一时刻同一时间只能有一个服务,主挂掉备启动 高可用HA
HDFS集群负责海量数据的存储
主要角色有:NameNode、DataNode、SecondaryNameNode
YARN集群负责海量数据运算时的资源调度
主要角色有:ResourceManager、NodeManager
MapReduce
MapReduce是一个分布式运算变成框架,是应用程序开苞,由用户按照变成规范进行程序开发,打包后运行在HDFS集群上,并且受到YARN集群的资源调度管理.
Hadoop部署方式分类
- 独立模式Standalone mode 又称为单机模式,仅1台机器运行1个java进程,主要用于调试。
- 伪分布式模式Pseudo-Distributed mode 伪分布模式也是在 1 个机器上运行 HDFS 的 NameNode 和 DataNode、YARN 的ResourceManger 和 NodeManager,但分别启动单独的 java 进程,主要用于调试。
集群模式Cluster mode 集群模式主要用于生产环境部署。会使用 N 台主机组成一个 Hadoop 集群。
这种部署模式下,主节点和从节点会分开部署在不同的机器上。node-1 NameNode DataNode ResourceManager NodeManager node-2 DataNode SecondaryNameNode NodeManager node-3 DataNode NodeManager
集群按以上分布的原因
- Namenode和SecondaryNameNode占内存不放在一起
- 为了方便一般吧不同服务的老大都放在一起
- 那台机器进行了DataNode安装就一定涉及到了资源管理NodeManager
具体搭建步骤
搭建前准备
1.准备Linux环境
1.0 配置好各虚拟机的网络(采用NAT联网模式)
第一种:通过Linux图形界面进行修改(桌面版本Centos)
进入Linux图形界面
-> 右键点击右上方的两个小电脑
-> 点击Edit connections
-> 选中当前网络System eth0
-> 点击edit按钮
-> 选择IPv4
-> method选择为manual
-> 点击add按钮
-> 添加IP:192.168.1.101 子网掩码:255.255.255.0 网关:192.168.1.1 -> apply
第二种:修改配置文件方式
vi /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" ###
1.1修改各个虚拟机主机名
vi /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=node-1
1.2修改主机名和IP的映射关系
vi /etc/hosts
192.168.1.101 node-1
192.168.1.102 node-2
192.168.1.103 node-3
1.3关闭防火墙
#查看防火墙状态
service iptables status
#关闭防火墙
service iptables stop
#查看防火墙开机启动状态
chkconfig iptables --list
#关闭防火墙开机启动
chkconfig iptables off
1.4.配置ssh免登陆
#生成ssh免登陆密钥
ssh-keygen -t rsa (四个回车)
执行完这个命令后,会生成两个文件id_rsa(私钥)、id_rsa.pub(公钥)
将公钥拷贝到要免密登陆的目标机器上
ssh-copy-id node-2
1.5 同步集群时间
常用的手动进行时间的同步
date -s "2017-03-03 03:03:03"
或者网络同步:
yum install ntpdate
ntpdate cn.pool.ntp.org
注:在分布式集群环境中 系统的时间同步非常重要有些软件就是根据彼此时间差来判断对方是否活着在集群中,优先确保各个机器之间的时间是同步的,其次在去确保集群跟外界时间同步。
2.安装JDK
2.1上传jdk
rz jdk-8u65-linux-x64.tar.gz
2.2解压jdk
tar -zxvf jdk-8u65-linux-x64.tar.gz -C /root/apps
2.3将java添加到环境变量中
vim /etc/profile
#在文件最后添加
export JAVA_HOME=/root/apps/jdk1.8.0_65
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
#刷新配置
source /etc/profile
3.安装hadoop2.7.4
上传hadoop的安装包到服务器
hadoop-2.7.4-with-centos-6.7.tar.gz
解压安装包
tar zxvf hadoop-2.7.4-with-centos-6.7.tar.gz
注意:hadoop2.x的配置文件目录:$HADOOP_HOME/etc/hadoop
3.1配置hadoop
第一个:hadoop-env.sh
vi hadoop-env.sh
export JAVA_HOME=/root/apps/jdk1.8.0_65
第二个:core-site.xml
<!-- 指定HADOOP所使用的文件系统schema(URI),HDFS的老大(NameNode)的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node-1:9000</value>
</property>
<!-- 指定hadoop运行时产生文件的存储目录,默认/tmp/hadoop-${user.name} -->
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop-2.4.1/tmp</value>
</property>
第三个:hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
<name>dfs.replication</name>
<value>2</value> //包含源文件一共2分
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node-22:50090</value>
</property>
第四个:mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
vi mapred-site.xml
<!-- 指定mr运行时框架,这里指定在yarn上,默认是local -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
第五个:yarn-site.xml
<!-- 指定YARN的老大(ResourceManager)的地址 -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node-21</value>
</property>
<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序默认值:"" -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
第六个:slaves文件,里面写上从节点所在的主机名字
vi slaves
node-21
node-22
node-23
3.2将hadoop添加到环境变量
vim /etc/proflie
export JAVA_HOME=/root/apps/jdk1.8.0_65
export HADOOP_HOME=/root/apps/hadoop-2.7.4
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile
3.3格式化namenode(本质是对namenode进行初始化)
hdfs namenode -format(hadoop namenode -format)
推荐使用hadoop namenode -format 这是hadoop2提供改的 前一个是hadoop1提供的按照最新的选择
首次启动HDFS时,必须对其进行格式化操作
所谓的namenode的格式化就是针对hdfs集群进行初始化,在这当中,创建hadoop数据存储的目录(hadoop.tmp.dir)还会创建一些和hdfs相关文件,创建集群的id编号clusterID=CID-8e80457a-f23e-4b43-96ff-035e11b2e360
不要理解成传统意义上的格式化
格式化只能进行一次,一般在集群新搭建的时候进行
/export/data/hadoop/dfs/name/current
-rw-r--r--. 1 root root 321 Dec 4 11:51 fsimage_0000000000000000000
-rw-r--r--. 1 root root 62 Dec 4 11:51 fsimage_0000000000000000000.md5
-rw-r--r--. 1 root root 2 Dec 4 11:51 seen_txid
-rw-r--r--. 1 root root 208 Dec 4 11:51 VERSION
查看该目录下文件可以看出是刚刚启动改的集群
cat VERSION
里保存了集群编号 这个id唯一标识
想要重新格式化需要重启系统
3.4启动hadoop
启动方式有两种
单点逐个启动
在主节点上使用以下命令启动 HDFS NameNode:
hadoop-daemon.sh start namenode
在每个 从节点上使用以下命令启动 HDFS DataNode:
hadoop-daemon.sh start datanode
hadoop-daemons.sh start datanode
datanode 结合 slaves 文件 启动所有 DataNode 。
在主节点上使用以下命令启动 YARN ResourceManager:
yarn-daemon.sh start resourcemanager resourcemanager
在每个 从节点上使用以下命令启动 YARN nodemanager:
yarn-daemon.sh start nodemanager
yarn-daemons.sh start nodemanager
结合 slaves 启动所有 nodemanager 。
以上脚本位于$HADOOP_PREFIX/sbin/目录下。如果想要停止某个节点上角色,只需要把命令中的start改为stop即可。
脚本一键启动
如果配置了 etc/hadoop/slaves 和 ssh 免密登录,则可以使用程序脚本启动所有 Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。
hdfs:$HADOOP_PREFIX/sbin/start-dfs.sh
yarn: $HADOOP_PREFIX/sbin/start-yarn.sh
停止集群:
stop-dfs.sh
stop-yarn.sh
3.5验证是否启动成功
使用jps命令验证
27408 NameNode
28218 Jps
27643 SecondaryNameNode (secondarynamenode) 这个进程只能在该主进程处
28066 NodeManager
27803 ResourceManager
27512 DataNode
http://192.168.1.101:50070 (HDFS管理界面)
http://192.168.1.101:8088 (MR管理界面)
Hadoop初体验
HDFS使用
从 Linux 本地上传一个文本文件到 hdfs 的/test/input 目录下
hadoop fs -mkdir -p /wordcount/input
hadoop fs -put /root/somewords.txt /test/input
上传后可以在NameNode管理页面查找到
192.168.XXX.XXX:50070 -> Utilities
运行mapreduce程序
在 Hadoop 安装包的 hadoop-2.7.4/share/hadoop/mapreduce 下有官方自带
的 mapreduce 程序。我们可以使用如下的命令进行运行测试。 示例程序 jar:
hadoop-mapreduce-examples-2.7.4.jar
计算圆周率:
hadoop jar hadoop-mapreduce-examples-2.7.4.jar pi 2 5
关于圆周率的估算,感兴趣的可以查询资料 Monte Carlo 方法来计算 Pi 值。
以上是关于Hadoop集群搭建的主要内容,如果未能解决你的问题,请参考以下文章