Hadoop2.7.4完全分布式环境搭建

软件版本

  • 虚拟机管理软件:VMware WorkStation Pro 12.0
  • 操作系统:CentOS 6.7
  • Hadoop:Hadoop 2.7.4
  • JDK:jdk-8u65-linux-x64.tar.gz

一、环境准备

1、 修改各个节点主机名:vi /etc/sysconfig/network

NETWORKING=yes
HOSTNAME=node1

2、修改主机名和IP的映射关系:vi /etc/hosts

192.168.66.201 node1
192.168.66.202 node2
192.168.66.203 node3

3、设置ssh免密登录

  1. 在node1上执行:ssh-keygen -t rsa  (四个回车),生成公钥和私钥
  2. 将公钥拷贝到要免密登陆的目标节点上

     --    ssh-copy-id node2

     --    ssh-copy-id node3

注意:生成的密钥在目录:/root/.ssh

4、查看防火墙状态(必须处于关闭状态)

查看防火墙状态:service iptables status

关闭防火墙:service iptables stop

查看防火墙开机启动状态 :chkconfig iptables --list

关闭防火墙开机启动 chkconfig iptables off

5、JDK 环境安装

a、递归创建目录

  • mkdir -p /export/server
  • mkdir -p /export/data

b、上传jdk安装包:jdk-8u65-linux-x64.tar.gz

c、tar -zxvf jdk-8u65-linux-x64.tar.gz -C /export/server/

d、配置环境变量:vi /etc/profile

export JAVA_HOME=/export/server/jdk1.8.0_65 
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

e、刷新配置文件:source /etc/profile(暂时可不操作)

6、系统时间同步(两种方式)

第一种:手动同步

a、安装ntp服务器:yum -y install ntpdate

b、各节点执行:ntpdate cn.pool.ntp.org

第二种:使用NameNode当作服务器

a、安装ntp服务器:yum -y install ntpdate

b、在node1上与网络服务器同步:ntpdate cn.pool.ntp.org

c、DateName节点上开启ntp服务:service ntpd start

d、各节点同步Namenode服务器时间:ntpdate node1

二、Hadoop 集群安装

提示:hadoop的核心配置文件,有默认的配置文件core-default.xml、hdfs-default.xml、mapred-default.xml、yarn-default.xml
core-default.xml,且与对应在目录/export/server/hadoop-2.7.4/etc/hadoop下的配置文件功能相同,但是目录/export/server/hadoop-2.7.4/etc/hadoop下的配置文件配置的属性优先级更高,Hadoop集群启动时优先读取,如果在core-site.xml里没有配置属性,则自动读取默认配置文件里的属性的值。

1、安装Hadoop

a、上传Hadoop安装包到/export/serverhadoop-2.7.4-with-centos-6.7.tar.gz

b、当前目录解压:tar -zxvf hadoop-2.7.4-with-centos-6.7.tar.gz

hadoop-2.7.4-with-centos-6.7.tar.gz解压后目录结构如下:

bin:Hadoop 最基本的管理脚本和使用脚本的目录,这些脚本是 sbin 目录下管理脚本的基础实现,用户可以直接使用这些脚本管理和使用Hadoop
etc:Hadoop配置文件所在的目录,包括core-site,xml、hdfs-site.xml、 mapred-site.xml 等从 Hadoop1.0 继承而来的配置文件和 yarn-site.xml 等 Hadoop2.0新增的配置文件
include:对外提供的编程库头文件(具体动态库和静态库在lib目录中),这些头文件均是用C++定义的,通常用于C++程序访问HDFS或者编写MapReduce 程序
lib:该目录包含了Hadoop对外提供的编程动态库和静态库,与include目录中的头文件结合使用
libexec:各个服务对用的shell配置文件所在的目录,可用于配置日志输出、启动参数(比如JVM参数)等基本信息
sbin:Hadoop管理脚本所在的目录,主要包含HDFS和YARN中各类服务的启动/关闭脚本
share:Hadoop各个模块编译后的jar包所在的目录

2、Hadoop 配置文件修改

a、vi hadoop-env.sh

export JAVA_HOME=/export/server/jdk1.8.0_65

解释:Hadoop运行时依赖JDK的环境,JAVA_HOME是必须设置的。且需要在配置文件hadoop-env.sh中指定JDK安装目录,因为Hadoop 即使是在本机上执行,它也是把当前的执行环境当成远程服务器,也就是说之前系统环境变量对Haddop来说时无效的。

b、vi core-site.xml

<!-- 用于设置 Hadoop 的文件系统,由 URI 指定 --> 
<property> 
    <name>fs.defaultFS</name> 
    <value>hdfs://node1:9000</value> 
</property> 
<!-- 配置 Hadoop 的临时目录,默认/export/data/hadoop-${user.name} --> 
<property> 
    <name>hadoop.tmp.dir</name> 
    <value>/export/data/hadoop</value> 
</property> 

c、vi hdfs-site.xml

<!-- 指定 HDFS 副本的数量 --> 
<property>
    <name>dfs.replication</name>
    <value>2</value>
</property>
<!-- secondary namenode 所在主机的 ip 和端口--> 
<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>192.168.66.202:50090</value>
</property>

d、vi mapred-site.xml

第一步:cp mapred-site.xml.template mapred-site.xml

第二步:vi mapred-site.xml

<!-- 指定 mr 运行时框架,这里指定在 yarn 上,默认是 local --> 
<property> 
    <name>mapreduce.framework.name</name> 
    <value>yarn</value> 
</property> 

解释:目录/export/server/hadoop-2.7.4/etc/hadoop没有mapred-site.xml,但提供了一个mapred-site.xml.template,因此只需要拷贝一份模板配置文件,并修改成mapred-site.xml即可。

e、vi yarn-site.xml

<!-- 指定 YARN 的老大(ResourceManager)的地址 --> 
<property> 
    <name>yarn.resourcemanager.hostname</name> 
    <value>node1</value> 
</property> 
<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce 程序默认值:"" --> 
<property> 
    <name>yarn.nodemanager.aux-services</name> 
    <value>mapreduce_shuffle</value> 
</property> 

f、vi slaves

node1
node2
node3

slaves文件里面记录的是集群主机名,一般有以下两种作用:

第一种:配合一键启动脚本如start-dfs.sh、stop-yarn.sh用来进行集群启动。这时候slaves文件里面的主机标记的就是从节点角色所在的机器。

第二种:可以配合hdfs-site.xml里面dfs.hosts属性形成一种白名单机制,配置如下:

<property> 
<!-- dfs.hosts指定一个文件 -->
    <name> dfs.hosts </name> 
<!-- 必须指定文件的完整路径名允许连接到NameNode的主机列表,如果值为空,则允许所有主机 -->
    <value> /export/server/hadoop-2.7.4/etc/hadoop/slaves </value> 
</property>

g、Hadoop 环境变量

配置环境变量:vi /etc/profile

export HADOOP_HOME=/export/server/hadoop-2.7.4
export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin

刷新配置文件: source /etc/profile(暂时可不操作)

h、拷贝Hadoop 解压包及系统配置文件profile到其他节点所在主机,即node2、node3

scp –r /export/server/hadoop-2.7.4 root@node2:/export/server

scp –r /export/server/hadoop-2.7.4 root@node3:/export/server

scp –r /etc/profile root@node2:/etc

scp –r /etc/profile root@node3:/etc

各节点所在主机刷新配置文件:source /etc/profile(必须操作)

三、Hadoop 集群启动

首次启动HDFS时,必须对其进行格式化操作。本质上是一些清理和准备工作,因为此时的HDFS在物理上还是不存在的

格式化命令:hdfs namenode –format(hadoop namenode –format已过时)

1、单节点逐个启动

主节点上启动HDFS NameNode:hadoop-daemon.sh start namenode

各从节点上启动HDFS DataNode:hadoop-daemon.sh start datanode

主节点上启动YARN ResourceManager:yarn-daemon.sh  start resourcemanager

各从节点上启动YARN nodemanager:yarn-daemon.sh start nodemanager

提示:$HADOOP_PREFIX/sbin/目录下。如果想要停止某个节点上某个角色,只需要把命令中的start改为stop即可

2、脚本一键启动

启动HDFS集群:$HADOOP_PREFIX/sbin/start-dfs.sh

启动YARN集群: $HADOOP_PREFIX/sbin/start-yarn.sh

同时启动HDFS、YARN集群:$HADOOP_PREFIX/sbin/stop-yarn.sh(不推荐,仍可使用)

停止HDFS集群:$HADOOP_PREFIX/sbin/stop-dfs.sh、stop-yarn.sh

停止YARN集群:$HADOOP_PREFIX/sbin/stop-yarn.sh

过时的脚本:stop-all.sh(不可使用)

3、访问集群 web-ui

一旦Hadoop集群启动并运行,可以通过web-ui进行集群查看,如下所述:

NameNode http://nn_host:port/ 默认50070

访问URL:http:node1:50070或者http:192.169.66.201:50070

ResourceManager http://rm_host:port/ 默认 8088

访问URL:http:node1:8088或者http:192.169.66.201:8088

提示:需要配置本地主机名和IP的映射关系,才能使用NameNode http://nn_host:port/ 形式访问

192.168.66.201 node1
192.168.66.202 node2
192.168.66.203 node3

提示:使用命令验证集群是否正常启动:jps,需要关注各节点的职责、身份

<!-- 这是主节点namenode的状态信息 -->
27408 NameNode
28218 Jps
27643 SecondaryNameNode
28066 NodeManager
27803 ResourceManager
27512 DataNode

 

四、操作HDFS常用的Shell命令介绍

1、显示文件、目录信息:ls

用法:hadoop fs -ls [-d] [-h] [-R] <args>

-d:目录列为纯文件

-h:以人类可读的方式格式化文件大小

-R:递归列出遇到的子目录

例子:hadoop fs -ls -R /user/hive/warehouse/

2、创建目录:mkdir

用法:hadoop fs -mkdir [-p] <paths>

-p:递归创建目录

例子:hadoop fs -mkdir /user/hadoop/dir1

3、上传文件:put

功能:将单个src或多个srcs从本地文件系统复制到目标文件系统

用法:hadoop fs -put [-f] [-p]  <localsrc1> [ localsrc2. ]

-p:保留访问和修改时间,所有权和权限。(假设权限可以跨文件系统传播)

-f:覆盖目标(如果已存在)

例子:

  • hadoop fs -put localfile /user/hadoop/hadoopfile
  • hadoop fs -D dfs.replication=1 -put localfile /user/hadoop/hadoopfile        上传文件的同时指定副本数为1

4、下载文件:get

功能:将文件复制到本地文件系统

用法:hadoop fs -get  [-p]  <src> <localdst>

-p:保留访问和修改时间,所有权和权限。(假设权限可以跨文件系统传播)
-f:覆盖目标(如果已存在)

例子:hadoop fs -get hdfs://node1:9000/wordcount/input/wordcount.log

注意:hadoop fs -get hdfs://node1:9000/wordcount/input/ wordcount.log  这种形式是先创建wordcount.log目录,再将wordcount.log文件上传到wordcount.log目录下

5、追加文件内容:-appendToFile

功能:将单个src或多个srcs从本地文件系统附加到目标文件系统的末尾

用法:hadoop fs -appendToFile <localsrc> ... <dst>

例子:hadoop fs -appendToFile localfile1 localfile2 /user/hadoop/hadoopfile

6、查看文件内容:cat

功能:显示文件内容到stdout

用法:hadoop fs -cat URI [URI ...]

例子:hadoop fs -cat localfile /user/hadoop/hadoopfile

7、跟追日志:tail

功能:显示文件的最后一千字节到stdout

用法:hadoop fs -tail [-f] URI

-f:持续输出文件增加的数据信息

例子:hadoop fs -tail /hadoop/hadoopfile

8、拷贝文件到本地:copyToLocal

功能:复制HDFS系统文件到本地文件系统中,与get命令类似,但目标只能是本地文件

用法:hadoop fs -copyToLocal [-ignorecrc] [-crc] URI <localdst>

例子:hadoop fs -copyToLocal /dim_time_dat.txt /root/data/

9、拷贝文件到HDFS:copyFromLocal

功能:复制本地系统文件到HDFS文件系统中,与put命令类似,但源文件只能是本地文件

用法:hadoop fs -copyFromLocal <localsrc> URI

-p:保留访问和修改时间,所有权和权限。(假设权限可以跨文件系统传播)
-f:覆盖目标(如果已存在)

例子:hadoop fs -copyFromLocal -f dim_time_dat.txt /

10、拷贝文件(同系统中):cp

功能:将文件从源复制到目标。此命令也允许多个源,在这种情况下,目标必须是目录

用法:hadoop fs -cp [-f] [-p | -p URI [URI ...] <dest>

-p:如果目标已存在,则-f选项将覆盖目标

例子:hadoop fs -cp -f /dim_time_dat.txt /

11、合并文件:getmerge

功能:合并下载多个文件

用法:hadoop fs -getmerge [-nl] <src> <localdst>

例子:hadoop fs -getmerge -nl /a.txt /b.txt /c.txt

12、删除文件、目录:rm

功能:删除指定的文件。只删除非空目录和文件。

用法:hadoop fs -rm [-f] [-r | -R] [-skipTrash] URI [URI ...]

-r:选项以递归方式删除目录及其下的任何内容

例子:hadoop fs -rm -r /a.txt /b.txt /c.txt

13、修改HDFS文件的副本数:setrep

功能:改变一个文件的副本系数;如果path是目录,则命令以递归方式更改以path为根的目录树下的所有文件的复制因子

用法:hadoop fs -setrep [-R] [-w] <numReplicas> <path>

-w:标志请求命令等待复制完成。这可能需要很长时间

-R :选项用于递归改变目录下所有文件的副本系数

例子:hadoop fs -setrep -w 3 /dim_time_dat.txt

hadoop fsck -locations:查看当前hdfs的副本数

14、查看HDFS文件系统可用空间:df

用法:hadoop fs -df [-h] URI [URI ...]

例子:hadoop  fs  -df  -h  /

15、显示文件大小:du 

用法:hadoop fs -du [-s] [-h] URI [URI ...]

-s选项将导致显示文件长度的汇总摘要,而不是单个文件。
-h选项将以“人类可读”的方式格式化文件大小(例如64.0m而不是67108864)

例子:hadoop fs -du -s /dim_time_dat.txt

五:格式化HDFS文件系统

前提条件:关闭HDFS集群、YARN集群(否则格式化不成功)

1、删除所有节点的数据目录

rm -rf /export/data/hadoop

2、删除所有节点的日志文件

rm -rf /export/server/hadoop-2.7.4/logs/*

3、在node1节点上,重新格式化

hdfs namenode -format

 

 

 

展开阅读全文

没有更多推荐了,返回首页