Hadoop in Action学习笔记
第一章 Hadoop简介 现今,互联网每天都产生海量的数据,现有工具对于TB、PB级别大规模分布式海量数据变得无力处理。 Google首先推出了处理大规模分布式数据的MapReduce计算范式,Doug Cutting领导开发了一个开源版的MapReduce,后来成为Hadoop。 什么是Hadoo
第一章 Hadoop简介
现今,互联网每天都产生海量的数据,现有工具对于TB、PB级别大规模分布式海量数据变得无力处理。
Google首先推出了处理大规模分布式数据的MapReduce计算范式,Doug Cutting领导开发了一个开源版的MapReduce,后来成为Hadoop。
什么是Hadoop
Hadoop是一个开源框架,可编写和运行分布式应用处理大规模数据。一般认为Hadoop包含两个核心部分:HDFS,Hadoop分布式文件系统和MapReduce,一种分布式编程范式(分布式存储和分布式计算)。
1 2 3 4 5 |
|
分布式系统 VS 大型单机服务器
1 2 3 |
|
Hadoop设计理念和SETI@Home的区别
Hadoop设计用于数据密集型任务,遵循将程序向数据移动的设计哲学,即尽可能的保持数据不动,减少I/O的访问,程序文件的数量级相对于数据的数量级小得多
SETI@Home设计用于计算密集型任务,遵循将数据向计算资源(计算机)移动的设计哲学;因为数据传输量小,但是需要大量的计算资源(CPU时间)
Hadoop与SQL数据库的比较
都是处理数据,SQL数据库用于处理结构化数据
Hadoop应用针对的是文本数据/可能是结构的也可能使非结构或者半结构化数据
1. 向外扩展 代替向上扩展
2. 用键/值对 代替关系表
3. 用函数式编程(MapReduce)代替申明式查询(SQL)
4. 用离线处理代替在线处理
数据密集型分布式应用中,数据传输的代价昂贵,应保持数据存储和处理紧密的绑定在一起。
Hadoop的历史
2004年 Goole发表Google文件系统(GFS)和MapReduce框架
Doug Cutting将Nutch项目移植到GFS和MapReduce上,并设立了专门的项目充实这两种技术,于是就有了Hadoop
2006年 Yahoo聘用Doug Cutting,让他和一个专门团队一起改进Hadoop
2008年 Hahoop成为Apache的顶级项目
第二章 初识Hadoop
“运行Hadoop”意味着在不同服务器运行一组守护进程(daemons):
1 2 3 4 5 |
|
Hadoop在分布式计算和分布式存储中都采用了主/从(Master/Slaver)的结构
NameNode,JobTracker是Master节点
DataNode,TaskTracker和Slaver节点
运行Hadoop
配置文件:core-site.xml, hdfs-site.xml和mapred-site.xml
conf/masters - master节点主机列表
conf/slaves - slave节点主机列表
运行的三种模式:本地(单机)模式,伪分布模式和全分布模式
1 2 3 |
|
基于WEB的管理界面
NameNode状态界面: namenode-host:50070
JobTracker状态界面: jobtacker-host:50030
第三章 Hadoop组件
HDFS文件系统
HDFS是一种文件系统,专为MapReduce这类框架下的大规模分布式处理而设计的
可以处理单个的大数据集(比如100TB),而大多数文件系统物理实现这点。
?是不是说HDFS处理单个大数据集更加有效,而处理小文件的大量数据变现的不是很有优势,当然,如果这样也可以先把小文件组成大文件。
?文件要多大才能适合HDFS/Hadoop的处理呢?
可不要为了数据大而大,数据应该在必要的清洗和预处理
Hadoop的基本文件命令
hadoop fs -cmd
HDFS中,默认的根目录是/user/$USER 其中USER是你登录系统的用户名
1. 添加文件和目录
hadoop fs -mkdir <dir-name></dir-name>
将在/user/$USER目录下创建
如:
hadoop fs -mkdir inputs/dataset1 会创建/user/$USER/inputs/dataset1
2. 列举文件清单
hadoop fs -ls <file-dir-name></file-dir-name>
和Unix系统ls本地文件类似
hadoop fs -lsr <file-dir-name></file-dir-name>
查看所有文件和文件的子目录,递归的列出文件清单
3. 复制本地文件到HDFS
hadoop fs -put <file-dir-name-to-put-in-hdfs> <file-dir-on-hdfs></file-dir-on-hdfs></file-dir-name-to-put-in-hdfs>
4. 从HDFS上检索文件到本地系统
hadoop fs -get <file-dir-on-hdfs-to-get> <file-dir-name-on-localhost></file-dir-name-on-localhost></file-dir-on-hdfs-to-get>
这是一个与hadoop fs -put相反的操作。
5. 查看HDFS上文件的内容
hadoop fs -cat <file-name-to-cat></file-name-to-cat>
例如:
hadoop fs -cat example.txt
同样假设文件在默认的工作目录/user/$USER下
6. 删除文件/目录
hadoop fs -rm <file-name-to-remove></file-name-to-remove>
例如:
hadoop fs -rm example.txt
这个命令用来删除文件,要删除文件夹是使用 -rmr 命令:
hadoop fs -rmr <dir-name-to-remove></dir-name-to-remove>
例如:
hadoop fs -rmr input
这里的r
代表递归的删除文件。
7. 查看文件命令帮助
hadoop fs -help <cmd></cmd>
例如:
hadoop fs -help rmr
查看rmr命令的帮助文件
8. hadoop文件命令与Unix管道一起使用
例如:
hadoop fs -cat example.txt | head -n 20
Hadoop数据的读和写
遵循并行处理数据分片原则的输入数据通常为单一的大文件。这也是Hadoop分布式文件系统的设计策略。
FSDataInputStream支持随机读取,这一特性涉及到MapReduce的数据分片机制。
随机读取,当一个任务失败时,恢复时不用从头读取文件,只需要从失败的位置进行恢复。
InputFormat
Hadoop分割与读取输入文件的方式在InputFormat接口中定义,TextInputFormat是InputFormat的默认实现。Hadoop提供的其他的InputFormat实现有:
KeyValueTextInputFormat,SequenceFileInputFormat和NLineInputFormat
OutputFormat
通过使用IntWritable类变量可以提高reduce()的性能,IntWritable类的处理性能要比Text高。
第四章 编写MapReduce基础程序
mapper container partitioner reducer
使用Combiner提升性能
Combiner作用上与Reduce等价,起到聚合、结合作用,原则上程序必须没有Combiner也能够得到正确的结果
1. 网络洗牌时减少数据传输流量,考虑10亿条Mapper键值对的输出,如果没有Combiner会在网络洗牌过程中造成多大的流量
2. 数据分布不均匀时,造成大量Mapper的键值对输出跑向同一个Reducer
原理就是通过Combiner减少Mapper的输出数量以降低网络和Reducer上的压力,Combiner位于Mapper和Reducer中间,被视为是Reducer的助手,在数据转换上必须与Reducer等价,也就是如果我们去掉Combiner,Reducer的输出应该保持不变。
但是Combiner未必会提高性能,这要看Combiner是否能有效的减少Mapper输出记录的数量。
第五章 高阶MapReduce
MapReduce之间的依赖
Hadoop通过Job和JobControl类来管理作业之间的非线性依赖关系。
x.addDependingJob(y)
ChainMapper ChainReducer
链接MapReduce是,mapper、reducer之间的输入输出按照值传递还是引用传递的问题。P100
如果确保上游的Map/Reduce不是用其输出数据,或者下游Map/Reduce不改变上游的输出数据,可以使用by reference以提高一定的性能
联结不同来源的数据
1. Reduce侧的联结
repartitioned join 重分区联结
repartitioned sort-mergejoin 重分区排序-合并联结
结合DataJoin包使用钩子处理数据流P93
2. Mapper侧的联结P98
DistributedCache 分布式缓存
应用场景:一个数据源较大,另一个数据源可能小几个数量级,将较小的数据源装入内存,复制到所有的Mapper,在map阶段执行联结。通常小的数据源也叫做“背景数据”
第六章 编程实践
本地模式
1 计算的完整性检查
数学和逻辑错误在数据密集型程序中更加普遍,而它们往往并不明显!
数学计数或者算术如何检查正确性,在分布式计算中数学公式可能要重新设计,但是如何验证计算的完整性和准确性也就十分的重要。
方法:
可是通过宏观的查看一些指标,比如平均值,整体计数、最大值等来进行初步验证
2 回归测试
可能代价会很大,但是可以选取一部分数据集进行测试。所谓回归测试就是在同一数据集上比较代码修改前后算法的输出结果是否一致,如果每次回归测试的结果都是一样的,那么可以判定修改没有导致出现新的问题。
3 考虑使用LONG而不是INT
伪分布模式
1 日志
2 JOBTRACKER的WEB管理界面
3 杀掉作业
生产集群上的监控与调试
计数器 Reporter.incrCounter()
跳过坏记录 skipping模式的设置P126
用IsolationRunner重新运行出错的任务
性能调优
Hadoop的线性可扩展性
1 通过combiner来减少网络流量
2 减少输入数据
1 2 3 |
|
3 使用压缩
即使使用了combiner,在map阶段的输出也可能很大。这些中间数据必须被存储在磁盘上,并在网络上重排。压缩这些中间数据会提高大多数MapReduce作业的性能。Hadoop内置支持压缩和解压缩。
1 2 3 4 |
|
4 重用JVM
mapred.job.reuse.jvm.num.task 指定一个JVM可以运行的最大任务数
5 根据猜测执行来运行
在所有的mapper完成之前,reducer都不会启动;类似的,在所有的reducer完成之前,一个作业也不会结束。
问题:当其中一个任务变慢时(注意不是失效),MapReduce如何处理?
Hadoop会注意到运行速度缓慢的任务,并安排在另一个节点上并行执行相同的任务。
1 2 3 |
|
6 代码重构与算法重写
6.1 将Streaming程序重写为Java程序
6.2 在一次作业中集中一次处理类似的任务,而不是每一个任务都启动一个作业,比如计算最大值、最小值和均值等在同一数据集上的计算可以在一个Job中完成,而不要分为不同的Job
6.3 设计特定的新的适合MapReduce框架的算法
第七章 细则手册
7.1 向任务传递作业定制的参数
在JobConf中定制自己的参数,在所有的Task中都能读取到。
7.2 探查任务特定信息
7.3 划分为多个输出文件
MultipleOutputFormat 键/值区分,写入不同的文件, 一个Collector 不同文件名
MultipleOutputs 属性区分,写入不同的文件,多个Collector写文件
7.4 以数据库作为输入输出
DBOutputFormat
7.5 保持输出的顺序
第八章 管理Hadoop
8.1 为实际应用设置特定参数值
8.2 系统体检
1 2 |
|
8.3 权限设置
8.4 配额管理
1 2 3 |
|
8.5 启动回收站
fs.trash.interval属性(以分钟为单位)
8.6 删减DataNode
1 2 |
|
8.7 增加DataNode
8.8 管理NameNode和SNN
减轻NameNode负担的一种方法是增加数据块的大小,以降低文件系统中元数据的数据量,dfs.block.size 默认64M
SNN是做什么的?
取了一个不妥的名字。首先并不是NameNode的失效备份
把SNN视为一个检查点服务器更为合适,用于合并下面两个文件以形成系统快照。
1 2 3 |
|
8.9 恢复失效的NameNode
备份NameNode的元数据文件(dfs.name.dir)到SNN节点,或者其他多个节点。
8.10 感知网络布局和机架的设计
DataNode数据块的副本策略 标准副本为3个:
第1个 在同一个DataNode上
第2个 不同的机架上的DataNode上
第3个 与第二个同机架的不同DataNode上
如果大于3个副本,其他的随机放置的不同节点上
topology.script.file.name
机架感知,配置Hadoop是NameNode知道DataNode的机架分布结构
8.11 多用户作业调度
8.11.1 多个JobTracker
8.11.2 公平调度器 (Facebook)
第九章 在云上运行Hadoop
租用 经济 Amazon Web Services(AWS)
Elastic Compute Clous(EC2) 弹性计算云
Simple Storage Service(S3)简单存储服务
1 AWS与外部网络通信的带宽需要收取费用,EC2内部不需要收费。
2 先存储在S3 在从S3中复制到主节点
S3中存储数据同样要收费 但是 存储空间可扩展、一次存储可以多次使用、资费相对低、S3和EC2是内部网,之间复制数据没有费用且速度快
3 还可以直接将S3作为输入输出文件地址,而不用复制数据到HDFS
第十章 用Pig编程(Not Finished)
Pig是架构在Hadoop之上的高级数据处理层。
易用性、高性能、大规模可扩展能力是所有Hadoop子项目的期望
“Pig吃任何东西”
Pig Latin命令运行: Grunt Shell、脚本文件、嵌入在Java程序中。
第十一章 Hive及Hadoop群
Pig——一种高级数据流语言
Hive——一种类SQL数据仓库基础设施
HBase——一种模仿Google BigTable的分布式的、面向列的数据库
ZooKeeper——一种用于管理分布式应用之间共享状态的可靠的协同系统
Cascading——是Hadoop上用于组装和执行复杂数据处理工作流的一个API
Hama——矩阵计算软件包,用于计算乘积、逆、特征值、特征向量和其他矩阵运算
Mahout——基于Hadoop实现机器学习算法
Hive
Hive是建立在Haddop基础之上的数据仓库软件包
HiveQL——类SQL的数据查询语言
MetaStore ——用于存放元数据的组件,存储在Derby关系数据库中(存取速度的考虑)
---EOF---
原文地址:Hadoop in Action学习笔记, 感谢原作者分享。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

Xiaohongshu 메모를 삭제하는 방법 Xiaohongshu 앱에서 메모를 편집할 수 있습니다. 다음으로 편집기는 Xiaohongshu 메모 삭제 방법에 대한 사용자 사진과 텍스트를 가져옵니다. 보세요! Xiaohongshu 사용 튜토리얼 Xiaohongshu 메모 삭제 방법 1. 먼저 Xiaohongshu 앱을 열고 메인 페이지로 들어가서 오른쪽 하단에 있는 [Me]를 선택하여 특별 영역으로 들어갑니다. 2. 그런 다음 내 영역에서 다음과 같이 메모 페이지를 클릭합니다. 3. 노트 페이지에 들어가서 오른쪽 상단에 있는 [점 3개]를 클릭합니다. 4. 마지막으로 기능 표시줄이 하단에 확장되고 [삭제]를 클릭하여 완료합니다.

더 이상 pip가 필요하지 않나요? 와서 pip를 효과적으로 제거하는 방법을 알아보세요! 소개: pip는 Python 패키지를 쉽게 설치, 업그레이드 및 제거할 수 있는 Python의 패키지 관리 도구 중 하나입니다. 그러나 때로는 다른 패키지 관리 도구를 사용하고 싶거나 Python 환경을 완전히 지워야 하기 때문에 pip를 제거해야 할 수도 있습니다. 이 문서에서는 pip를 효율적으로 제거하는 방법을 설명하고 구체적인 코드 예제를 제공합니다. 1. pip 제거 방법 다음은 pip 제거의 두 가지 일반적인 방법을 소개합니다.

Xiaohongshu 사용자로서 우리 모두는 게시된 노트가 갑자기 사라지는 상황을 경험해 본 적이 있을 것입니다. 이는 의심할 여지 없이 혼란스럽고 걱정스러운 일입니다. 이런 경우, 우리는 어떻게 해야 합니까? 이번 글에서는 "샤오홍슈에서 발행한 노트가 누락된 경우 어떻게 해야 할까요?"라는 주제를 중심으로 자세한 답변을 드리겠습니다. 1. Xiaohongshu에서 발행한 노트가 누락된 경우 어떻게 해야 합니까? 첫째, 당황하지 마십시오. 메모가 누락된 경우 침착함을 유지하는 것이 중요하며 당황하지 마십시오. 이는 플랫폼 시스템 장애 또는 운영 오류로 인해 발생할 수 있습니다. 출시 기록을 확인하는 것은 쉽습니다. Xiaohongshu 앱을 열고 "나" → "게시" → "모든 출판물"을 클릭하면 자신의 출판 기록을 볼 수 있습니다. 여기에서는 이전에 게시된 메모를 쉽게 찾을 수 있습니다. 3.다시 게시합니다. 발견된 경우

matplotlib 색상표에 대해 자세히 알아보려면 특정 코드 예제가 필요합니다. 1. 소개 matplotlib는 다양한 유형의 차트를 만드는 데 사용할 수 있는 풍부한 그리기 기능 및 도구 세트를 제공합니다. 컬러맵(colormap)은 차트의 색 구성표를 결정하는 matplotlib의 중요한 개념입니다. matplotlib 색상표에 대한 심층적인 연구는 matplotlib의 그리기 기능을 더 잘 익히고 그리기를 더 편리하게 만드는 데 도움이 될 것입니다.

DJI는 아직 새로운 액션 카메라 출시 계획을 확정하지 않았습니다. 대신 GoPro는 9월 4일에 두 개의 새로운 액션 카메라를 출시할 것이라고 예고하면서 올해 경쟁사보다 앞서 나갈 것으로 보입니다.

Xiaohongshu 노트에 제품 링크를 추가하는 방법 Xiaohongshu 앱에서는 사용자가 다양한 콘텐츠를 탐색할 수 있을 뿐만 아니라 쇼핑도 할 수 있기 때문에 이 앱에는 쇼핑 추천 및 좋은 제품 공유에 대한 콘텐츠가 많이 있습니다. 이 앱에서는 일부 쇼핑 경험을 공유하고, 협력할 판매자를 찾고, 메모에 링크를 추가하는 등의 작업도 할 수 있습니다. 이 앱은 편리할 뿐만 아니라 많은 전문가가 만들 수 있기 때문에 많은 사람들이 쇼핑에 기꺼이 이 앱을 사용합니다. 흥미로운 콘텐츠를 탐색하고 자신에게 맞는 의류 제품이 있는지 확인할 수 있습니다. 노트에 제품 링크를 추가하는 방법을 살펴보겠습니다. 샤오홍슈 노트에 제품 링크를 추가하는 방법 휴대폰 데스크톱에서 앱을 엽니다. 앱 홈페이지를 클릭하세요

처음부터 Pygame 배우기: 전체 설치 및 구성 튜토리얼, 특정 코드 예제 필요 소개: Pygame은 Python 프로그래밍 언어를 사용하여 개발된 오픈 소스 게임 개발 라이브러리로, 개발자가 다양한 유형을 쉽게 만들 수 있도록 풍부한 기능과 도구를 제공합니다. 게임의. 이 기사는 처음부터 Pygame을 배우는 데 도움이 될 것이며, 완전한 설치 및 구성 튜토리얼과 빠른 시작을 위한 특정 코드 예제를 제공할 것입니다. 1부: Python 및 Pygame 설치 먼저 다음 사항을 확인하세요.

C 언어 학습의 매력: 프로그래머의 잠재력을 여는 것 지속적인 기술 발전으로 컴퓨터 프로그래밍은 많은 주목을 받는 분야가 되었습니다. 많은 프로그래밍 언어 중에서 C 언어는 항상 프로그래머들에게 사랑을 받아 왔습니다. C 언어의 단순성, 효율성 및 폭넓은 적용 덕분에 많은 사람들이 프로그래밍 분야에 입문하는 첫 번째 단계는 C 언어입니다. 이 기사에서는 C 언어 학습의 매력과 C 언어 학습을 통해 프로그래머의 잠재력을 발휘하는 방법에 대해 설명합니다. 우선, C 언어 학습의 매력은 단순함에 있습니다. C언어는 다른 프로그래밍 언어에 비해
