软件版本
- 虚拟机管理软件: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免密登录
- 在node1上执行:ssh-keygen -t rsa (四个回车),生成公钥和私钥
- 将公钥拷贝到要免密登陆的目标节点上
-- 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/server:hadoop-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
export HADOOP_LOG_DIR=/export/data/hadoop/log
export HADOOP_NAMENODE_OPTS="-Xms1024m -Xmx1024m -XX:+UseParallelGC"
export HADOOP_DATANODE_OPTS="-Xms1024m -Xmx1024m"
解释: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