hadoop,spark学习之路

 Hadoop是一个能够对大量数据进行分布式处理的软件框架,先来了解hadoop结构

组件

功能

HDFS

分布式文件系统

MapReduce

分布式并行编程模型

YARN

资源管理和调度器

Tez

运行在YARN之上的下一代Hadoop查询处理框架

Hive

Hadoop上的数据仓库

HBase

Hadoop上的非关系型的分布式数据库

Pig

一个基于Hadoop的大规模数据分析平台,提供类似SQL的查询语言Pig Latin

Sqoop

用于在Hadoop与传统数据库之间进行数据传递

Oozie

Hadoop上的工作流管理系统

Zookeeper

提供分布式协调一致性服务

Storm

流计算框架

Flume

一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统

Ambari

Hadoop快速部署工具,支持Apache Hadoop集群的供应、管理和监控

Kafka

一种高吞吐量的分布式发布订阅消息系统,可以处理消费者规模的网站中的所有动作流数据

Spark

类似于Hadoop MapReduce的通用并行框架

我在这里主要记录的是hdfs和mapdece,hadoop部署方式为单机模式、伪分布式、完全分布式,在这里建议大家个人学习的话建立伪分布式就可以,在自己本机搭建虚拟机搭建hadoop,关于安装方式我在这里不一一介绍了,大家可以浏览我的另一篇帖子http://blog.csdn.net/qq_28767763/article/details/58595081,或者从网上查找

分布式文件系统HDFS:

分布式文件系统把文件分布存储到多个计算机节点上,成千上万的计算机节点构成计算机集群,都是由普通的硬件设备组成,成本很低,分布式文件系统在物理结构上是由计算机集群中的多个节点构成的,这些节点分为两类,一类叫“主节点”(Master Node)或者也被称为“名称结点”(NameNode),另一类叫“从节点”(Slave Node)或者也被称为“数据节点”(DataNode)

hdfs:

兼容廉价的硬件设备

流数据读写

大数据集

简单的文件模型

强大的跨平台兼容性


有优点的同时也存在一些局限性

不适合低延迟数据访问(低延迟可采用hbase)

无法高效存储大量小文件

不支持多用户写入及任意修改文件


HDFS存取文件是通过块的方式来存取文件,将文件写在HDFS会把文件按块来划分

HDFS默认一个块128MB,一个文件被分成多个块,以块作为存储单位

块的大小远远大于普通文件系统,可以最小化寻址开销,块的大小可以进行配置,配置地址:



nameNode 和 DateNode 的地址,在hdfs-site.xml 文件中 ,配置,其中dfs.name.dir是元素据nameNode 的存放地址,dfs.data.dir 是DateNode 的存放地址


在HDFS中,名称节点(NameNode)负责管理分布式文件系统的命名空间(Namespace),保存了两个核心的数据结构,即FsImage和EditLog
FsImage用于维护文件系统树以及文件树中所有的文件和文件夹的元数据
操作日志文件EditLog中记录了所有针对文件的创建、删除、重命名等操作
名称节点记录了每个文件中各个块所在的数据节点的位置信息


在名称节点运行期间, HDFS 的所有更新操作都是直接写到 EditLog 中,久而久之, EditLog 文件将会变得很大

虽然这对名称节点运行时候是没有什么明显影响的,但是,当名称节点重启的时候,名称节点需要先将 FsImage 里面的所有内容映像到内存中,然后再一条一条地执行 EditLog 中的记录,当 EditLog 文件非常大的时候,会导致名称节点启动操作非常慢,而在这段时间内 HDFS 系统处于安全模式,一直无法对外提供写操作,影响了用户的使用

解决:SecondaryNameNode 第二名称节点

第二名称节点HDFS架构中的一个组成部分,它是用来保存名称节点中对HDFS元数据信息的备份,并减少名称节点重启的时间。SecondaryNameNode一般是单独运行在一台机器上

DataNode

数据节点是分布式文件系统 HDFS 的工作节点,负责数据的存储和读取,会根据客户端或者是名称节点的调度来进行数据的存储和检索,并且向名称节点定期发送自己所存储的块的列表
每个数据节点中的数据会被保存在各自节点的本地 Linux 文件系统

通过TCP/IP进行传输的分布式文件存储系统

这里说一下 HDFS采取的是冗余数据保存


配置的时候如果配置是1,只会在一台机器上存数据,其他机器上没有数据,(伪分布式)HDFS采用了多副本方式对数据进行冗余存储,通常一个数据块的多个副本会被分布到不同的数据节点上,数据块1被分别存放到数据节点AC上,数据块2被存放在数据节点AB上,这样会加快数据的传输速度

在数据存放的时候

第一个副本:放置在上传文件的数据节点;如果是集群外提交,则随机挑选一台磁盘不太满、CPU不太忙的节点
第二个副本:放置在与第一个副本不同的机架的节点上
第三个副本:与第一个副本相同机架的其他节点上
更多副本:随机节点

另外可以配置HDFS的地址端口,通过 core-site.xml  中


读取:

val filePath =  "hdfs://10.20.30.91:8020/app*.log"
val bankText = sc.textFile(filePath)

写:

String filename = " hdfs://10.20.30.91:8020/app.log "; //要写入的文件名

FSDataOutputStream os = fs.create(new Path(filename));

os.write(buff,0,buff.length);

mapduce:

首先给大家看几张图:

这是mapreduce的运行机制图


开始讲一下我的理解

mapduce是一个计算框架,有输入有输出,mapduce 分为map 和duce



    一个比较形象的语言解释MapReduce:  

    We want to count all the books in the library. You count up shelf #1, I count up shelf #2. That’s map. The more people we get, the faster it goes.

    我们要数图书馆中的所有书。你数1号书架,我数2号书架。这就是“Map”。我们人越多,数书就更快。

    Now we get together and add our individual counts. That’s reduce.

    现在我们到一起,把所有人的统计数加在一起。这就是“Reduce”。



mapduce 将数据进行分区,每一个分区交给一个map去处理,处理之后,再交给duce 进行整合

WordCount程序任务




待更新

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值