本次主要介绍大数据离线阶段的Hadoop入门,分为上下两篇。

  • 上篇的内容为Hadoop简介,历史,特性,应用四个模块。
  • 下篇的内容为hadoop的集群搭建,集群启动,入门初试三部分。

1.Hadoop集群搭建

发行版本

Hadoop 发行版本分为开源社区版和商业版。

  • 社区版是指由 Apache 软件基金会维护的版本,是官方维护的版本体系。
  • 商业版 Hadoop 是指由第三方商业公司在社区版 Hadoop 基础上进行了一些修改、整合以及各个服务组件兼容性测试而发行的版本, 比较著名的有 cloudera 的 CDH、 mapR 等。

我们介绍的是社区版: Apache Hadoop。 后续如未说明都是指 Apache 版。Hadoop 的版本很特殊,是由多条分支并行的发展着。 大的来看分为 3 个大的系列版本: 1.x、 2.x、 3.x。

  • Hadoop1.0 由一个分布式文件系统 HDFS 和一个离线计算框架 MapReduce 组成。
  • Hadoop 2.0 则包含一个支持 NameNode 横向扩展的 HDFS,一个资源管理系统YARN 和一个运行在 YARN 上的离线计算框架 MapReduce。相比于 Hadoop1.0,Hadoop 2.0 功能更加强大,且具有更好的扩展性、性能,并支持多种计算框架。
  • Hadoop 3.0 相比之前的 Hadoop 2.0 有一系列的功能增强。但目前还是个alpha 版本,有很多 bug,且不能保证 API 的稳定和质量。

我们课程中使用的是当前 2 系列最稳定版本: Apache Hadoop 2.7.4。

集群介绍

HADOOP 集群具体来说包含两个集群: HDFS 集群和 YARN 集群,两者逻辑上分
离,但物理上常在一起

  • HDFS 集群负责海量数据的存储,集群中的角色主要有:
    NameNode、 DataNode、 SecondaryNameNode
  • YARN 集群负责海量数据运算时的资源调度,集群中的角色主要有:
    ResourceManager、 NodeManager
  • mapreduce 是一个分布式运算编程框架,是应用程序开发包,由用户按照编程规范进行程序开发,后打包运行在 HDFS 集群上,并且受到 YARN 集群的资源调度管理。

Hadoop 部署方式分三种:

  • 独立模式又称为单机模式, 仅 1 个机器运行 1 个 java 进程,主要用于调试。(单机)
  • 伪分布模式也是在 1 个机器上运行 HDFS 的 NameNode 和 DataNode、 YARN 的
    ResourceManger 和 NodeManager, 但分别启动单独的 java 进程,主要用于调试。(单机)
  • 集群模式主要用于生产环境部署。 会使用 N 台主机组成一个 Hadoop 集群。
  • 这种部署模式下, 主节点和从节点会分开部署在不同的机器上。

我们以 3 节点为例进行搭建,角色分配如下:

hadoop能不能做实时 hadoop是离线还是实时_hadoop


角色分配如下:

  • node-01 NameNode DataNode ResourceManager
  • node-02 DataNode NodeManager SecondaryNameNode
  • node-03 DataNode NodeManager
1. 服务器准备

VMware Workstation Pro 12.0
Centos 6.7 64bit

2. 网络环境准备

采用 NAT 方式联网。

  • 如果创建的是桌面版的 Centos 系统,可以在安装完毕后通过图形页面进行编辑。
  • 如果是mini版本的,可通过编辑ifcfg-eth*配置文件进行配置。注意BOOTPROTO、 GATEWAY、 NETMASK。
3. 服务器系统设置

同步时间

  • #手动同步集群各机器时间
    date -s "2017-03-03 03:03:03"
    yum install ntpdate
  • 网络同步时间
    ntpdate ntp6.aliyun.com

设置主机名

  • Linux主机名设置
    vi /etc/hosts
    输入内容
    192.168.33.101(自己对应的IP地址) node-1
    192.168.33.102(自己对应的IP地址) node-2
    192.168.33.103 (自己对应的IP地址)node-3
  • window主机名映射
    地址:C:\Windows\System32\drivers\etc
    修改hosts文件,添加内容
    192.168.33.101(自己对应的IP地址) node-1
    192.168.33.102(自己对应的IP地址) node-2
    192.168.33.103 (自己对应的IP地址)node-3

配置 ssh 免密登陆
生成 ssh 免登陆密钥
ssh-keygen -t rsa (四个回车)
执行完这个命令后,会生成 id_rsa(私钥)、 id_rsa.pub(公钥)
将公钥拷贝到要免密登陆的目标机器上
ssh-copy-id node-02

配置防火墙
查看防火墙状态 service iptables status
关闭防火墙 service iptables stop
查看防火墙开机启动状态 chkconfig iptables --list
关闭防火墙开机启动 chkconfig iptables off

#####4. JDK环境安装

  • 上传 jdk 安装包 jdk-8u65-linux-x64.tar.gz
  • 解压安装包 tar zxvf jdk-8u65-linux-x64.tar.gz -C /root/apps
  • 配置环境变量 vim /etc/profile
  • 插入下面的内容
export JAVA_HOME=/root/apps/jdk1.8.0_65
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
  • 刷新配置:source /etc/profile
5. Hadoop 安装
  • 上传hadoop,解压 hadoop-2.7.4-with-centos-6.7.tar.g
  • hadoop的目录结构
  • 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 包所在的目录.
6. Hadoop 配置文件修改

Hadoop 安装主要就是配置文件的修改, 一般在主节点进行修改,完毕后 scp
下发给其他各个从节点机器。下面的文件都在 hadoop的***etc***目录下:

export JAVA_HOME=/root/apps/jdk1.8.0_65
  • 修改core-site.xml文件,在configuration中增加代码
<configuration>

<!-- 用于设置 Hadoop 的文件系统,由 URI 指定 -->
	<property>
		<name>fs.defaultFS</name>
		<value>hdfs://node-1:9000</value>
	</property>

<!-- 配置 Hadoop 的临时目录,默认/tmp/hadoop-${user.name} -->
	<property>
		<name>hadoop.tmp.dir</name>
		<value>/export/data/hadoopData</value>
	</property>
</configuration>
  • 修改hdfs-site.xml,在configuration中增加代码
<configuration>
<!-- 指定 HDFS 副本的数量 -->
 <property>
  <name>dfs.replication</name>
  <value>2</value>
 </property>
<!-- secondary namenode 所在主机的 ip 和端口->
 <property>
   <name>dfs.namenode.secondary.http-address</name>
   <value>192.168.25.101:50090</value>
 </property>
</configuration>
  • 修改mapred-site.xml的,configuration中增加代码
<configuration>
<!-- 指定 mr 运行时框架,这里指定在 yarn 上,默认是 local -->
  <property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
  </property>
</configuration>
  • 修改yarn-site.xml的,configuration中增加代码
<configuration>
<!-- 指定 YARN 的老大( ResourceManager)的地址 -->
  <property>
    <name>yarn.resourcemanager.hostname</name>
    <value>node-1</value>
  </property>
<!-- NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序默认值: "" -->
  <property>
    <name>yarn.nodemanager.aux-services</name>
    <value>mapreduce_shuffle</value>
  </property>
</configuration>
  • 创建slaves文件,如果存在进行编辑,删除***locahost***,增加文件
node-1
node-2
node-3
  • 将hadoop添加到环境变量 ,命令***vim /etc/proflie***
export HADOOP_HOME=/export/server/hadoop-2.7.4
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  • 保存配置文件,刷新配置文件:source /etc/profile

集群启动

  • 启动方式
    要启动 Hadoop 集群,需要启动 HDFS 和 YARN 两个集群。
    注意: 首次启动 HDFS 时,必须对其进行格式化操作。 本质上是一些清理和准备工作,因为此时的 HDFS 在物理上还是不存在的。
    hdfs namenode– format 或者 hadoop namenode – format
  • 单节点逐个启动
  1. 在主节点上使用以下命令启动 HDFS NameNode:
    hadoop-daemon.sh start namenode
  2. 在每个从节点上使用以下命令启动 HDFS DataNode:
    hadoop-daemon.sh start datanode
  3. 在主节点上使用以下命令启动 YARN ResourceManager:
    yarn-daemon.sh start resourcemanager
  4. 在每个从节点上使用以下命令启动 YARN nodemanager:
    yarn-daemon.sh start nodemanager

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

  • 脚本一键启动
    如果配置了 etc/hadoop/slaves 和 ssh 免密登录,则可以使用程序脚本启动
    所有 Hadoop 两个集群的相关进程,在主节点所设定的机器上执行。
  1. hdfs: /sbin/start-dfs.sh
  2. yarn: /sbin/start-yarn.sh
  3. 停止集群: stop-dfs.shstop-yarn.sh
  • 集群 web-ui
    一旦 Hadoop 集群启动并运行, 可以通过 web-ui 进行集群查看,如下所述:
    node-1:50070 HDFS的NameNode节点

    node-1:8088 YARN的主页

Hadoop初体验

  • 从 Linux 本地上传一个文本文件到 hdfs 的/test/input 目录下
    hadoop fs -mkdir -p /wordcount/input 创建文件夹
    hadoop fs -put /root/somewords.txt /wordcount/input Linux上传到hadoop
  • 运行 mapreduce 程序
    在 Hadoop 安装包的 hadoop-2.7.4/share/hadoop/mapreduce 下有官方自带的 mapreduce 程序。 我们可以使用如下的命令进行运行测试。示例程序 jar:
    hadoop-mapreduce-examples-2.7.4.jar
  • 计算圆周率:
    hadoop jar hadoop-mapreduce-examples-2.7.4.jar pi 20 50
    这里使用的是Monte Carlo 方法来计算 Pi 值
    使用Monte Carlo 计算圆周率