5

30分钟入门hadoop

 3 years ago
source link: http://blog.ilibrary.me/2019/08/09/30%E5%88%86%E9%92%9F%E5%85%A5%E9%97%A8hadoop
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client
欢迎转载,请支持原创,保留原文链接:blog.ilibrary.me

本文主要是通过docker快速搭建hadoop集群,然后快速尝试hdfs, map reduce的基本功能,揭开Hadoop的神秘面纱。

Hadoop介绍

先讲解一下hadoop的基本概念, 想快速尝试Hadoop的同学可以跳过这个章节直接到快速开始Hadoop.

Hadoop是一个软件集合

Hadoop不是一个软件,是一个软件的集合, 一个分布式大数据存储管理软件的集合, hdfs + map reduce是hadoop基础的分布式文件储存和分布式计算功能。 下图是hadoop的架构图.

Hadoop架构图

Hadoop架构图

hadoop是一个分布式计算+分布式文件系统,前者其实就是MapReduce,后者是HDFS。后者可以独立运行,前者可以选择性使用,也可以不使用。

HDFS是根基

HDFS是Hadoop的根基, 是一个分布式文件储存系统. HDFS的架构如下:

HDFS架构图

HDFS架构图

HDFS是一个高度容错性的系统,适合部署在廉价的机器上。HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。

YARN是管家,是Map-Reduce框架

YARN是Hadoop集群的资源管理系统, 也是Map Reduce框架的基础, Map Reduce API构建在这只是。Yarn 的全称是 ** Yet Another Resource Negotiator**,意思是“另一种资源调度器”.

YARN包含两个独立的服务:一个全局的资源管理器ResourceManager和每个应用程序特有的ApplicationMaster。其中ResourceManager负责整个系统的资源管理和分配,而ApplicationMaster负责单个应用程序的管理。

YARN总体上仍然是Master/Slave结构,在整个资源管理框架中,ResourceManager为Master,NodeManager为Slave,ResourceManager负责对各个NodeManager上的资源进行统一管理和调度。当用户提交一个应用程序时,需要提供一个用以跟踪和管理这个程序的ApplicationMaster,它负责向ResourceManager申请资源,并要求NodeManger启动可以占用一定资源的任务。由于不同的ApplicationMaster被分布到不同的节点上,因此它们之间不会相互影响。

下图描述了YARN的基本组成结构,YARN主要由ResourceManager、NodeManager、ApplicationMaster(图中给出了MapReduce和MPI两种计算框架的ApplicationMaster,分别为MR AppMstr和MPI AppMstr)和Container等几个组件构成。

YARN基本结构

YARN基本结构

Map reduce, hive, hbase 是上层应用

在hdfs之上, Hadoop围绕分布式大数据有非常丰富的功能或者插件,解决大数据不同方面的问题。 基于hdfs之上的所有应用都由yarn来管理。

特点:

hive把数据文件加载进来作为一个hive表(或者外部表),它支持类似sql语句的功能,你可以通过该语句完成分布式环境下的计算功能,hive会把语句转换成MapReduce,然后交给hadoop执行。这里的计算,仅限于查找和分析,而不是更新、增加和删除。

hbase只是利用hadoop的hdfs帮助其管理数据的持久化文件(HFile),它跟MapReduce没任何关系。它使用的是nosql,或者说是列式结构,从而提高了查找性能,使其能运用于大数据场景,这是它跟MapReduce的区别。

优势:

hive的优势是对历史数据进行处理,用时下流行的说法是离线计算,因为它的底层是MapReduce,MapReduce在实时计算上性能很差。

hbase的优势在于实时计算,所有实时数据都直接存入hbase中,客户端通过API直接访问hbase,实现实时计算。

总结:

hadoop是hive和hbase的基础,hive依赖hadoop,而hbase仅依赖hadoop的hdfs模块。

hive适用于离线数据的分析,操作的是通用格式的(如通用的日志文件)、被hadoop管理的数据文件,它支持类sql,比编写MapReduce的java代码来的更加方便,它的定位是数据仓库,存储和分析历史数据。

hbase适用于实时计算,采用列式结构的nosql,操作的是自己生成的特殊格式的HFile、被hadoop管理的数据文件,它的定位是数据库,或者叫DBMS。

补充:

hive可以直接操作hdfs中的文件作为它的表的数据,也可以使用hbase数据库作为它的表。

快速开始Hadoop

大部分人在尝试hadoop的时候被复杂的环境搭建给阻挡住了。今天就教给大家一个通过docker-compose搭建hadoop集群,运行hadoop hello world的方法,让大家在整体上有一个简单的概念。

Docker搭建Hadoop集群

下载 docker hadoop

git clone https://github.com/younthu/docker-hadoop

进入docker-hadoop目录,然后启动集群:

docker-compose up -d

docker会拉取远程image然后搭建一个包含一个resourcemanager,nodemanger, 一个namenode(管理文件元数据), 3个datanode(存储文件的块),一个historyserver的集群。

你可以通过docker ps查看集群启动情况

>docker ps
CONTAINER ID        IMAGE                                                    COMMAND                  CREATED              STATUS                        PORTS                    NAMES
c31471050adc        bde2020/hadoop-historyserver:2.0.0-hadoop3.1.1-java8     "/entrypoint.sh /run…"   About a minute ago   Up About a minute (healthy)   8188/tcp                 historyserver
68e6ee7a326f        bde2020/hadoop-resourcemanager:2.0.0-hadoop3.1.1-java8   "/entrypoint.sh /run…"   About a minute ago   Up About a minute (healthy)   0.0.0.0:8089->8088/tcp   resourcemanager
eaaf19dae58a        bde2020/hadoop-nodemanager:2.0.0-hadoop3.1.1-java8       "/entrypoint.sh /run…"   About a minute ago   Up About a minute (healthy)   8042/tcp                 nodemanager1
c1bfbc885135        bde2020/hadoop-datanode:2.0.0-hadoop3.1.1-java8          "/entrypoint.sh /run…"   About a minute ago   Up About a minute (healthy)   9864/tcp                 datanode2
79a3b6c80c6d        bde2020/hadoop-datanode:2.0.0-hadoop3.1.1-java8          "/entrypoint.sh /run…"   About a minute ago   Up About a minute (healthy)   9864/tcp                 datanode3
6123cb7298fe        bde2020/hadoop-datanode:2.0.0-hadoop3.1.1-java8          "/entrypoint.sh /run…"   About a minute ago   Up About a minute (healthy)   9864/tcp                 datanode
4bb9d1ee24f4        bde2020/hadoop-namenode:2.0.0-hadoop3.1.1-java8          "/entrypoint.sh /run…"   About a minute ago   Up About a minute (healthy)   0.0.0.0:9870->9870/tcp   namenode

用浏览器打开http://localhost:9870, 从namenode节点查看系统情况。

Namenode截图

Namenode截图

测试Hadoop集群

现在我们通过运行经典的WordCount程序来测试我们的hadoop集群。

WordCount的源代码在wordcountv2.0, jar包已经随源码迁出在docker-hadoop/目录下,。

  1. 进入namenode: docker exec -it namenode bash
  2. 创建两个txt文件作为WordCount的输入.
     $ mkdir input
     $ echo "Hello World" >input/f1.txt
     $ echo "Hello Docker" >input/f2.txt
    
  3. 在HDFS创建input目录
    $ hadoop fs -mkdir -p input
    # `hadoop fs`是一个通用的接口,会被翻译成`hdfs dfs`, 所以上面这句等效于
    # hdfs dfs -mkdir -p input
    
  4. 把本地文件上传到hdfs
    $ hdfs dfs -put ./input/* input
    
  5. WordCount程序拷贝到namenode容器里面去
    docker cp ./hadoop-mapreduce-examples-2.7.1-sources.jar namenode:hadoop-mapreduce-examples-2.7.1-sources.jar
    
  6. namenode上运行WordCount程序
    root@namenode:/# hadoop jar hadoop-mapreduce-examples-2.7.1-sources.jar org.apache.hadoop.examples.WordCount input output
    
  7. 打印WordCount的输出
    root@namenode:/# hdfs dfs -cat output/part-r-00000
     World	1
     Docker	1
     Hello	2
    

至此,你已经成功的运用Hadoop集群跑了一个mapreduce应用!

你可以通过目录docker-compose down -v来删除所有的容器和数据卷。

  1. Resource Manager, http://localhost:8089.
  2. Name Node, http://localhost:9870. 文件管理系统。这地方可以浏览hadoop文件目录,然后可以下载文件(下载的时候文件下载路径里ip要换成localhost).
  3. Node Manager, http://localhost:8042. ResourceManager在每台机器上的代理,负责容器管理,并监控它们的资源使用情况,以及向ResourceManager/Scheduler提供资源使用报告
  4. Datanode1, http://localhost:9864.文件储存节点。 这个地址可以用来下载hadoop文件, eg, input/f1.txt
  5. Datanode2, http://localhost:9865. 和Datanode1一样。
  6. Datanode3, http://localhost:9866. 和datanode1一样。

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK