Hadoop(二)---环境搭建

1. 分类

Hadoop的运行模式包含三种,如下:

  • 本地模式;
  • 伪分布式模式;
  • 完全分布式模式。

针对这3种模式,分别介绍一下遵循这些模式要如何搭建hadoop的运行坏境。本教程的安装均基于vmware + CentOS

2. 本地模式

2.1 虚机环境准备

  1. 创建用户组
groupadd bigdata
  1. 创建hadoop用户(用户名可以随意取),并设置密码
useradd hadoop -g bigdata
passwd hadoop
  1. 给hadoop添加root权限
修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:
 
## Allow root to run any commands anywhere
root    ALL=(ALL)     ALL
hadoop   ALL=(ALL)     ALL
修改完毕,现在可以用hadoop帐号登录,然后用命令 sudo ,即可获得root权限进行操作。
  1. 在/opt目录下创建module和software文件夹,并将这两个文件夹的所有者改成hadoop
----当前用户为hadoop
cd /opt
sudo mkdir module       -- 存放解压后的软件包 
sudo mkdir software     -- 存放下载的软件包
sudo chown hadoop:bigdata module
sudo chown hadoop:bigdata software

2.2 安装JDK

在安装Hadoop之前需要,先安装JDK。关于JDK如何安装,请参考:这里

另外,Hadoop 2.7及之后的版本要求至少安装JDK 7,更多请参考Hadoop-JavaVersions

2.3 安装Hadoop

  1. 将Hadoop的tar包下载到/opt/software中
[hadoop@zgc software]$ wget http://mirror.bit.edu.cn/apache/hadoop/common/hadoop-2.7.7/hadoop-2.7.7.tar.gz
  1. 解压,指定解压到/opt/module目录中
[hadoop@zgc software]$ tar -xzvf hadoop-2.7.7.tar.gz -C /opt/module/
解压后的hadoop
  1. 将Hadoop添加到环境变量中

打开/etc/profile文件,在尾部添加以下内容

# Hadoop
export HADOOP_HOME=/opt/module/hadoop-2.7.7
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin

执行source /etc/profile指令让环境立即生效。

  1. 验证Hadoop安装结果
[hadoop@zgc module]$ hadoop version
Hadoop 2.7.7
Subversion Unknown -r c1aad84bd27cd79c3d1a7dd58202a8c3ee1ed3ac
Compiled by stevel on 2018-07-18T22:47Z
Compiled with protoc 2.5.0
From source with checksum 792e15d20b12c74bd6f19a1fb886490
This command was run using /opt/module/hadoop-2.7.7/share/hadoop/common/hadoop-common-2.7.7.jar

2.4 Hadoop目录结构

hadoop目录结构

(1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本
(2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件
(3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能)
(4)sbin目录:存放启动或停止Hadoop相关服务的脚本
(5)share目录:存放Hadoop的依赖jar包、文档、和官方案例

2.5 运行官方WordCount案例

至此,不用再做任何操作,我们可以运行官方的MapReduce示例程序WordCount

3. 伪分布式

可分为HDFS和YARN的配置搭建

3.1 HDFS集群配置

一共需要配置3个文件:hadoop-env.sh、core-site.xml、hdfs-site.xml,这3个文件都位于{hadoop_home}/etc/hadoop/目录下。

  1. 配置 hadoop-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_131

该文件中有这一项配置,不过原始配置中JDK的路径不对,需要替换成实际路径。

  1. 配置 core-site.xml
<configuration>
    <!-- 指定HDFS中NameNode的地址 -->
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hadoop01:9000</value>
    </property>

    <!-- 指定Hadoop运行时产生文件的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/module/hadoop-2.7.7/data/tmp</value>
    </property>
</configuration>
  1. 配置 hdfs-site.xml
<!-- 指定HDFS副本的数量 -->
<property>
   <name>dfs.replication</name>
   <value>1</value>
</property>

3.2 启动集群

  1. 如果是第一次启动的话需要先格式化NameNode
[hadoop@hadoop01 bin]$ hdfs namenode -format

格式化NameNode的过程中会创建hadoop.tmp.dir配置的目录,另外需要注意:

格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到以往数据。所以,格式NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode。

  1. 启动NameNode和DataNode
[hadoop@hadoop01 hadoop-2.7.7]$ sbin/hadoop-daemon.sh start namenode
starting namenode, logging to /opt/module/hadoop-2.7.7/logs/hadoop-hadoop-namenode-hadoop01.out

[hadoop@hadoop01 hadoop-2.7.7]$ sbin/hadoop-daemon.sh start datanode
starting datanode, logging to /opt/module/hadoop-2.7.7/logs/hadoop-hadoop-datanode-hadoop01.out

[hadoop@hadoop01 hadoop-2.7.7]$ jps
2582 NameNode
2756 Jps
2684 DataNode

关闭服务

./hadoop-daemon.sh stop namenode
./hadoop-daemon.sh stop datanode

另外还可以通过start-dfs.shstop-dfs.sh直接对hdfs中的namenode\datenode\ secondarynamenode三个节点进行开启和关闭。

  1. 浏览器访问 http://192.168.2.101:50070/dfshealth.htm 查看hdfs文件系统。

3.3 YARN配置

  1. 配置yarn-env.sh,指定jdk路径
export JAVA_HOME=/usr/java/jdk1.8.0_131
  1. 配置yarn-site.xml
<!-- Reducer获取数据的方式 -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop01</value>
</property>
  1. 配置mapred-env.sh
export JAVA_HOME=/usr/java/jdk1.8.0_131
  1. 对mapred-site.xml.template重新命名为mapred-site.xml,并添加以下配置
<!-- 指定MR运行在YARN上 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>

3.4 启动和检查集群

启动ResourceManager

yarn-daemon.sh start resourcemanager

启动NodeManager

yarn-daemon.sh start nodemanager

启动完成之后,通过web端查看YARN
http://hadoop01:8088/cluster

单机和伪分布式有什么区别?

相同点:它们都是运行在单台机器上.

差异:单机模式没有分布式文件系统,它直接读写本地操作系统的文件系统,该模式主要用于开发调试MapReduce。单机模式不对配置文件进行修改,它不会启动NameNode、DataNode等守护进程;

伪分布式模式在一台机器上运行不同的进程来模拟各类守护节点(NameNode、DataNode等)。在这种模式下,Hadoop会使用hdfs,另外它还需要修改相关配置文件。

4. 完全分布式

我们来搭建一个由3个节点组成的Hadoop集群,节点规划如下:

hadoop01
(192.168.2.101)
hadoop02
(192.168.2.102)
hadoop03
(192.168.2.103)
HDFS NameNode
DataNode
DataNode SecondaryNameNode
DataNode
YARN NodeManager ResourceManager
NodeManager
NodeManager

4.1 集群配置

  1. 核心配置文件

配置core-site.xml,在该文件中编写如下配置:

<!-- 指定HDFS中NameNode的地址 -->
<property>
    <name>fs.defaultFS</name>
    <value>hdfs://hadoop01:9000</value>
</property>

<!-- 指定Hadoop运行时产生文件的存储目录 -->
<property>
    <name>hadoop.tmp.dir</name>
    <value>/opt/module/hadoop-2.7.7/data/tmp</value>
</property>
  1. HDFS配置文件

配置hadoop-env.sh文件,在其中指定jdk的路径

export JAVA_HOME=/usr/java/jdk1.8.0_131

配置hdfs-site.xml,在该文件中写入如下配置:

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

<!-- 指定Hadoop辅助名称节点主机配置 -->
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>hadoop03:50090</value>
</property>
  1. YARN配置文件

配置yarn-env.sh,指定jdk的路径

export JAVA_HOME=/usr/java/jdk1.8.0_131

配置yarn-site.xml,在该文件中增加如下配置:

<!-- Reducer获取数据的方式 -->
<property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
</property>

<!-- 指定YARN的ResourceManager的地址 -->
<property>
    <name>yarn.resourcemanager.hostname</name>
    <value>hadoop02</value>
</property>
  1. MapReduce配置文件

配置mapred-env.sh,指定jdk路径

export JAVA_HOME=/usr/java/jdk1.8.0_131

配置mapred-site.xml文件,增加如下配置:

<!-- 指定MR运行在Yarn上 -->
<property>
    <name>mapreduce.framework.name</name>
    <value>yarn</value>
</property>
  1. 配置slaves文件

slaves文件是用来指定集群中的节点信息,它的完整路径是:/opt/module/hadoop-2.7.7/etc/hadoop/slaves。将该文件修改成:

hadoop01
hadoop02
hadoop03

注意:slaves文件中不允许出现空格和空行!

4.2 集群的分发

上面的操作是在集群中某一台机器hadoop01上完成配置的,之后可以将配置好的hadoop目录拷贝到其他机器(hadoop02、hadoop03),可以通过scp指令进行远程拷贝。拷贝完成之后,hadoop02和hadoop03不用做任何变更。

补充说明:

  1. vi /etc/hostname 修改hostname;
  2. 集群之间的机器要关闭防火墙;(重要的环境不可直接关闭,要配置防火墙的访问策略。)
  3. 集群间的各个节点需要配置/etc/hosts文件,增加各个节点域名和ip的隐射;
  4. 在各个节点上的/etc/profile文件中配置hadoop-home的环境变量。

4.3 集群启动

1.如果是第一次启动需要先格式化NameNode。

hdfs namenode -format

注意格式化之前,一定要先停止上次启动的所有namenode和datanode进程,然后再删除hadoop目录下的data和log数据(如果存在的话)。

  1. 启动hdfs

集群配置中,我们指定了hadoop01上运行namenode,所以需在hadoop01节点上启动hdfs

[hadoop@hadoop01 hadoop-2.7.7]$ start-dfs.sh

启动完成之后,在各个节点上执行jps,查看进程运行情况如下:

[hadoop@hadoop01 hadoop-2.7.7]$ jps
4166 NameNode
4482 Jps
4263 DataNode
[hadoop@hadoop02 hadoop-2.7.7]$ jps
3218 DataNode
3288 Jps
[hadoop@hadoop03 hadoop-2.7.7]$ jps
3221 DataNode
3283 SecondaryNameNode
3364 Jps

可以看到和上面我们的节点规划情况一致。

  1. 启动yarn

在ResouceManager所在的机器上启动YARN,这里我们在hadoop02节点上启动YARN

[hadoop@hadoop02 hadoop-2.7.7]$ start-yarn.sh

4.4 集群验证

1.web端查看HDFS文件系统
http://hadoop01:50070/dfshealth.html#tab-overview
2.web端查看YARN
http://hadoop02:8088/cluster
3.web端查看SeconddaryNameNode
http://hadoop03:50090/status.html
4.hdfs基本操作
hdfs dfs -mkdir -p /usr/hadoop/input

5. 配置文件说明

Hadoop配置文件分为两类:默认配置文件和自定义配置文件,用户想修改某个默认的配置值时,可以通过自定义配置文件更改相应的属性值。

  1. 默认配置文件
要获取的默认文件 文件存放在Hadoop的jar包中的位置
core-default.xml hadoop-common-2.7.7.jar/ core-default.xml
hdfs-default.xml hadoop-hdfs-2.7.7.jar/ hdfs-default.xml
yarn-default.xml hadoop-yarn-common-2.7.7.jar/ yarn-default.xml
mapred-default.xml hadoop-mapreduce-client-core-2.7.7.jar/ mapred-default.xml
  1. 自定义配置文件

core-site.xml、hdfs-site.xml、yarn-site.xml、mapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

各配置文件中配置项的说明请参考:core-default.xmlhdfs-default.xmlmapred-default.xmlyarn-default.xml

6. 服务启动/停止方式

6.1 各个服务逐一启动/停止

  1. 启动HDFS组件
hadoop-daemon.sh start namenode
hadoop-daemon.sh start datanode
hadoop-daemon.sh start secondarynamenode
  1. 停止HDFS组件
hadoop-daemon.sh stop namenode
hadoop-daemon.sh stop datanode
hadoop-daemon.sh stop secondarynamenode
  1. 启动YARN
yarn-daemon.sh start resourcemanager
yarn-daemon.sh start nodemanager
  1. 停止YARN
yarn-daemon.sh stop resourcemanager
yarn-daemon.sh stop nodemanager

6.2 集群整体启动/停止

  1. 整体启动/停止HDFS
start-dfs.sh / stop-dfs.sh
  1. 整体启动/停止YARN
start-yarn.sh / stop-yarn.sh

7. 免密登录

我们使用ssh登录一台主机时,需要提供用户名和密码。有时候我们不想在自己的几台主机之间输入密码,就可以配置免密登录。

7.1 免密登录原理

7.2 免密登录配置

哪个用户需要从哪台服务器上秘密登录到其他机器上,就使用该用户在该服务器上进行配置。假设,hadoop01主机上的hadoop用户想免密登录到hadoop02、hadoop03。

  1. 生成公钥和私钥
生产密钥对

等待输入的地方可以直接回车

  1. 将公钥拷贝到要免密登录的目标机器上
[hadoop@hadoop01 hadoop]$ ssh-copy-id hadoop01  #ssh到自身,默认情况下也需要密码
[hadoop@hadoop01 hadoop]$ ssh-copy-id hadoop02
[hadoop@hadoop01 hadoop]$ ssh-copy-id hadoop03

执行完之后,就可以进行免密登录了,同时在/home/hadoop/.ssh/下可以看到几个文件

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

推荐阅读更多精彩内容