hadoop环境搭建

一、平台环境

CentOS6.5

二、软件版本

hadoop-2.8.1下载地址
jdk-8u45-linux-x64下载地址
apache-maven-3.3.9软件下载

三、内容目录

  1. 前置内容
    1.1 jdk安装和配置
    1.2 maven安装和配置
    1.3 hadoop 编译
  2. 相关知识
    2.1 hadoop部署方式介绍
    2.2 hadoop主要组件介绍
    2.3 hadoop主要进程介绍
    2.4 jps命令介绍
  3. 环境搭建
    3.1 Hadoop本地模式安部署
    3.2 Hadoop伪分布式模式部署

1、前置内容

1.1 jdk安装和配置

    之前的文章已经完成过这一步骤,详情请见CentOS6.5安装JDK8

1.2 maven安装和配置

    之前的文章已经完成过这一步骤,详情请见CentOS6.5安装Maven

1.3 hadoop 编译

    hadoop编译并发必要步骤,只是一个熟悉把源码编译成可用的工具包操作的过程。可以直接在官网下载已经编译好的包跳过此步骤。
    如果对此步骤感兴趣可以参考hadoop-2.8.1编译

2、相关知识

2.1 hadoop部署方式介绍

    Hadoop部署模式有:本地模式、伪分布模式、完全分布式模式、HA完全分布式模式。区分的依据是NameNode、DataNode、SecondaryNameNode、ResourceManager、NodeManager等模块运行在几个JVM进程、几个机器。参考下面表格:

模式名称 各个模块占用的JVM进程数 各个模块运行在几个机器数上
本地模式 1个 1个
伪分布模式 N个 1个
完全分布式模式 N个 N个
HA完全分布式模式 N个 N个
2.2 hadoop主要组件介绍

    hadoop主要组件:HDFS、MapReduce、Yarn。

HDFS( Hadoop Distributed File System):hadoop自带的分布式文件系统,是hadoop数据存储基础。

MapReduce:一套从海量源数据提取分析元素最后返回结果集的编程模型(分布式计算,无进程)。

Yarn(Yet Another Resource Negotiator):通用的资源管理平台,可为各类计算框架提供资源的管理和调度。

此处只对三个组件功能进行简单说明,后续会通过文章对三个组件进行详细说明。注意:Yarn是Hadoop2.x才出MapReduce功能模块中拆出来的。

2.3 hadoop主要进程介绍

    hadoop主要进程分为:HDFS相关进程、Yarn相关进程。下面将分别罗列两者的进程。

  • HDFS相关进程:
    • NameNode NameNode就是HDFS的Master架构,主要负责HDFS文件系统的管理工作
    • DataNode DataNode就是负责存储数据的组件
    • SecondaryNameNode 是定时对NameNode的数据snapshots进行备份,这样可尽量降低NameNode崩溃之后导致数据丢失的风险
  • Yarn
    • ResourceManager 负责协调集群上计算资源的分配。调度、启动每一个 Job 所属的 ApplicationMaster、另外监控 ApplicationMaster 的存在情况
    • NodeManager 根据要求启动和监视集群中机器的计算容器container,负责 Container 状态的维护,并向 RM 保持心跳汇报该节点资源使用情况。
2.4 jps命令介绍

   请参考jps命令原理

3、环境搭建

    学习到这里仅仅尝试了本地模式和伪分布式部署。其他模式的部署待后续学习过程慢慢补充。

3.1 Hadoop本地模式部署

   本地模式部署比较简单,不需要修改任何配置文件,简单说明一下步骤:

  1. 创建一个存放本地模式hadoop的目录
[hadoop@hadoop002 software]$ mkdir /opt/software
  1. 文件上传并解压hadoop文件
[hadoop@hadoop002 software]$ tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz 
  1. 确保JAVA_HOME环境变量已经配置好
[hadoop@hadoop002 software]$ echo $JAVA_HOME
  1. 运行MapReduce程序,验证
       hadoop自带的wordcount例子来在本地模式下测试跑mapreduce。
    4.1. 准备mapreduce输入文件teddy.input
[hadoop@hadoop002 software]$ cat /opt/data/teddy.input
hadoop mysql hive
spark oracle storm
mysql hive

4.2. 运行hadoop自带的mapreduce Demo

[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$  bin/hadoop jar share/hadoop/mapreduce2/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /opt/data/teddy.input output2

4.3. 查看输出结果

[hadoop@hadoop002 output2]$ pwd
/opt/software/hadoop-2.6.0-cdh5.7.0/output2
[hadoop@hadoop002 output2]$ ll
total 4
-rw-r--r--. 1 hadoop hadoop 49 Jun  3 17:43 part-r-00000
-rw-r--r--. 1 hadoop hadoop  0 Jun  3 17:43 _SUCCESS

输出目录中有_SUCCESS文件说明JOB运行成功,part-r-00000是输出结果文件。
查看输出结果

[hadoop@hadoop002 output2]$ cat part-r-00000 
hadoop  1
hive    2
mysql   2
oracle  1
spark   1
storm   1
3.2 Hadoop伪分布式模式部署
  1. Hadoop所用的用户设置
    1.1 创建hadoop用户
[root@hadoop002 data]# useradd hadoop
[root@hadoop002 data]# passwd hadoop

1.2 给hadoop用户sudo权限

[root@hadoop002 data]# vi /etc/sudoers

设置权限,学习环境可以将hadoop用户的权限设置的大一些,但是生产环境一定要注意普通用户的权限限制。
配置如下:

root ALL=(ALL) ALL
hadoop ALL=(root) NOPASSWD:ALL

注意:如果root用户无权修改sudoers文件,先手动为root用户添加写权限。

[root@hadoop002 ~]# chmod u+w /etc/sudoers

切换到hadoop用户

[root@hadoop002 ~]# su - hadoop
  1. 解压Hadoop目录文件
    2.1 创建一个存放本地模式hadoop的目录
[hadoop@hadoop002 software]$ mkdir /opt/software

2.2 文件上传并解压hadoop文件

[hadoop@hadoop002 software]$ tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz 
  1. 配置Hadoop
    3.1 配置hadoop环境变量
[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ vi /etc/profile

增加配置如下

export HADOOP_HOME=/opt/software/hadoop-2.6.0-cdh5.7.0
export PATH=$MAVEN_HOME/bin:$JAVA_HOME/bin:$HADOOP_HOME/sbin:$PATH

使配置文件生效

[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ source /etc/profile

3.2 配置 hadoop-env.sh、mapred-env.sh、yarn-env.sh文件的JAVA_HOME参数
配置文件所在目录为:/opt/software/hadoop-2.6.0-cdh5.7.0/etc/hadoop
修改hadoop-env.sh

[hadoop@hadoop002 hadoop]$ vi hadoop-env.sh 

修改为:

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

依次修改三个文件。
3.3 配置core-site.xml
    配置文件的路径是:/opt/software/hadoop-2.6.0-cdh5.7.0/etc/hadoop

[hadoop@hadoop002 hadoop]$ vi ${HADOOP_HOME}/etc/hadoop/core-site.xml

配置入下:


        
                fs.defaultFS
                hdfs://hadoop002:9000
        
        
                hadoop.tmp.dir
               /opt/data/tmp
        

其中

  • fs.defaultFS参数配置的是HDFS的地址。
  • hadoop.tmp.dir配置的是Hadoop临时目录,比如HDFS的NameNode数据默认都存放这个目录下。

注意:默认的hadoop.tmp.dir是/tmp/hadoop-${user.name},此时有个问题就是NameNode会将HDFS的元数据存储在这个/tmp目录下,如果操作系统重启了,系统会清空/tmp目录下的东西,导致NameNode元数据丢失,是个非常严重的问题,所有我们应该修改这个路径。

现在/opt/data/tmp/目录是不存在的,我们要创建它并将它的权限分配给hadoop用户。

[hadoop@hadoop002 hadoop]$ sudo mkdir -p /opt/data/tmp
[hadoop@hadoop002 hadoop]$ sudo chown –R hadoop:hadoop /opt/data/tmp
  1. 配置、格式化、启动HDFS
    4.1 配置hdfs-site.xml
        配置文件的路径是:/opt/software/hadoop-2.6.0-cdh5.7.0/etc/hadoop
[hadoop@hadoop002 hadoop]$ vi ${HADOOP_HOME}/etc/hadoop/hdfs-site.xml

配置如下:


        
                dfs.replication
                1
        

dfs.replication配置的是HDFS存储时的备份数量,因为这里是伪分布式环境只有一个节点,所以设置为1。
4.2 格式化hdfs
执行命令

[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ $HADOOP_HOME/bin/hdfs namenode -format

格式化是对HDFS这个分布式文件系统中的DataNode进行分块,统计所有分块后的初始元数据的存储在NameNode中。格式化后,查看core-site.xml里hadoop.tmp.dir(本例是/opt/data目录)指定的目录下是否有了dfs目录,如果有,说明格式化成功。

[root@hadoop002 current]# pwd
/opt/data/tmp/dfs/name/current
[root@hadoop002 current]# ll
total 16
-rw-rw-r--. 1 hadoop hadoop 353 Jun  3 18:22 fsimage_0000000000000000000
-rw-rw-r--. 1 hadoop hadoop  62 Jun  3 18:22 fsimage_0000000000000000000.md5
-rw-rw-r--. 1 hadoop hadoop   2 Jun  3 18:22 seen_txid
-rw-rw-r--. 1 hadoop hadoop 207 Jun  3 18:22 VERSION
  • fsimage是NameNode元数据在内存满了后,持久化保存到的文件。
  • fsimage*.md5 是校验文件,用于校验fsimage的完整性。
  • seen_txid 是hadoop的版本
  • vession文件里保存:
    • namespaceID:NameNode的唯一ID。
    • clusterID:集群ID,NameNode和DataNode的集群ID应该一致,表明是一个集群。
[root@hadoop002 current]# cat VERSION 
#Sun Jun 03 18:22:04 CST 2018
namespaceID=826949800
clusterID=CID-3e8c3f5c-6ff5-461f-ace1-e2be7de4b72c
cTime=0
storageType=NAME_NODE
blockpoolID=BP-1770757348-192.168.137.130-1528021323999
layoutVersion=-60

4.3 启动NameNode

[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ ${HADOOP_HOME}/sbin/hadoop-daemon.sh start namenode

4.4 启动DataNode

[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ ${HADOOP_HOME}/sbin/hadoop-daemon.sh start datanode

4.5 启动SecondaryNameNode

[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ ${HADOOP_HOME}/sbin/hadoop-daemon.sh start secondarynamenode

4.6 jps命令查看是否已经启动成功,有结果就是启动成功了。

[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ jps
52035 SecondaryNameNode
51863 NameNode
51945 DataNode
52075 Jps

启动成功

  1. 配置、启动YARN
    5.1 配置mapred-site.xml
        默认没有mapred-site.xml文件,但是有个mapred-site.xml.template配置模板文件。复制模板生成mapred-site.xml。
[hadoop@hadoop002 hadoop]$ pwd
/opt/software/hadoop-2.6.0-cdh5.7.0/etc/hadoop
[hadoop@hadoop002 hadoop]$ cp mapred-site.xml.template mapred-site.xml
[hadoop@hadoop002 hadoop]$ vi mapred-site.xml

增加配置如下:


        
                mapreduce.framework.name
                yarn
        

指定mapreduce运行在yarn框架上。

5.2 配置yarn-site.xml

[hadoop@hadoop002 hadoop]$ pwd
/opt/software/hadoop-2.6.0-cdh5.7.0/etc/hadoop
[hadoop@hadoop002 hadoop]$ vi yarn-site.xml

增加配置如下:


        
                 yarn.nodemanager.aux-services
                  mapreduce_shuffle
        

  • yarn.nodemanager.aux-services配置了yarn的默认混洗方式,选择为mapreduce的默认混洗算法。
    5.3 启动Resourcemanager
[hadoop@hadoop002 hadoop]$ ${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager

5.4 启动nodemanager

[hadoop@hadoop002 hadoop]$ ${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager

5.5 查看是否启动成功

[hadoop@hadoop002 hadoop]$ jps
52035 SecondaryNameNode
52294 ResourceManager
51863 NameNode
51945 DataNode
52413 NodeManager
52494 Jps

5.6 YARN的Web页面
YARN的Web客户端端口号是8088,通过http://主机ip:8088/可以查看。


伪分布式部署.png
  1. 在Yarn上运行MapReduce Job
       hadoop自带的wordcount例子来在伪分布式下测试跑mapreduce。
    6.1 创建测试用的Input文件
[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ bin/hdfs dfs -mkdir -p /wordcountdemo/input

6.2 准备mapreduce输入文件teddy.input

[hadoop@hadoop002 software]$ cat /opt/data/teddy.input
hadoop mysql hive
spark oracle storm
mysql hive

6.3 上传文件到hdfs

[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ bin/hdfs dfs -put /opt/data/teddy.input /wordcountdemo/input

6.4 运行mapreduce

[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ bin/yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.7.0.jar wordcount /wordcountdemo/input /wordcountdemo/output

完成结果如下:

[hadoop@hadoop002 hadoop-2.6.0-cdh5.7.0]$ bin/hdfs dfs -ls /wordcountdemo/output
Found 2 items
-rw-r--r--   1 hadoop supergroup          0 2018-06-03 18:56 /wordcountdemo/output/_SUCCESS
-rw-r--r--   1 hadoop supergroup         49 2018-06-03 18:56 /wordcountdemo/output/part-r-00000

你可能感兴趣的:(hadoop环境搭建)