1。发行版本
Hadoop发行版本分为开源社区版和商业版,社区版是指由Apache软件基金会维护的版本,是官方维护的版本体系。商业版Hadoop是指由第三方商业公司在社区版Hadoop基础上进行了一些修改,整合以及各个服务组件兼容性测试而发行的版本,比较着名的有cloudera的CDH,mapR等。
我搭建的是社区版: Apache Hadoop.Hadoop的版本很特殊,是由多条分支并行的发展着。大的来看分为3个大的系列版本:1.x,2.x,3.x .Hadoop1.0由一个分布式文件系统HDFS和一个离线计算框架MapReduce组成.Hadoop 2.0则包含一个支持NameNode横向扩展的HDFS,一个资源管理系统YARN和一个运行在YARN上的离线计算框架MapReduce。相比于Hadoop1.0,Hadoop 2.0功能更加强大,且具有更好的扩展性,性能,并支持多种计算框架。
Hadoop 3.0相比之前的Hadoop 2.0有一系列的功能增强。
2。集群简介
HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两个逻辑上分离,但物理上常在一起.HDFS集群负责海量数据的存储,集群中的角色主要有:NameNode,DataNode,SecondaryNameNode
YARN集群负责海量数据运算时的资源调度,集群中的角色主要有:
ResourceManager,NodeManager,那mapreduce是什么呢?它其实是一个分布式运算编程框架,是应用程序开发包,由用户按照编程规范进行程序开发,后打包运行在HDFS集群上,并且受到YARN集群的资源调度管理。
Hadoop的部署方式分三种,独立模式(独立模式),伪分布式模式,群集模式(群集模式),其中前两种都是在单机部署。独立模式又称为单机模式,仅1个机器运行1个的java进程,主要用于调试。伪分布模式也是在1个机器上运行HDFS的的NameNode和数据管理部,纱的ResourceManger和节点管理器,但分别启动单独的java的进程,主要用于调试。集群模式主要用于生产环境部署。会使用ñ台主机组成一个Hadoop的集群。这种部署模式下,主节点和从节点会分开部署在不同的机器上。
我们以 3节点为例进行搭建,角色分配如下:
node-1 NameNode DataNode ResourceManager
node-2 DataNode NodeManager SecondaryNameNode
node-3 DataNode NodeManager
3. 服务器准备
本案例使用 VMware Workstation Pro虚拟机创建虚拟服务器来搭建HADOOP集群,所用软件及版本如下:
VMware Workstation Pro 12.0 Centos 6.5 64位
4. 网络环境准备
采用 NAT方式联网。
如果创建的是桌面版的 Centos系统,可以在安装完毕后通过图形页面进行编辑。如果是迷你版本的,可通过编辑ifcfg-eth *配置文件进行配置。注意BOOTPROTO,GATEWAY,NETMASK。
5. 服务器系统设置
同步时间
#手动同步集群各机器时间
date -s“2017-03-03 03:03:03”
yum install ntpdate
#网络同步时间
ntpdate cn.pool.ntp.org
设置主机名
vi / etc / sysconfig / network
网络=是
HOSTNAME =节点-1
配置 IP,主机名映射
vi / etc / hosts
192.168.80.137 node-1
192.168.80.138 node-2
192.168.80.139 node-3
配置 SSH免密登陆
#生成的ssh免登陆密钥
ssh-keygen -t rsa(四个回车)
执行完这个命令后,会生成 id_rsa(私钥),id_rsa.pub(公钥)
将公钥拷贝到要免密登陆的目标机器上
ssh-copy-id node-2
ssh-copy-id node-3
ssh-copy-id node-1(自己也需要配置免密登录)
配置防火墙
#查看防火墙状态
服务iptables的状态
#关闭防火墙
服务iptables的停止
#查看防火墙开机启动状态
chkconfig iptables --list
#关闭防火墙开机启动
chkconfig iptables off
6. JDK环境安装
#上传JDK安装包
JDK-8u65-的Linux的x64.tar.gz
#解压安装包
tar zxvf jdk-8u65-linux-x64.tar.gz -C / root / apps
#配置环境变量/ 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
#刷新配置
源/ etc / profile
7. Hadoop安装包目录结构
解压的Hadoop的2.7.4-与-的的CentOS-6.7.ta r.gz,目录结构如下:
bin : Hadoop最基本的管理脚本和使用脚本的目录,这些脚本是sbin目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop。
etc : Hadoop配置文件所在的目录,包括core-site,xml,hdfs-site.xml,
mapred-site.xml中等从Hadoop1.0继承而来的配置文件和纱线的site.xml等Hadoop2.0新增的配置文件。
包括:对外提供的编程库头文件(具体动态库和静态库在 lib目录中),这些头文件均是用C ++定义的,通常用于C ++程序访问HDFS或者编写MapReduce程序。
lib :该目录包含了 Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用。
libexec :各个服务对用的 shell配置文件所在的目录,可用于配置日志输出,启动参数(比如JVM参数)等基本信息。
sbin : Hadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动/关闭脚本。
分享: Hadoop各个模块编译后的jar包所在的目录。
8. Hadoop配置文件修改
Hadoop的安装主要就是配置文件的修改,一般在主节点进行修改,完毕后SCP下发给其他各个从节点机器。
8.1。hadoop-env.sh
文件中设置的是 Hadoop的运行时需要的环境变量.JAVA_HOME是必须设置的,即使我们当前的系统中设置了JAVA_HOME,它也是不认识的,因为Hadoop的即使是在本机上执行,它也是把当前的执行环境当成远程服务器。
配置文件在 Hadoop的2.7.4的/ etc / hadoop的下面
vi hadoop-env.sh
export JAVA_HOME = / root / apps / jdk1.8.0_65
8.2。核心的site.xml的
的hadoop的核心配置文件,有默认的配置项芯default.xml.core-default.xml中与芯-site.xml中的功能是一样的,如果在芯的site.xml里没有配置的属性,则会自动会获取核心default.xml中里的相同属性的值。
<! - 用于设置Hadoop的文件系统,由URI指定 - >
<属性>
<名称> fs.defaultFS 名称>
<值> HDFS://节点-1:9000 值>
属性>
<! - 配置Hadoop的临时目录,默认/tmp/hadoop-${user.name} - >
<属性>
<名词> hadoop.tmp.dir 名称>
<值> /home/hadoop/hadoop-2.7.4/tmp 值>
属性>
8.3。HDFS-site.xml中中
HDFS的核心配置文件,有默认的配置项HDFS-default.xml.hdfs-default.xml中与HDFS-site.xml中的功能是一样的,如果在HDFS-的site.xml里没有配置的属性,则会自动会获取HDFS-default.xml中里的相同属性的值。
<! - 指定HDFS副本的数量 - >
<属性>
<名称> dfs.replication 名称>
<值> 2 。>
属性>
<! - secondary namenode所在主机的ip和端口 - >
<属性>
<名称> dfs.namenode.secondary.http地址名称>
<值>节点-2:50090 value>
属性>
8.4。mapred-site.xml中中
MapReduce的的核心配置文件,有默认的配置项mapred-default.xml.mapred-default.xml中与mapred-site.xml中的功能是一样的,如果在mapred-site.xml中里没有配置的属性,则会自动会获取mapred-default.xml中里的相同属性的值。
mv mapred-site.xml.template mapred-site.xml
<! - 指定mr运行时框架,这里指定在yarn上,默认是local - >
<属性>
<值>纱值>
属性>
8.5。纱的的site.xml
纱的核心配置文件,有默认的配置项纱default.xml.yarn-default.xml中与纱线-site.xml中的功能是一样的,如果在纱的site.xml里没有配置的属性,则会自动会获取纱default.xml中里的相同属性的值。
<! - 指定YARN的老大(ResourceManager)的地址 - >
<属性>
<名称> yarn.resourcemanager.hostname 名称>
<值>节点-1 值>
属性>
<! - NodeManager上运行的附属服务。需配置成mapreduce_shuffle才可运行MapReduce程序默认值:“” - >
<属性>
<名称> yarn.nodemanager.aux服务名称>
<值> mapreduce_shuffle 值>
属性>
8.6。奴隶
。奴隶文件里面记录的是集群主机名一般有以下两种作用:
一是:一配合键启动脚本如 start-dfs.sh,stop-yarn.sh用来进行集群启动这时候奴隶文件里面的主机标记的就是从节点角色所在的机器。
二是:可以配合。HDFS-site.xml中里面dfs.hosts属性形成一种白名单机制.dfs.hosts指定一个文件,其中包含允许连接到的NameNode的主机列表必须指定文件的完整路径名如果值为空,则允许所有主机例如:
<属性>
属性>
那么所有在奴隶中的主机才可以加入的集群中。
六奴隶
节点-2-
节点-3-
9. Hadoop环境变量
编辑环境变量的配置文件:
vi / etc / profile
export JAVA_HOME = /root/apps/jdk1.8.0_65
export HADOOP_HOME = /root/apps/hadoop-2.7.4
导出PATH = $ PATH:$ JAVA_HOME / bin:$ HADOOP_HOME / bin:$ HADOOP_HOME / sbin
保存配置文件,刷新配置文件:
源/ etc / profile
将文件分发到其他两台机器上:
scp -r hadoop-2.7.4 root @ hadoop2:存放文件的目录
注意:另外两台机器也需要修改 / etc / profile文件
1。启动方式
要启动 Hadoop集群,需要启动HDFS和YARN两个集群。
注意:首次启动 HDFS时,必须对其进行格式化操作。本质上是一些清理和准备工作,因为此时的HDFS在物理上还是不存在的。
hdfs namenode-format或者hadoop namenode -format
1.1。单节点逐个启动
在主节点上使用以下命令启动 HDFS NameNode:
hadoop-daemon.sh启动namenode
在每个从节点上使用以下命令启动 HDFS DataNode:
hadoop-daemon.sh启动datanode
在主节点上使用以下命令启动 YARN ResourceManager:
yarn-daemon.sh启动resourcemanager
在每个从节点上使用以下命令启动 YARN nodemanager:
yarn-daemon.sh启动nodemanager
以上脚本位于 $ HADOOP_PREFIX / sbin /目录下。如果想要停止某个节点上某个角色,只需要把命令中的start改为停即即。
1.2。脚本一键启动
如果配置了 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
2。集群web-ui
一旦 Hadoop集群启动并运行,可以通过web-ui进行集群查看,如下所述:
NameNode http:// node-1:port /默认50070。
ResourceManager http:// node-1:port /默认8088。
3。Hadoop初体验
3.1。HDFS使用
从 Linux本地上传一个文本文件到hdfs的/ test / input目录下
hadoop fs -mkdir -p / wordcount / input
hadoop fs -put /root/somewords.txt / test / input
3.2。运行mapreduce程序
在 Hadoop安装包的hadoop-2.7.4 / share / hadoop / mapreduce下有官方自带的mapreduce程序。我们可以使用如下的命令进行运行测试。
示例程序的jar:
Hadoop的MapReduce的例子-2.7.4.jar
计算圆周率:
hadoop jar hadoop-mapreduce-examples-2.7.4.jar pi 20 50
一,Windows和Linux的主机映射配置一致,配置好一份进行分发就可以了,【所有配置都使用主机名,如:节点1,不能使用IP,对IP的解析不好】
2,防火墙都关闭(的Windows防火墙也要关闭)
3,配置免密登陆
如图4所示,配置文件修改不能有多余的空格及中文字符。
5,如果格式化出现问题,删掉namenode配置的目录即可,重新hadoop namenode -format即可。
6,如果DataNode机器中某一台hadoop安装目录文件出错,删除后,如果从其中一台DataNode scp分发过去的话,就要把配置的数据目录删除,重新单独起动DataNode即可。
的hadoop的日志目录(/home/hadoop/app/hadoop-2.6.4/logs)
7,hadoop的启动不正常
用浏览器访问的NameNode的50070端口,不正常,需要诊断问题出在哪里:
a,在服务器的终端命令行使用jps查看相关进程(namenode1个节点datanode3个节点secondary namenode1个节点)
B,如果已经知道了启动失败的服务进程,进入到相关进程的日志目录下,查看日志,分析异常的原因
1)配置文件出错,saxparser例外; - 找到错误提示中所指出的配置文件检查修改即可
2)未知主机 - 主机名不认识,配置/ etc / hosts文件即可,或者是配置文件中所用主机名跟实际不一致
(注:在配置文件中,统一使用主机名,而不要用的IP地址)
3)目录访问异常 - 检查namenode的工作目录,看权限是否正常
start-dfs.sh启动后,发现有数据节点启动不正常
a)查看datanode的日志,看是否有异常,如果没有异常,手动将datanode启动起来sbin / hadoop-daemon.sh start datanode
B)中很有可能是从站文件中就没有列出需要启动的数据管理部
C)中排除上述两种情况后,基本上,能在日志中看到异常信息:
1,配置文件
2,SSH免密登陆没有配置好
3,数据管理部的身份标识跟名称节点的集群身份标识不一致(删掉数据节点的工作目录)