hadoop

Hadoop是一个用于海量数据统计分析的分布式计算框架,封装了分布式计算中比较困难的进程间通信、负载均衡,任务调度等模块,降低了学习门槛。在最简单的程序实现中,仅仅需要重写map和reduce方法,并实现任务提交逻辑。接下来,就让我们一起推开Hadoop的大门,走进大数据的神奇世界。

Hadoop的组成

Hadoop目前主要包括Hadoop1.x和hadoop2.x,两种版本差距较大,目前常用的是Hadoop2.x版本,所以主要基于Hadoop2.x进行讲解

主要组成模块

Hadoop Distributed File System(HDFS):分布式文件存储系统。

MapReduce:并行计算框架(可以自定义计算逻辑的部分)

Yet Another Resource Negotiator(YARN):另一种资源协调者(顾名思义,Hadoop1.x采用的不是这一个资源管理器)

MapReduce的工作机制

上图是MapReduce的工作原理,首先解释一下各个组成模块的作用。

Job:由客户端向集群提交的一次计算任务。

Task:集群的最小可执行单位(一个Job将会分为多个Task执行)

ResourceManager(以下简称RM):管理整个集群的计算资源,主要用于为每一个Job分配计算资源(整个集群只有一个RM)

Container:资源分配单位,一个Container包括一些CPU和存储资源

NodeManager(以下简称NM):管理单台服务器的计算资源,类似RM的更细粒度实现(集群中每台服务器有一个NM)。

ApplicationMaster(以下简称AM):监控每一个Job的执行情况,包括资源申请、Task调度等。

为了便于理解,下面有一个并不是太恰当的比喻。类似一个学生宿舍的构成,RM相当于宿舍管理处的大BOSS,而Task则相当于一个学生,大BOSS(RM)负责分配一片区域给某个班(Job)的学生(Task)住,而具体每个学生(Task)住哪儿,则由班主任(AM)和楼管(NM)商量(当然一个班级的学生还是可以住在多个楼里边的)。

接下来具体解释图中每一步的作用:

client调用Job提交接口,Job被提交到集群上

为了便于标识Job,会首先向RM请求一个唯一ID,并同时检查Job中的输入/输出路径是否存在,如果输入路径不存在,则报错;如果输出路径存在,也会报错(注意别看错了)

获得唯一ID之后,就把Job所需资源(包括Jar包和输入路径信息)上传到HDFS中(因为分布式环境的原因,需要将这些资源上传到所有节点都能访问到的目录,即这里的HDFS)

在完成以上步骤之后,则可以真正提交Job到集群中。

启动一个Job的时候,首先需要启动该Job的AM,所以RM会主动分配NM上的一个Container(一个Container就是一个JVM),用于运行AM守护进程。

初始化Job,包括启动一些Job运行状态跟踪对象。

从HDFS中读取第3步上传的输入路径信息(包括输入文件所在的服务器节点信息,一份输入文件可能存储在多台服务器上)。

根据上一步的文件路径信息,向RM申请所需资源(Container),尽量保证Container和输入文件在同一台服务器上边,能够减小网络IO(即数据本地化)

AM根据RM分配的Container,向Container所属的NM申请启动Task。

Container在收到启动命令之后,会首先从HDFS下载Task所需Jar包和缓存文件等

最后就是Task的正式运行阶段了。

one

1)安装java

[root@redhat 脚本]# yum -y install java-1.8.0-openjdk-devel

[root@hadoop ~]# java -version

1)解压hadoop包

[root@hadoop ~]# tar xf  hadoop-2.7.6.tar.gz

[root@hadoop ~]#mv hadoop-2.7.6  /usr/local/hadoop

[root@hadoop ~]#vim  /usr/local/hadoop/etc/hadoop/

1)免密码登入

Ssh-keygen -t rsa -b 2048 -N ‘’

for i in nn01 node{1..3}:do

Ssh-copy-id -i id_rsa $i

none

2)禁止远程输入yes

[root@node31 .ssh]# vim  /etc/ssh/ssh_config

.....

Host *

GSSAPIAuthentication no

StrictHostKeyChecking no

[root@node31 .ssh]# systemctl restart sshd

mv hadoop-2.7.6 /usr/local/hadoop

[root@hadoop ~]#cd /usr/local/hadoop/

[root@hadoop ~]#cd etc/hadoop/

[root@node31 hadoop]# vim hadoop-env.sh

export JAVA_HOME=/usr/lib/jvm/java-1.8.0-openjdk-1.8.0.131-11.b12.el7.x86_64/jre

......

export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop

[root@node31 hadoop]# vim core-site.xml

<configuration>

<property>

<name>fs.defaultFS</name>

<value>hdfs://node31:9000</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/var/hadoop</value>

</property>

</configuration>

[root@node31 hadoop]#vim slaves

node32

node33

node34

[root@node31 hadoop]#vim /etc/hosts

192.168.1.31 node31

192.168.1.32 node32

192.168.1.33 node33

192.168.1.34 node34

[root@node31 hadoop]# for i in 192.168.1.{32..34}; do scp /etc/hosts

${i}:/etc/hosts;done

[root@node31 hadoop]#mkdir input

[root@node31 hadoop]#cp *.txt input/

[root@node31 hadoop]#bin/hadoop  jar

share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount

input output

[root@node31 hadoop]#cd output/

[root@node31 hadoop]#cat part-r-00000

[root@node31 hadoop]# wait

[root@node31 hadoop]#cd ..

[root@node31 hadoop]#vim hdfs-site.xml

<configuration>

<property>

<name>dfs.namenode.http-address</name>

<value>node31:50070</value>

<description> ml </description>

</property>

<property>

<name>dfs.namenode.secondary.http-address</name>

<value>node31:50090</value>

</property>

<property>

<name>dfs.replication</name>

<value>2</value>

</property>

</configuration>

[root@node31hadoop]# for i in node{31..34};do mkdir /var/hadoop/;done  [root@node31 hadoop]# cd /usr/local/hadoop/etc/hadoop/

[root@node31 hadoop]# for i in node{31..34};do rsync -aSH --delete

/usr/local/hadoop ${i}:/usr/local/ -e 'ssh' & done

[root@node31 hadoop]# vim core-site.xml

[root@node31 hadoop]# cd etc/hadoop/

[root@node31 hadoop]# vim core-site.xml

[root@node31 hadoop]# vim hdfs-site.xml

[root@node31 hadoop]# for i in 192.168.1.{32..34}; do scp -r

/usr/local/hadoop/  $i:/usr/local/; done

[root@node31 hadoop]#./bin/hdfs namenode -format

[root@node31 hadoop]# ./sbin/start-dfs.sh

[root@node31 hadoop]# jps

[root@node31 hadoop]# ./bin/hdfs dfsadmin -report

two

[root@node31 hadoop]# vim yarn-site.xml

<configuration>

<property>

<name>yarn.resourcemanager.hostname</name>

<value>node31</value>

</property>

<!-- Site specific YARN configuration properties -->

<property>

<name>yarn.nodemanager.aux-services</name>

<value>mapreduce_shuffle</value>

</property>

</configuration>

[root@node31 hadoop]# vim mapred-site.xml

<configuration>

<property>

<name>mapreduce.framework.name</name>

<value>yarn</value>

</property>

</configuration>

[root@node31 hadoop]# for i in 192.168.1.{32..34}; do scp -r mapred-site.xml  $i:/usr/local/hadoop/etc/hadoop/; done

[root@node31 hadoop]# for i in 192.168.1.{32..34}; do scp -r yarn-site.xml  $i:/usr/local/hadoop/etc/hadoop/; done

[root@node31 hadoop]# ./sbin/start-yarn.sh

[root@node31 hadoop]# ./bin/yarn node -list

18/07/09 11:24:18 INFO client.RMProxy: Connecting to ResourceManager at node31/192.168.1.31:8032

Total Nodes:3

Node-Id      Node-State Node-Http-Address Number-of-Running-Containers

node32:46048         RUNNING       node32:8042     0

node34:42782         RUNNING       node34:8042     0

node33:35031         RUNNING       node33:8042     0

http://192.168.1.31:50070/       http://192.168.1.31:50090/

http://192.168.1.32:8042/        http://192.168.1.32:50075

http://192.168.1.31:8088/

Hadoop 验证

• 创建文件夹

– ./bin/hadoop fs –mkdir /input

• 导入要分析的文件

– ./bin/hadoop fs –put *.txt /input

Hadoop 验证

• 提交分析作业

– ./bin/hadoop

jar ./share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.3.jar

wordcount /input

/output

• 查看结果

– ./bin/hadoop fs –cat output/*

hadoop(学习)的更多相关文章

  1. Hadoop学习之旅二:HDFS

    本文基于Hadoop1.X 概述 分布式文件系统主要用来解决如下几个问题: 读写大文件 加速运算 对于某些体积巨大的文件,比如其大小超过了计算机文件系统所能存放的最大限制或者是其大小甚至超过了计算机整 ...

  2. Hadoop学习笔记—22.Hadoop2.x环境搭建与配置

    自从2015年花了2个多月时间把Hadoop1.x的学习教程学习了一遍,对Hadoop这个神奇的小象有了一个初步的了解,还对每次学习的内容进行了总结,也形成了我的一个博文系列<Hadoop学习笔 ...

  3. Hadoop学习之旅三:MapReduce

    MapReduce编程模型 在Google的一篇重要的论文MapReduce: Simplified Data Processing on Large Clusters中提到,Google公司有大量的 ...

  4. [Hadoop] Hadoop学习历程 [持续更新中…]

    1. Hadoop FS Shell Hadoop之所以可以实现分布式计算,主要的原因之一是因为其背后的分布式文件系统(HDFS).所以,对于Hadoop的文件操作需要有一套全新的shell指令来完成 ...

  5. Hadoop学习笔记—2.不怕故障的海量存储:HDFS基础入门

    一.HDFS出现的背景 随着社会的进步,需要处理数据量越来越多,在一个操作系统管辖的范围存不下了,那么就分配到更多的操作系统管理的磁盘中,但是却不方便管理和维护—>因此,迫切需要一种系统来管理多 ...

  6. Hadoop学习路线图

    Hadoop家族产品,常用的项目包括Hadoop, Hive, Pig, HBase, Sqoop, Mahout, Zookeeper, Avro, Ambari, Chukwa,新增加的项目包括, ...

  7. Hadoop学习(5)-- Hadoop2

    在Hadoop1(版本<=0.22)中,由于NameNode和JobTracker存在单点中,这制约了hadoop的发展,当集群规模超过2000台时,NameNode和JobTracker已经不 ...

  8. Hadoop学习总结之五:Hadoop的运行痕迹

    Hadoop学习总结之五:Hadoop的运行痕迹   Hadoop 学习总结之一:HDFS简介 Hadoop学习总结之二:HDFS读写过程解析 Hadoop学习总结之三:Map-Reduce入门 Ha ...

  9. Hadoop学习笔记(7) ——高级编程

    Hadoop学习笔记(7) ——高级编程 从前面的学习中,我们了解到了MapReduce整个过程需要经过以下几个步骤: 1.输入(input):将输入数据分成一个个split,并将split进一步拆成 ...

  10. Hadoop学习笔记(6) ——重新认识Hadoop

    Hadoop学习笔记(6) ——重新认识Hadoop 之前,我们把hadoop从下载包部署到编写了helloworld,看到了结果.现是得开始稍微更深入地了解hadoop了. Hadoop包含了两大功 ...

随机推荐

  1. scrapy 在爬取过程中抓取下载图片

    先说前提,我不推荐在sarapy爬取过程中使用scrapy自带的 ImagesPipeline 进行下载,是在是太耗时间了 最好是保存,在使用其他方法下载 我这个是在 https://blog.csd ...

  2. 波兰政府在继韩国之后也增加了对 Linux 的使用

    导读 前段时间, 韩国政府起草了一项战略,准备采用基于 Linux 的开源操作系统全面取代 Windows 7,以摆脱对其的依赖. 目前,波兰的社会保险公司 ZUS( Zakład Ubezpiecz ...

  3. USB设备描述符和请求命令

    USB设备描述符和请求命令 介绍标准的USB设备描述符和请求命令. 标准的USB描述符 当USB设备第一次连接到主机上时,要接收主机的枚举和配置,目的就是让主机知道该设备具有什么功能.是哪一类的USB ...

  4. What is the difference between shades and shadows?

    Shade is the darkness of an object not in direct light, while shadows are the silhouette of an objec ...

  5. C/C++书籍分享(百度网盘版)

    作为第一篇博客,该写一些什么好呢,毕竟作为技术博客开创的,不能随便闲谈不是. 那就分享一些书籍作为见面礼吧.链接里面包含有大量的C++学习用书籍,包含了从入门到进阶的大部分高质量书籍,注意仅用作个人学 ...

  6. STM32时钟配置方法

    一.在STM32中,有五个时钟源,为HSI.HSE.LSI.LSE.PLL. ①HSI是高速内部时钟,RC振荡器,频率为8MHz. ②HSE是高速外部时钟,可接石英/陶瓷谐振器,或者接外部时钟源,频率 ...

  7. scrapy爬虫提取网页链接的两种方法以及构造HtmlResponse对象的方式

    Response对象的几点说明: Response对象用来描述一个HTTP响应,Response只是一个基类,根据相应的不同有如下子类: TextResponse,HtmlResponse,XmlRe ...

  8. 【Springboot】用Prometheus+Grafana监控Springboot应用

    1 简介 项目越做越发觉得,任何一个系统上线,运维监控都太重要了.关于Springboot微服务的监控,之前写过[Springboot]用Springboot Admin监控你的微服务应用,这个方案可 ...

  9. 环境篇:Virtualbox+Vagrant安装Centos7

    环境篇:Virtualbox+Vagrant安装Centos7 1 安装Vagrant Vagrant下载地址:https://www.vagrantup.com/ Vagrant百度网盘:https ...

  10. spring官方demo及配置查看

    1.http://spring.io/projects/spring-framework 2.https://github.com/spring-projects/spring-mvc-showcas ...