您的位置:首页 > 运维架构

Hadoop环境搭建(ubuntu+hadoop2.7 - 伪分布式)

2017-05-22 22:28 465 查看

Hadoop简介

在进行环境搭建之前,先简要回顾一下Hadoop的基本知识。

Hadoop背景

Hadoop是面向集群的分布式并行计算框架(cluster、distributed、parallel),其核心组成是HDFS分布式文件系统和MapReduce并行编程模型。在开发者的业务背景下(如数据分析项目),Hadoop可被视为一套工具,它解决了并行计算中的种种复杂问题(如分布式存储,任务调度,负载均衡,容错机制…),让我们能够绕开底层细节,专注于业务自身的实现。

Hadoop主要经历了Hadoop1和Hadoop2两个时代,Hadoop2在Hadoop1的HDFS+MapReduce的基础上,引入了YARN资源管理系统,hadoop核心区别如下图示:



Hadoop的快速发展与大数据、云计算等新兴领域的崛起相辅相成,围绕Hadoop形成的生态系统现已十分庞大,相关内容按下不表。

基本原理回顾

这里简要回顾一下Hadoop的基本工作机制,包括HDFS和MapReduce两部分。

HDFS

HDFS(Hadoop-分布式文件系统)遵循主从架构(Master-Slave)模式。一个主节点NameNode,负责整个文件系统命名空间(NameSpace)的管理与维护,同时面向客户端(HDFS Client)提供文件读写等操作控制;多个从节点DataNode则构成文件实际的存储集群。此外HDFS为提升系统生存弹性而精心设计了副本机制(Replication)。其它需明确的HDFS术语包括:块(Block)、通信包(Packet)、源数据(MetaData)、Secndary NameNode冷备份等等。

HDFS的架构示意图如下所示:



文件系统最基本的任务是读/写,对于HDFS为用户(Client)提供了完备的读写接口。基本的模式是通过访问NameNode的命名空间映射信息,建立起Client与DataNode File之间的读写通道,生成流对象来进行读写操作。下图是读写文件示意图:





MapReduce

MapReduce是Hadoop实现并行计算的基础(称之为模型、框架、平台…),首先回顾一下Hadoop-MapReduce的运行,主要有以下内容:

用户端Client提交所要进行的MapReduce Job;

ResourceManager进行资源调配设置,NodeManager加载与监控容器;

ApplicationMaster向ResourceManager申请资源并交互状态;

NodeManager管理MapReduce运行时的Job;

基于HDFS的Job配置,jar包的分发;



下图所示是Hadoop2下基于YARN的MapReduce过程示意图:



重点地,MapReduce运行的核心是Map和Reduce,一个完整MapReduce程序执行主要经历:输入分片(input split)、映射(map)、结合(combiner)、洗牌(shuffle)、化简(reduce)几个阶段,详情按下不表。

Hadoop环境搭建

准备工作

本文Hadoop安装的一些准备信息(不限于此):

系统环境:Ubuntu 16.04 64bit.

Java环境:系统自带Java8(JDK-1.8).

Hadoop版本:Apache Hadoop 2.7.3.

安装过程

整个安装过程详情可参考:

Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04

官方教程 - Hadoop: Setting up a Single Node Cluster.

java、ssh

安装Hadoop首先要配置好java环境ssh登录支持,建议jdk1.7及以上版本java和免密码登录的ssh。java要配置好环境变量,ubuntu16.04自带ssh,可直接运行。

为了方便hadoop节点构建(包括权限冲突的规避),新建一个名为hadoop的新用户,执行下列命令即可:

sudo useradd -m hadoop -s /bin/bash  # 新建用户名为hadoop采用bash为shell
sudo passwd hadoop  # 设置新用户密码
sudo adduser hadoop sudo  # 为其添加root权限接入


于是我们可以进入hadoop用户继续环境搭建操作。

hadoop安装文件获取

可以直接从各路镜像网站(如华科开源镜像站的/apache/hadoop/common/)下载hadoop安装文件或带编译源文件(如
hadoop-2.7.3.tar.gz
)。由于文件的来源可能不稳定规范,为了验证文件数据完整性,还需要从Apache - 官方镜像的/hadoop/common/hadoop-2.7.3路径下下载.asc或.mds文件,这里我们选择
hadoop-2.7.3.tar.gz.mds
进行
MD5 hash
的验证。

下载好文件后,执行命令:

cat hadoop-2.7.3.tar.gz.mds | grep 'MD5' # 列出md5检验值
md5sum hadoop-2.7.3.tar.gz | tr "a-z" "A-Z" # 获取hadoop主文件md5检验值。


比较二者结果是否相同即可以判断文件是否完整,如下认证示意:



验证通过后,可直接解压到目标文件夹,并为hadoop用户配置读写权限,示意命令如下:

sudo tar -zxf hadoop-2.7.3.tar.gz -C /usr/local  # 这里解压到/usr/local中
cd /usr/local/
sudo mv ./hadoop-2.7.3/ ./hadoop  # 重命名方便后续使用
sudo chown -R hadoop ./hadoop  # 修改hadoop用户对该文件夹的权限


同时加入环境变量(可修改环境变量配置文件如~/.bashrc):

export HADOOP_HOME=/usr/local/hadoop
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native


单机模式

Hadoop默认为单机模式,所谓单机模式(Standalone),即是Hadoop本地运行,无节点间的交互,也无需HDFS的操作,一般用于测试MapReduce逻辑。为了更好的学习Hadoop,我们跳过该模式。

伪分布式模式

所谓伪分布式,是在单机条件下模拟分布式集群运行环境,它包括各种Java进程对不同Hadoop节点任务的模拟(如NameNode、DataNode和SourceManager、NodeManager等),以及和HDFS的交互。

这里的配置过程主要是hadoop文件目录下
./etc/hadoop/
中相关
.xml
文件中修改 configuration*片段的修改,给出如下(详细说明见参考):

基本配置:

core-site.xml

<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>


hdfs-site.xml

<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>


YARN配置:

mapred-site.xml

先是重命名:

mv ./etc/hadoop/mapred-site.xml.template ./etc/hadoop/mapred-site.xml


然后修改 configuration 片段:

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


yarn-site.xml

<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>


格式化NameNode,终端命令:

./bin/hdfs namenode -format


注意,这一步的结果应如下所示(注意画线处):



接着生成HDFS文件系统:

./bin/hdfs dfs -mkdir -p /user/hadoop  # 这里hadoop是用户名
./bin/hdfs dfs -mkdir input
./bin/hdfs dfs -put ./etc/hadoop/*.xml input


环境测试

经过上述配置过程之后,可通过
./bin/hdfs dfs -ls input
命令查看所生成的HDFS文件列表,通过
./sbin/start-dfs.sh
启动守护进程
NameNode
DataNode
,通过
./sbin/start-yarn.sh
启动守护进程
ResourceManager
NodeManager
(对应的停止命令将start改为stop),通过jps命令可查看当前hadoop进程如下图示:



停止YARN脚本的命令是:

./sbin/stop-yarn.sh
./sbin/mr-jobhistory-daemon.sh stop historyserver


Hadoop运行中,可通过 http://localhost:50070 查看NameNode、Datanode等节点信息,通过 http://localhost:8088/cluster 查看YARN上任务状态。

本文小结

搭建Hadoop环境为分布式并行任务开发创造了条件,接下来的工作将围绕基于Hadoop框架的数据挖掘研究展开。

参考

列出与本文内容紧密相关的参考源如下:

官网:Apache Hadoop 2.7.3

官网:Hadoop: Setting up a Single Node Cluster

博客教程:Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04

博客教程:hadoop 2.7.1安装和配置

学习资料:Hadoop学习资源集合
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息