1. Hadoop:环境搭建以及 MapReduce 程序运行

一、版本选择

在最初学习和使用 Hadoop 的时候,我直接选用了最新的2.8.1版本,之后安装了 Hive,此时整个系统还是可以正常运行的,但是当我安装 Sqoop 之后,问题出现了:在我使用 Sqoop 命令操作的时候,命令行会报错。
这是因为 Hadoop、Hive、Sqoop 中有一部分库不兼容,运行时会出现种种意外情况。针对这种情况,在学习 Hadoop 时,需要使用统一的版本,商业化的 CDH 正是其中之一,它将 Hadoop 生态圈的软件进行了整合,很多的企业也使用 CDH 版本的 Hadoop。
CDH 版本的下载连接:cloudera-CDH
下载 Hadoop 生态圈的软件时务必使用同一个版本。

二、Hadoop 的安装及配置

我此次选用的是 CDH5.3.6 版本,对应 Hadoop2.5.0,具体流程如下:

1. 下载解压

在 /opt 下创建 hadoop 文件夹并赋予其权限,这里为了方便,我直接赋予了777权限。

$ sudo mkdir hadoop
$ sudo chmod 777 hadoop/

下载 hadoop-2.5.0-cdh5.3.6.tar.gz 放入目录 /opt/hadoop 并解压。

$ tar -zxvf hadoop-2.5.0-cdh5.3.6.tar.gz

在 /opt/hadoop/ 下创建 temp 文件夹用于存放 HDFS 临时文件,之后会用到。

$ mkdir temp

2. 安装模式简介

Hadoop 一共有3种安装模式,分别为 Local Mode, Pseudo-Distributed Mode 及 Fully-Distributed Mode
Local Mode 为本地模式,用于 Mapreduce 程序的开发和测试。该模式下没有 HDFS 文件系统,处理的数据都存储在本地文件系统。该模式也没有 YARN 集群资源管理,程序都在 JVM 进程中运行。
Pseudo-Distributed Mode 为伪分布式模式,该模式下,HDFS 和 YARN 的所有服务进程都运行在一台机器。学习时一般使用一台电脑,因此一般都将 Hadoop 配置为伪分布式模式。
Fully-Distributed Mode 为完全分布式模式,一般为企业使用,如果有条件的话也可以使用多台机器进行配置。

3. HDFS 文件系统配置

配置文件在目录 /opt/hadoop/hadoop-2.5.0-cdh5.3.6/etc/hadoop 中

  1. 修改 core-site.xml,指定文件系统为 HDFS,并指定 NameNode 主节点所运行的机器和端口。这里 NameNode 为主机,端口为 9000。
<configuration>

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>

</configuration>
  1. core-site.xml 中指定 HDFS 文件系统的本地临时目录为 /opt/hadoop/temp,修改后的文件如下所示:
<configuration>

    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://localhost:9000</value>
    </property>

    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/temp</value>
    </property>

</configuration>
  1. 修改 hdfs-site.xml 文件,配置文件副本为 1。在 HDFS 中,文件以 block 形式存储,默认情况下,每个 block 最大为128M,每个 block 的副本为 3。同时每个 block 存储时都有一个 metadata 文件,用于检测 block 文件是否损坏。
    因为这里搭建的是伪分布式系统,所以要将文件副本设置为 1。
<configuration>

    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>

</configuration>
  1. 配置 slaves 文件,指明 DataNodes 节点的运行机器,此文件中一行代表一个主机。
    伪分布式模式下,该文件中只有一个 localhost。

此时 HDFS 文件系统已经配置完毕,需要对整个文件系统格式化,在 /opt/hadoop/hadoop-2.5.0-cdh5.3.6 目录下执行格式化命令。

$ bin/hdfs namenode -format

4. 启动 HDFS 中的服务

格式化成功后可以开始启动一系列服务进程:
主节点 namenode:

$ sbin/hadoop-daemon.sh start namenode

从节点 datanode:

$ sbin/hadoop-daemon.sh start datanode

全部启动成功之后可以用 jps 命令查看运行情况,正常如下:

正常运行截图.png

在 NameNode 中提供了 web 的 UI 监控界面,地址为 http://namenode:50070,点击 Utilities 下的 Browse the file system 即可看到文件目录的图形化界面,我们也可以通过一系列命令在 HDFS 文件系统中新建文件夹和上传文件。

在 HDFS 中创建目录,该目录为相对路径,相对于 /user/lister(你的用户名):

$ bin/hdfs dfs -mkdir -p conf/tmp

绝对路径下创建目录:

$ bin/hdfs dfs -mkdir -p /datas/test

上传文件,将 Linux 下的文件上传到 HDFS 文件系统中:

$ bin/hdfs dfs -put /opt/test_input/ datas/test

读取文件:

$ bin/hdfs dfs -text /datas/test/test_input

删除文件:

$ bin/hdfs dfs -rm -r /datas/test/test_input

5. 启动 YARN 集群资源管理

YARN 用于管理整个集群的资源,ResourceManager 是主节点,它处理客户端请求并监控 NodeManager,它也负责资源的分配与调度。NodeManager 是从节点,它负责单个结点上的资源管理并处理来自 ResourceManager 的命令。

  1. 配置 yarn-site.xml 文件,指定 ResourceManager 运行的主机,并配置 MapReduce 运行在 YARN 上。
<configuration>

    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>localhost</value>
    </property>

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

</configuration>
  1. 启动 YARN
    启动主节点:

$ sbin/yarn-daemon.sh start resourcemanager

启动从节点:

$ sbin/yarn-daemon.sh start nodemanager

  1. 运行 Hadoop 自带的 MapReduce 程序
    我们都知道 Hadoop 是依赖 MapReduce 来运行的,该框架下最经典的莫过于 WordCount 程序,虽然这个程序只是一个词频统计,但是在超大数据量下,它的效率非同一般。接下来就来测试一下这个官方给出的 MapReduce 程序吧。

首先准备一个文本文件,单词之间以空格分隔,内容如下所示,并上传到 HDFS 中的 /datas/test/mapred/example1 目录下。

a a b c f g
a hadoop spark lister
hadoop b c lister spark
hive a a b b c c
hive hadoop

上传到该目录后:
上传文件到 HDFS.png

在命令行中运行:

$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar wordcount /datas/test/mapred/example1 /datas/test/mapred/result

该命令使用 hadoop-mapreduce-examples-2.5.0-cdh5.3.6.jar 中的 wordcount 类,这里需要传入两个参数,/datas/test/mapred/example1 为输入的目录,目录中可以包含多个文件,/datas/test/mapred/result 为输出路径。

成功运行该命令后,打开 /datas/test/mapred/result 目录,发现里面文件如下:
输出结果目录.png

很显然 _SUCCESS 是运行成功的日志文件,part-r-00000 是结果文件,文件名中的 r 代表这是 reduce 的输出。因为之前运行的程序只有一个 reduce,所以结果集中只有一个文件。

使用命令读取该文件,part* 表示匹配所有 part 开头的文件

$ bin/hdfs dfs -text /datas/test/mapred/result/part*

结果如下:

a   5
b   4
c   4
f   1
g   1
hadoop  3
hive    2
lister  2
spark   2

发现词频统计的结果正确,当然也可以将 HDFS 中的结果文件下载到 Linux 系统中查看。

在默认情况下,该程序运行在本地,如果需要运行在 YARN 上,需要配置 mapred-site.xml,如果目录下没有该配置文件则将 mapred-site.xml.template 改为 mapred-site.xml

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

</configuration>

再次运行该程序会发现,终端的日志上会显示 map 任务和 reduce 任务的运行情况。

6. 关于 SecondaryNameNode

当你看到 SecondaryNameNode 这个名字,第一反应是不是觉得它是 NameNode 的“备胎”?其实并不是,关于这个,需要从 NameNode 的加载说起。
在第一次启动 NameNode 之前,需要格式化文件系统,以此生成文件系统的元数据,初始元数据为 fsimage,它记录了文件块储存的一系列信息。
NameNode 的作用是什么呢?NameNode 启动之后,所有的 DataNode 也会启动,并去连接 NameNode,告知 NameNode 它存储的 block 信息。因此 NameNode 会接收到 DataNodes 发送的块信息并将其加载到内存中,方便用户对 DataNode 中文件块的快速读写,如果用户有对 HDFS 文件块的操作,则会被记录到 edits 文件中。
如果 HDFS 停止运行(比如宕机)后再次启动,需要先加载 faimage 再加载 edits 文件,这种情况下的加载很慢,当 edits 文件特别庞大时,可能需要数个小时进行加载,非常耗费时间。
而 SecondaryNameNode 则会在 HDFS 运行时在后台将最新的 fsimage 文件和 edits 文件合并成一个新的 fsimage 文件并存储。这样 HDFS 如果停止再启动,只需要加载 faimage 文件即可。

在 hdfs-site.xml 进行启动 SecondaryNameNode 的配置:

<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>localhost:50090</value>
</property>

启动 SecondaryNameNode:

$ sbin/hadoop-daemon.sh start secondarynamenode

三、总结

本篇博文介绍了 Hadoop 的安装以及 HDFS 的基本运行,并且在 YARN 上运行了 MapReduce 程序。
在之后的博文中会介绍编程操作 HDFS 文件系统、 MapReduce 程序的运行原理以及如何编写 MapReduce 程序。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 204,684评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,143评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,214评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,788评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,796评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,665评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,027评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,679评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 41,346评论 1 299
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,664评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,766评论 1 331
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,412评论 4 321
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,015评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,974评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,203评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,073评论 2 350
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,501评论 2 343

推荐阅读更多精彩内容