찾다
데이터 베이스MySQL 튜토리얼Hadoop in Action学习笔记

Hadoop in Action学习笔记

Jun 07, 2016 pm 04:30 PM
actionhadoop공부하다메모

第一章 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,一种分布式编程范式(分布式存储和分布式计算)。

**优点:**
? 方便
? 健壮
? 线性可扩展
? 简单
分布式系统 VS 大型单机服务器
向外扩展 VS  向上扩展
构建在一般/低端商用机器上,廉价
高端服务器,价格昂贵
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):

0 NameNode (名字节点)
1 DataNode (数据节点)
2 Secondary NameNode (次名字节点)
3 JobTracker (作业跟踪节点)
4 TaskTracker (任务跟踪节点)

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节点主机列表

运行的三种模式:本地(单机)模式,伪分布模式和全分布模式

bin/hadoop namenode -format
bin/start-all.sh
jps
基于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会创建指定的多层目录结构。

如:

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 减少输入数据
a. 采样数据,只处理数据的子集
b. “重构”数据,仅使用需要的字段(要求开发人员清楚的了解数据和自己的业务需求)
#上面两个方案一个是**横切**一个是**纵切**,都是减少输入数据的方法
3 使用压缩

即使使用了combiner,在map阶段的输出也可能很大。这些中间数据必须被存储在磁盘上,并在网络上重排。压缩这些中间数据会提高大多数MapReduce作业的性能。Hadoop内置支持压缩和解压缩。

压缩的参数配置P130
mapred.compress.map.output
mapred.map.output.compression.codec
SequenceFIleOutputFormat 序列文件输出
4 重用JVM

mapred.job.reuse.jvm.num.task 指定一个JVM可以运行的最大任务数

5 根据猜测执行来运行

在所有的mapper完成之前,reducer都不会启动;类似的,在所有的reducer完成之前,一个作业也不会结束。

问题:当其中一个任务变慢时(注意不是失效),MapReduce如何处理?

Hadoop会注意到运行速度缓慢的任务,并安排在另一个节点上并行执行相同的任务。

**参数:**
mapred.map.tasks.speculative.execution
mapred.reduce.tasks.speculative.execution
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 系统体检
bin/hadoop fsck  #file system check
bin/hadoop dfsadmin -report
8.3 权限设置
8.4 配额管理
bin/hadoop dfsadmin -setQuota  dir
bin/hadoop dfsadmin -setSpaceQuota  dir
bin/hadoop fs -count -q dir #显示目录的配额
8.5 启动回收站

fs.trash.interval属性(以分钟为单位)

8.6 删减DataNode
dfs.hosts.exclude=file-point-to-exclude-host-list
bin/hadoop dfsadmin -refreshNodes
8.7 增加DataNode
8.8 管理NameNode和SNN

减轻NameNode负担的一种方法是增加数据块的大小,以降低文件系统中元数据的数据量,dfs.block.size 默认64M

SNN是做什么的?

取了一个不妥的名字。首先并不是NameNode的失效备份

把SNN视为一个检查点服务器更为合适,用于合并下面两个文件以形成系统快照。

可能在0.21中被弃用
FsImage
EditLog
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---

성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
MySQL에서 데이터베이스 업그레이드를 어떻게 처리합니까?MySQL에서 데이터베이스 업그레이드를 어떻게 처리합니까?Apr 30, 2025 am 12:28 AM

MySQL 데이터베이스를 업그레이드하는 단계에는 다음이 포함됩니다. 1. 데이터베이스 백업, 2. 현재 MySQL 서비스 중지, 3. 새 버전의 MySQL 설치, 4. 새 버전의 MySQL 서비스 시작, 5. 데이터베이스 복구. 업그레이드 프로세스 중에 호환성 문제가 필요하며 Perconatoolkit과 같은 고급 도구를 테스트 및 최적화에 사용할 수 있습니다.

MySQL에 사용할 수있는 다른 백업 전략은 무엇입니까?MySQL에 사용할 수있는 다른 백업 전략은 무엇입니까?Apr 30, 2025 am 12:28 AM

MySQL 백업 정책에는 논리 백업, 물리적 백업, 증분 백업, 복제 기반 백업 및 클라우드 백업이 포함됩니다. 1. 논리 백업은 MySQLDump를 사용하여 데이터베이스 구조 및 데이터를 내보내며 소규모 데이터베이스 및 버전 마이그레이션에 적합합니다. 2. 물리적 백업은 데이터 파일을 복사하여 빠르고 포괄적이지만 데이터베이스 일관성이 필요합니다. 3. 증분 백업은 이진 로깅을 사용하여 변경 사항을 기록합니다. 이는 큰 데이터베이스에 적합합니다. 4. 복제 기반 백업은 서버에서 백업하여 생산 시스템에 미치는 영향을 줄입니다. 5. AmazonRDS와 같은 클라우드 백업은 자동화 솔루션을 제공하지만 비용과 제어를 고려해야합니다. 정책을 선택할 때 데이터베이스 크기, 가동 중지 시간 허용 오차, 복구 시간 및 복구 지점 목표를 고려해야합니다.

MySQL 클러스터링이란 무엇입니까?MySQL 클러스터링이란 무엇입니까?Apr 30, 2025 am 12:28 AM

mysqlclusteringenhancesdatabaserobustness andscalabilitydaturedingdataacrossmultiplenodes.itusesthendbenginefordatareplicationandfaulttolerance, highavailability를 보장합니다

MySQL의 성능을 위해 데이터베이스 스키마 설계를 어떻게 최적화합니까?MySQL의 성능을 위해 데이터베이스 스키마 설계를 어떻게 최적화합니까?Apr 30, 2025 am 12:27 AM

MySQL에서 데이터베이스 스키마 설계 최적화는 다음 단계를 통해 성능을 향상시킬 수 있습니다. 1. 인덱스 최적화 : 공통 쿼리 열에서 인덱스 생성, 쿼리의 오버 헤드 균형 및 업데이트 삽입. 2. 표 구조 최적화 : 정규화 또는 정상화를 통한 데이터 중복성을 줄이고 액세스 효율을 향상시킵니다. 3. 데이터 유형 선택 : 스토리지 공간을 줄이기 위해 Varchar 대신 Int와 같은 적절한 데이터 유형을 사용하십시오. 4. 분할 및 하위 테이블 : 대량 데이터 볼륨의 경우 파티션 및 하위 테이블을 사용하여 데이터를 분산시켜 쿼리 및 유지 보수 효율성을 향상시킵니다.

MySQL 성능을 어떻게 최적화 할 수 있습니까?MySQL 성능을 어떻게 최적화 할 수 있습니까?Apr 30, 2025 am 12:26 AM

tooptimizemysqlperformance, followthesesteps : 1) 구현 properIndexingToSpeedUpqueries, 2) useExplaintoAnalyzeanDoptimizeQueryPerformance, 3) AdvertServerConfigUrationSettingstingslikeInnodb_buffer_pool_sizeandmax_connections, 4) uspartOflEtOflEtOflestoI

데이터 처리 및 계산에 MySQL 기능을 사용하는 방법데이터 처리 및 계산에 MySQL 기능을 사용하는 방법Apr 29, 2025 pm 04:21 PM

MySQL 기능은 데이터 처리 및 계산에 사용될 수 있습니다. 1. 기본 사용에는 문자열 처리, 날짜 계산 및 수학 연산이 포함됩니다. 2. 고급 사용에는 복잡한 작업을 구현하기 위해 여러 기능을 결합하는 것이 포함됩니다. 3. 성능 최적화를 위해서는 WHERE 절에서 기능 사용 및 GroupBy 및 임시 테이블 사용을 피해야합니다.

MySQL에 데이터를 일괄 삽입하는 효율적인 방법MySQL에 데이터를 일괄 삽입하는 효율적인 방법Apr 29, 2025 pm 04:18 PM

MySQL에 데이터 삽입을위한 효율적인 방법은 다음과 같습니다. 1. InsertInto 사용 ... 값 구문 사용 ... 값 구문, 2. 트랜잭션 처리 사용, 3. 트랜잭션 처리 사용, 4. 배치 크기 조정, 5. 인덱스 비활성화, 6. Insertignore 또는 Insert ... ondupliceKeyUpdate를 사용하여 데이터베이스 작동 효율성을 크게 향상시킬 수 있습니다.

MySQL 테이블에 필드를 추가 및 삭제하는 단계MySQL 테이블에 필드를 추가 및 삭제하는 단계Apr 29, 2025 pm 04:15 PM

MySQL에서는 altertabletable_nameaddcolumnnew_columnvarchar (255) 이후에 필드를 추가하여 altertabletable_namedropcolumncolumn_to_drop을 사용하여 필드를 삭제합니다. 필드를 추가 할 때는 쿼리 성능 및 데이터 구조를 최적화하기위한 위치를 지정해야합니다. 필드를 삭제하기 전에 작업이 돌이킬 수 없는지 확인해야합니다. 온라인 DDL, 백업 데이터, 테스트 환경 및 저하 기간을 사용하여 테이블 구조 수정은 성능 최적화 및 모범 사례입니다.

See all articles

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

Video Face Swap

Video Face Swap

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

뜨거운 도구

Atom Editor Mac 버전 다운로드

Atom Editor Mac 버전 다운로드

가장 인기 있는 오픈 소스 편집기

에디트플러스 중국어 크랙 버전

에디트플러스 중국어 크랙 버전

작은 크기, 구문 강조, 코드 프롬프트 기능을 지원하지 않음

SublimeText3 Mac 버전

SublimeText3 Mac 버전

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

안전한 시험 브라우저

안전한 시험 브라우저

안전한 시험 브라우저는 온라인 시험을 안전하게 치르기 위한 보안 브라우저 환경입니다. 이 소프트웨어는 모든 컴퓨터를 안전한 워크스테이션으로 바꿔줍니다. 이는 모든 유틸리티에 대한 액세스를 제어하고 학생들이 승인되지 않은 리소스를 사용하는 것을 방지합니다.

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse용 SAP NetWeaver 서버 어댑터

Eclipse를 SAP NetWeaver 애플리케이션 서버와 통합합니다.