笔记汇总 1.Zookeeper用于集群主备切换。 2.YARN让集群具备更好的扩展性。 3.Spark没有存储能力。 4.Spark的Master负责集群的资源管理,Slave用于执行计算任务。 5.Hadoop从2.x开始,把存储和计算分离开来,形成两个相对独立的子集群:HDFS和YARN,MapReduce依附于YARN来运行。 6.YARN可以为符合YARN编程接口需求的集群提供调度服务。 7.YARN: ResourceManager一主多备 NodeManager一般与DataNode部署在一起。 8.单机硬件配置会严重影响集群的性能。 9.初始化集群机器环境:创建账号、安装JDK、设置时间同步。 10.Zookeeper的部署最简单,其节点数必为奇数。 11.ZK两个端口,前者是链接Leader后者是用于竞选。 12.部署SparkStandLone集群: 1.SSH无密码登录 2.复制解压Spark 3.编写配置文件分发到所有节点 13.以上支持双机热备。 14.Standlone模式只支持简单的固定资源分配策略。 15.YARN统一为集群上的所有计算负载分配资源,可以避免资源分配的混乱无序。 16.Spark程序由Master还是YARN来调度执行,是由Spark程序在提交时决定的。 17.YARN两种调度模式: Yarn-cluster模式,用于生产 Yarn-client模式,用于交互 18.Spark计算都是围绕RDD进行的。 19.Spark在运行时,一般RDD操作会为每个RDD分区运行一个job。 20.Job最简单的理解,它对应一个java线程。 21.Spark所有基于文件的生产RDD方法,都支持目录、压缩文件和通配符。 22.RDD是Spark的核心抽象,所有计算都围绕RDD进行。 23.RDD操作分为两类: Transformation转换 Action动作 24.所有Transformation都是Lazy模式,先记录计算方式,Driver返回结果时开始计算。 25.RDD的Transformation实际计算只在Action返回结果时才进行,或者持久化。 26.Spark严重依赖传递函数类型的参数。 27.从Driver分发各个节点过程: Job执行: 1.在Driver节点上序列化代码 2.传送至各个计算节点 3.在计算节点上反序列化 4.执行 28.Scalafunction支持序列化。 29.Spark的核心是RDD,而RDD是分布式计算的。 30.Spark会将Job运行所有依赖的变量、方法、(闭包)全部打包在一起序列化。 31.RDD操作的禁忌,不能嵌套调用。 32.Action操作输出不再是RDD,返回值Driver程序。 33.Spark集群上的资源主要是CPUcore数量和物理内存。 34.在程序运行时,每个core对应一个线程。 35.Standlone模式下由Spark集群中的master节点进行资源调度。 36.Spark调度两类: 1.spark程序见的调度(主) 2.spark程序内部的调度 37.用户编写的spark程序称为Driver程序。 38.每个驱动程序都有一个SparkContext对象,担负着与集群沟通的职责。 39.集群管理器负责集群的资源调度。 40.执行器,每个spark程序在每个节点上启动的一个进程。 41.一次RDDAction对应一次job。 42.Stage,job在执行过程中被分为多个阶段。 43.Task,在执行器上执行的最小单位。 44.Spark程序间的调度: 静态分配(主) 动态分配 45.所有集群管理器都支持静态资源分配。 46.当spark为多用户服务时,需要配置spark程序内部的调度。 47.不同线程提交的job可以并行执行。 48.默认spark的调度器以FIFO方式运行Job。 49.公平调度还支持对多个Job进行分组,分组称为调度池。 50.Spark性能优势,很大一部分原因是内存和缓存。 51.RDD持久化可以多次利用,性能提高10倍以上。 52.Spark提供两类共享变量——广播变量和计数器。 53.广播变量是一个只读变量,在所有节点上都是一份缓存。 54.计数器只能增加,用于技术和求和。 55.容错机制是分布式系统的一个重要能力。 56.DAG:有向无环图的计算任务集合。 57.分布式系统经常需要做检查点。 58.RDD也是一个DAG,每一个RDD都会记住创建该数据需要哪些操作——血统。 59.RDD依赖: 窄依赖——父分区对应一个子分区 宽依赖——父分区对应多个子分区 60.Spark提供了预写日志(journal),先将数据写入支持容错的文件系统中。 61.Sparkmaster容错: Standalone——Zookeeper 单点——本地重启 62.Slave节点失效: 1.Work异常停止 2.执行器异常停止 3.Driver异常退出 63.监控管理: 1.Web界面 2.Metrics 3.外部系统 64.Web界面: 1.调度器stage,Task列表 2.RDD大小和内存文件统计情况 3.环境信息 4.正在执行的执行器信息 65.Standlone模式的集群管理器有自己的web界面。 67.Spark程序一般都是由脚本bin/spark-submit来提交的。 68.RDD特点: 1.RDD是只读的 2.RDD可指定缓存在内存中 3.RDD可以通过重新计算得到 69.RDD核心属性: 1.一个分区列表 2.一个依赖列表 3.一个名为compute的计算函数 4.分区器 5.计算各分区是优先的位置列表 70.Action不可以在RDDTranformation内部调用。 71.Transformation只是建立在计算关系,而action才是实际的执行者——触发者 72.用于shuffle。 73.SparkContext是spark程序最主要的入口。 74.每个jvm只允许启动一个sparkContext。 75.DAG是最高层级的调度,每个job对应一个DAG。 76.RunJob,提交RDDAction操作,是所有调度执行的入口。 77.sparkContext在初始化时,创建了DAG调度与task调度来负责RDDAction操作的调度执行。 78.任务提交时,不是按Job的先后顺序提交的,而是倒序的。 79.仅对依赖类型是shuffleDepency的RDD操作创建Stage。 80.DAG在调度室,对于在相同节点上进行的Task计算会合并为一个Stage。 81.各stage之间以shuffle为分界线。 82.SparkSQL是spark的一个子模块,专门用于处理结构化数据。 83.SparkSQL的最大优势是性能非常高。 84.SparkSQL与ApacheHive基本完全兼容。 85.SparkSQL提供领域API,并且提供专门的数据结构抽象DataFrame。 86.SparkSQL支持非常多的数据源:Hive、Avro、Jdbc、Json等,而且统一访问。 87.SparkSQL两种使用: 1.SQL引擎 2.API操作 88.分布式SQL引擎,两种运行方式: 1.JDBC/ODBCServer 2.SparkSQL命令行 89.SparkSQL相关的所有函数,都在SqlContext或它子类中。 90.DataFrame创建: 1.使用反射的方法从RDD创建DataFrame 2.使用程序动态从RDD创建DataFrame 3.从其他数据源生产DataFrame 91.DataFrame支持许多特殊的操作,称为领域编程语言或领域API。 92.DataFrame注册成表,然后使用纯SQL来访问。 93.Parquet是一种大数据计算中最常用的列式存储格式。 94.数据源类型的名称一般是全称。 95.优化是非常重要的环节,需要不断积累经验。 96.Catalyst(催化剂)是SparkSQL执行有限优化器的代号,最核心部分。 97.Catalyst最主要的数据结构是树。 98.所有优化都是基于规则的。 99.Catalyst优化: 1.分析阶段 2.逻辑优化阶段 3.物理优化阶段 4.代码优化阶段 100.Spark的性能基本上与数量大小保持线性关系。 101.SparkStreaming接收实时数据,按日期将数据划分为成多批次(Batch),按批次提交个核心计算。 102.SparkStreaming使用的数据抽象是DStream。 103.DStream内部是连续的RDD序列。 104.SprakStreaming3种输入DStream: 1.基本型 2.高级型 3.自定义 105.高级类型的输入DStream并不是由Spark提供。 106.使用数据源时,要注意可靠性。 107.DStream操作: 1.Transformation操作 2.Output操作类似RDDAction 108.Transform提供直接操作DStream内部RDD的方法。 109.SparkStreaming提供专门的状态更新方法。 110.设置数据的滑动窗口,将数个原始DStream合并成一个窗口DStream。 111.窗口(Window)通过连个参数确定:1)窗口长度、2)滑动区间。 112.Output操作将DStream结果输出到外部系统。 113.DStream可以序列化到内存。 114.窗口函数和updateStateBykey默认会自动持久化。 115.网络按收数据,默认持久化两个节点上,保证容错。 116.DStream基础属性: 1.依赖的在DStream列表 2.生产RDD的时间 3.Complete计算函数 117.RDD是只读的,可重复计算的分布式数据集。 118.SparkStreaming大部分数据来自网络。 119.流式计算过程: 输入数据流数据接收数据计算结果输出。 120.结果输出操作本身提供至少一次级别的容错性能。 121.Spark提供了检查点功能,用户定期记录中间状态。 122.检查点是有代价的,需要存储数据至存储系统。 123.Spark性能调优两个方向: 1.每个批次的处理时间尽可能短 2.收到数据后,尽可能快地处理 124.Storm是开源免费的分布式实时计算系统。 125.Storm的核心数据抽象是tuple,是命名的值列表。 126.SparkStreaming粗粒度,storm更细粒度些。 127.核心数据抽象的不同导致计算模式上的本质却别。 128.Weblog分析的典型的流式实时应用场景。 129.ZK以FastPaxos算法为基础。 130.ZK在分布式系统中协作多任务。 131.Hbase是一个通常与Hadoop一起使用的数据库。 132.Kafka是一个基于发布-订阅模型的消息系统。 133.Solr是一个企业级的搜索平台。 134.ZK不适合用作海量数据存储。 135.分布式系统中的进程通信有两种选择:直接通过网络进行信息交换,或读写某些共享存储。 136.ZK使用共享存储模型来实现应用间的协作和同步原语。 137.网络通信是分布式系统中并发设计的基础。 138.分布式系统需注意: 1.消息延迟——传输 2.处理器性能——计算 3.时钟偏移——时钟 139.数据中心通常使用大量统一的硬件。 140.主-从架构:主节点负责跟踪从节点状态和任务的有效性,并分配任务到节点。 141.主-从模式必解决三个关键问题: 1.主节点崩溃 2.从节点崩溃 3.通信故障 142.ZK因故障出现连个及以上主节点称为脑裂(split-brain)。 143.主-从架构的需求: 1.主节点选举 2.崩溃检测 3.组成员关系管理 4.元数据管理 144.ZK:Paxos算法和虚拟同步技术。 145.ZnodeZookeeper操作和维护一个小型的数据节点。 146.Znode类型决定了znode节点的行为方式。 147.Znode节点分持久节点和临时节点。 148.Znode4中类型: 1.持久化(persist) 2.临时的 3.持久有序的 4.临时有序的 149.通知机制是单次触发的操作。 150.每一个znode都有一个版本号,它随着每次数据变化而自增。 151.ZK服务器端两种模式:1)独立模式、2)仲裁模式。 152.对ZK集合执行请求需要建立会话。 153.会话请求以FIFO顺序执行。 154.会话状态: 1.Connecting 2.Connected 3.Closed 4.Notconnected 155.Server两个端口,第一个用作通讯,第二个用于选举。 156.ZK的API围绕ZK的句柄(handle)而构建。 157.为了从ZK接收通知,我们需要实现监视点(watcher)。 158.监视点和通知形成了一个通用机制。 159.当一个监视点被一个事件触发时,就会产生一个通知。 160.Redis是一个内存数据库,基于键值对存储。 161.Redis是REmoteDictionaryServer(远程字典服务器)简写。 162.Redis支持键值数据类型: 1.字符串类型 2.散列类型 3.列表类型 4.集合类型 5.有序集合类型 163.数据在Redis和程序中存储类似。 164.Redis数据库中的所有数据都存储在内存中。 165.Redis可以在一秒中读写上十万个键值(普通自己本)。 166.Redis提供数据持久化到硬盘。 167.Redis可用做缓存、队列系统。 168.Redis可以为每个键设置生存时间,过时自动删除。 169.Redis可以限定数据占用的最大内存空间。 170.Redis还支持“发布/订阅”的消息模式。 171.Redis支持阻塞式读取。 172.KillRedis进程的PID也可正常退出,Redis有处理。 173.每个数据类型Redis-cli的展现结果都不同。 174.Redis默认支持16个数据库,以数字命令。 175.Redis不支持自定义数据库的名字,每个数据库以编号命名。 176.Redis密码只有一个。 177.FLUSHALL命令清空Redis所有数据。 178.一个Redis最好对应一个程序。 179.Redis0号数据库用于生产,1号数据库用于测试。 180.Selectn切换数据库。 181.Keys命令需要遍历Redis中的所有键,不建议生产用。 182.Exictkey返回1/0。 183.Delkey返回键值个数,不支持通配符。 184.Type命名用来获取键值的数据类型。 185.LPOSH命令的作用是指定列表型键中增加一个元素。 186.Redis能存储任何形式的字符串。 187.RedisINCR命令让当前键值递增。 188.原子操作取“原子”的“不可拆分”的意思,最下执行单元。 189.Redis数据类型不支持数据类型嵌套。 190.散列类型适合存储:使用对象类别和ID构成键名,使用字段表示对象属性。 191.Redis不要求每个键都依据此结构存储。 192.Hset命令用来赋值,Hget用于取值。 193.Hset插入返回1,更新返回0。 194.Hset命令用于散列类型,set用于字符串类型。 195.Hmset处理多个字段。 196.HgetAll所有字段和字段值。 197.Hexists用于判断一字段是否存在。 198.HsetNXkeyfieldvalue当字段不存在时赋值。 199.Hinrbykeyfieldincrement增加数字。 200.Hdelkeyfield删除字段。 201.列表类型(List)可以存储一个有序的字符串列表。 202.列表类型内部是使用双向链表实现的。 203.借助列表类型,Redis还可以作为队列使用。 204.向列表两端增加元素: LPUSHKEYVALUE[] PPUSHKEYVALUE[] 返回长度 205.从列表两端弹出元素: LPOPKEY RPOPKEY 206.获取列表中元素的个数llenkey。 207.获取列表中指定值:LREMKEYcountvalue。 208.Redis集合类型内部使用散列表实现的。 209.增加和删除元素: Saddkeymember[]] Sremkeymember[]] 210.Smembers命令返回集合中所有元素。 211.集合间运算: 1.Sdiffkey[key]——差集 2.Sinterkey[]——交集 3.Sunion——并集 212.有序集合是Redis最高级的类型。 213.Redis中的事务是一组命令的集合。 214.事务:要么全执行,要么全不执行。 215.Redis不支持回滚功能。 216.Watch命令可以监控一个或多个键。 217.Redis可以用expire命令设置一个键的过期时间。 218.TTL命令查看剩余时间-2删除,-1永久。 219.Persist取消过期。 220.Redis可限制最大内存。 221.LRU算法即“最近最少使用”。 222.有序集合常见的使用场景是大数据排序。 223.对有序集合类型排序是会忽略元素的分类。 224.Sort默认按照从下到大排序,用desc逆序。 225.Sort通过alpha参数实现按照字典,顺序排序非数字元素。 226.Sort支持limit返回指定参数。 227.参考键值相同时,Redis会按照元素本身大小排序。 228.有个N个Get参数,每个元素返回的结果就有N行。 229.Get会返回元素本身的值。 230.Store参数常用来结合expire缓存排序结果。 231.Sort是Redis中最强大最复杂的命令之一。 232.通知的过程可以借助任务队列来实现。 233.任务队列好处:1)松耦合,2)易于扩展。 234.当列表中没有元素BRPOP会一直阻塞住连接。 235.BRPOP命令按收两个参数键名,超时时间,单位秒。 236.如果多个键都有元素则从左向右顺序取实现优先。 237.发布者发布消息的命令是PUBLISH。 238.订阅频道的命令是SUBSCRIBE,可用的多个订阅。 239.进入订阅状态后客户端可能收到了3种类型的恢复。 240.PUSHSCRIBE命令订阅指定的规则。 241.客户端和Redis使用TCP协议连接。 242.Redis的底层通信协议对管道提供了支持。 243.精简键名和键值是最直观的减少内存暂用的方式。 244.允许开发者使用LUA语言编写脚本传到Redis中执行。 245.LUA脚本好处:1)减少网络开销、2)原子操作、3)复用。 246.——eval参数是告诉Redis-clli读取并运行后面的LUA脚本。 247.LUA号称性能最高的脚本。 248.LUA脚本很容易和C/C++交互。 249.LUA是一个动态类型语言。 250.表类型是LUA语言中唯一的数据结构。 251.函数在LUA中是一等值。 252.全局变量只有Nil和非Nil的区别。 253.在Redis脚本中不能使用全局变量。 254.声明局部变量的方法为local变量。 255.多行注释:——[[]]。 256.LUA支持多重赋值。 257.LUA有5类操作符: 1.数学操作符 2.比较操作符 3.逻辑操作符 4.链接操作符 5.取长度操作符 258.LUAif语句if..then..elseif..then..else..。 259.LUA支持while,repeat和for循环语句。 260.For语句中的循环变量是局部变量。 261.LUA约定数组的索引从1开始。 262.Paris是LUA内置的函数,实现类似迭代器的功能。 263.Pairs用来遍历非数组的表。 264.函数的定义为:function(参数列表)函数体。 265.…实现可变参数。 266.LUA中return和break用于跳出循环。 267.编写Redis脚本的目的就是读写Redis的数据。 268.LUA脚本使用Redis,call函数调用Redis命令。 269.EVALHA命令允许开发者通过脚本。 270.Scriptkill命令可以终止当前脚本的运行。 271.Redis支持两种方式的持久化,一种是RDB方式,另一种是AOF方式。 272.Redis提供了复制(replication)功能,自动同步数据库。 273.在复制概念中,数据库分为两类:master/slave。 274.Slaveof参数指向主数据库,进行同步数据。 275.通过复制可以实现读写分离,以提高服务器的负载能力。 276.Master用于写,slave用于读,适合读多写收的场景。 277.哨兵的作用就是监控Redis系统的运行状态: 1.监控主/从是否正常 2.当出现故障时,从升为主 278.哨兵是一个独立的进程。 279.哨兵从独立进程的方式对一个主从系统进行监控。 280.版本支持集群。 281.生产环境运行时不能运行外界直连Redis。 282.只运行本机访问。 283.Redis支持在配置文件中奖命令重命名。 284.如果希望直接禁用某个命令可以将命令重命名成XXX。 285.Redis通信协议是Redis客户端与Redis间交流的语言。 286.Redis两种通信协议: 1.二进制安全的统一请求协议 2.telnet程序中输入的简单协议 287.哨兵提供了命令可以通过主数据库的名字获取当前系统的主数据库的地址和端口号。 288.一个哨兵可以同时监控多个Redis主从系统。 289.多个哨兵也可以同时监控同一个Redis主从系统。 290.MapReduce两阶段:Map阶段和Reduce阶段。 291.每个阶段都以键值对作为输入和输出。 292.Map阶段的输入时NCDN原始数据。 293.键是相对稳健起始位置的偏移量。 294.Mapper类是一个泛型,四个参数: 1.输入键 2.输入值 3.输出键 4.输出值 295.Hadoop本身提供了一套可优化网络序列化传输的基本类型: LongWritable相对于Java的Long Text相对于String IntWritable相对于Integer 296.Map()方法提供了context实例用于输出内容的写入。 297.Job对象指定作业执行规范。 298.构造Job对象后,需要指定输入和输出数据的路径。 299.在调试MapReduce作业时,知道作业ID和任务ID是非常有用的。 300.虚类相对接口更有利于扩展。 301.MapReduce作业(Job)是客户端要执行的一个工作单元:它包括输入数据,MapReduce程序和配置信息。 302.Hadoop将作业分成若干个小任务(Task)来执行,器中包括两类任务:Map和Reduce。 303.作业(Job)由一个Jobtracker及一系列tasktracker控制执行过程。 304.Hadoop将MapReduce的输入数据划分成等长的小数据块称为“切片”。 305.Hadoop为每一个切片构建一个map任务。 306.切片越细,负载平衡越好。 307.HDFS的块大小默认是64MB。 308.数据本地化优化——输入数据在本地节点运行map。 309.数据通过网络传输到map任务节点,效率明显降低。 310.Map任务将其输出写入本地硬盘,而非HDFS,因为map的输出是中间结果,Job完成自动删除。 311.单个reduce任务的输入通常来自于所有map的输出。 312.每个reduce任务的输入来自多个mao任务,所以中间过程称为shuffle(混洗)。 313.Shuffle对总执行时间的影响非常大。 314.集群上的可用带宽限制了MapReduce作业的数量。 315.Hadoop允许用户针对map任务的输出指定一个combiner。 316.Combiner的规则制约值可用的函数类型。 317.Combiner是通过Reducer类来定义的。 318.HadoopStreaming使用Unix标准流作为Hadoop和应用程序之间的接口。 319.Streaming天生适合用于文件处理。 320.HDFS以流式数据访问模式来存储超大文件。 321.一次写入,多次读取是高效的访问模式。 322.HDFS中的文件可能只有一个writer。 323.HDFS的块大,目的为最小化寻址开销。 324.HDFS集群有两类节点:管理者-工作者模式运行。 325.Namenode管理文件系统的命名空间。 326.客户端代表用户通过与namenode和datanode交互。 327.Datanode是文件系统的工作节点。 328.在联邦环境下每个namenode维护一个命名空间卷。 329.HDFS的权限模式与POSIX非常相似。 330.用户空间文件系统允许整合式一个Unix系统。 331.从Hadoop文件系统读取文件,最简单使用。 332.Filesystem是一个通用的文件系统API。 333.Seek()方法是一个相对高开销的操作,需要慎重使用。 334.Filestatus封装了文件系统中文件和目录的元数据。 335.Hadoop通配符与Unixbach的相同。 336.Hadoop无法自行定义网络拓扑结构。 337.文件系统的一致模型描述了文件读/写的数据可见性。 338.HDFS提供了一个方法来使所有缓存与数据节点强行同步。 339.HDFS中关闭文件其实还隐含执行syn()方法。 340.Flume是一个将大规模数据导入HDFS的工具——典型应用从另外一个系统收集日志数据。 341.Flume提供了不同数据级别的数据投递可靠性。 342.Sqoop是将数据从结构化存储批量导入HDFS。——数据库。 343.Distcp是作为一个MapReduce作业来实现的。 344.每个文件均按块方式存储,每个块的元数据存储在namenode的内存中。 345.Hadoop存储小文件效率非常低。 346.Hadoop存档文件可以使用MapReduce的输入。 347.Hadoop自带一套原子操作用于数据I/O操作。 348.HDFS会对写入的存储数据计算校验和,并在读取数据时验证校验和。 349.Datanode负责在收到数据后存储该数据及其验证校验和。 350.客户端成功验证一个数据块后,datanode更新日志。 351.Datanode定期验证所有数据块。 352.Hadoop的LocalFileSysten执行客户端的校验和验证。 353.校验的计算代价是相当低的。 354.LocalFileSystem通过checksumFileSystem来完成自己的任务。 355.文件压缩两大好处:存储和传输。 356.序列化两大领域常见:进程间通信和存储。 357.Writable两个方法:dataoutput/datainput。 358.RawComParator允许其实现直接比较数据流中的记录。 359.Writable类对java基本类型提供封装。 360.Text是针对URT-8序列的writable类。 361.Text类的find()方法返回字节偏移量。 362.多数情况下需要将Text对象换成String对象。 363.BytesWritable是对二进制数据数组的封装。 364.NullWritable是writable的特殊类型,序列化长度为0. 365.Nulwritable不读也不写,只当占位符。 366.NullWritable可以用作在SequenceFile中的键。 367.ObjectWritable是对Java基本类型的一个通用封装。 368.由于writable是MapReduce数据路径的核心,所有调整二进制表示对性能产生显著效果。 369.适当重写一个类,会更加适应我们的需求。 370.IDL——接口定义语言。 371.Avro是一个独立于编程语言的数据序列化系统。 372.Avro模式通常用于Json来写,数据通常采用二进制格式来编码。 373.Avro为序列化和反序列化提供了API。 374.Avro数据文件时可切分的,适合MapReduce快速处理。 375.Avro语言互相操作性。 376.Avro定义了对象的排列顺序。 377.Hadoop配置后添加的资源文件属性会覆盖之前定义的属性。 378.MRUnit是一个测试库。 379.测试驱动程序: 1.使用本地作业运行器 2.使用一个mini集群来运行它 380.Mini集群广泛应用于Hadoop自带的自动测试包中。 381.Hadoop_CLASSPATH是一项客户端的设置。 382.为了启动作业,我们需要运行驱动程序。 383.Job上的waitforCompletion()方法启动作业并检查进展情况。 384.作业ID的格式包含两部分: 1.Jobtracker开始时间 2.唯一标识增量计数器 385.任务属于作业,任务ID通过替换作业ID的作业前缀为任务前缀,然后加上一个后缀表示哪个作业类的任务。 386.Hadoop的web界面用来浏览作业信息。 387.作业历史包括已完成作业的时间和配置信息。 388.每个reducer产生一个输出文件。 389.最经典的调试方法,打印语句来调试程序。 390.任务页面包括一些看作业总任务细节的链接。 391.针对不同用户,Hadoop在不同的地方生产日志。 392.Hadoop允许分析作业中的一部分任务。 393.Jobcontrol的实例表示一个作业的运行图。 394.Ooize中,工作流是一个有动作节点和控制节点组成的DAG。 395.每个工作都必须有一个start节点和一个节点。 396.Oozie提供了一组与工作流交互的函数。 397.工作流应用由工作流定义和所有运行所需的资源。 398.运行MapReduce作业: 1.Job对象上的submit() 2.Waitforcompletion() 399.客户端,提交MapReduce作业。 400.Jobtracker,运行作业划分后的任务。 401.Jobsummiter作业提交过程: 1.箱Jobtracker请求一个新的作业ID 2.检查作业的输出说明 3.计算作业的输入分片 4.将运行作业所需的资源复制到Jobtracker文件系统中。 5.告知Jobtracker作业,准备执行。 402.心跳向Jobtracker表明tasktracker是否还存活。 403.MapReduce1: 1.作业的提交 2.作业的初始化 3.任务的分配 4.任务的执行 5.进度和状态的更新 6.作业完成 404.YARN(YetAnotherResourceNegotiator)。 405.YARN将Jobtracker的职能划分为多个独立的实体。 406.YARN将两种角色划分为两个独立的守护进程: 1.资源管理器 2.应用管理器 407.YARN设计的精妙之处在于不同的YARN应用可以在同一个集群共存。 408.MapReduce确保每个reducer的输入都是按键排序的。 409.系统执行排序的过程称为shuffle。 410.Shuffle属于不断被优化和改进的代码的一部分。 411.Shuffle是MapReduce的“心脏”是奇迹发生的地方。 412.每个map任务都有一个环形内存缓冲区用于存储任务的输出。 413.Hadoop设置作业配置参数作为streaming程序的环境变量。 414.MapReduce模型将作业分解成任务,然而并行地运行任务。 415.HadoopMapReduce使用一个提交协议来确保作业和任务都完成功或失败。 416.Hadoop在他们自己的Java虚拟机上运行任务,以区别其他正在运行的任务。 417.计数器是收集作业统计信息的有效手段之一。 418.Hadoop为每个作业维护若干内置计数器,以描述多项指标。 419.任务计数器由其任务维护,并定期发送给tasktracker再有tasktracker发送给Jobtracker。 420.作业计数器由Jobtracker维护。 421.计数器由一个java枚举(enum)类型来定义。 422.计数器是全局的。 423.排序是MapReduce的核心技术。 424.MapReduce能够执行大型数据集键的“链接”操作。 425.“边数据”是作业所需的额外的只读数据。 426.RAID——磁盘阵列 427.HDFS无需使用RAID的冗余机制。 428.Hadoop部分代码需在Unix环境下执行。 429.Namenode和Jobtracker最好分别放在不同机器中。 430.Hadoop集群架构通常包含两级网络拓扑。 431.为了达到Hadoop的最佳性能,配置Hadoop系统以让其了解网络拓扑状况旧极为关键。 432.HDFS和MapReduce可安装同一系统的不同位置。 433.Hadoop控制脚本依赖SSH来执行针对整个集群的操作。 434.集群的每个Hadoop节点都各自保存一系列配置文件。 435.Hadoop也支持为所有master和worker机器采用同一套配置文件。 436.为每一机器类维护单独的配置文件。 437.同步所有机器上的配置文件极具挑战性。 438.Hadoop内置一些脚本来运行指令,在集群内启动和终止守护进程。 439.MapReduce控制脚本不使用masters文件。 440.Namenode在内存中保存整个命名空间中的所有文件元数据和块元数据。 441.Hadoop为各个守护进程分配1GB内存。 442.在一个tasktracker上能够同时运行的任务数取决于一台机器有多少个处理器。 443.Hadoop守护进程一般同时运行RPC和HTTP两个服务器。 444.各个datanode运行TCP/IP服务器以支持块传输。 445.YARN是运行MapReduce的下一代架构。 446.YARN有一个作业历史服务器和一个web应用程序代理服务器。 447.YARN更加精细化管理内存。 448.YARN守护进程运行一个或多个RPC和HTTP服务。 449.Kerberos获取服务: 1.认证 2.授权 3.服务请求 450.Hadoop使用委托令牌来支持后续认证访问。 451.Whirr使用SSH与云端的机器通信。 452.Pig为大型数据集的处理提供了更高层的抽象。 453.Pig提供了一套更强大的数据变换操作。 454.PigLatin程序由一系列的操作式变换组成。 455.Pig是一种探索大规模数据集的脚本语言。 456.MapReduce的一个缺点是开发周期太长。 457.Pig提供了多个命令来检查和处理程序中已有的数据结构。 458.Pig被设计为可扩展的,处理路径中几乎每个部分都可以定制。 459.Pig是作为一个客户端应用程序运行的。 460.Pig两种模式:本地和MapReduce。 461.Grunt是与Pig进行交互的外壳程序(shell)。 462.在MapReduce模式下,Pig翻译成MapReduce作业。 463.Pig发布版本只和特定的Hadoop版本对应。 464.三种执行Pig程序方法: 1.脚本 2.Grunt 3.嵌入式方法 465.创建一个精简的数据集是一门艺术。 466.PigLatin是一种数据流编程语言,而SQL是一种声明式编程语言。 467.一个PigLatin程序由一组语句构成。 468.PigLatin并美欧正式的语言定义。 469.在PigLatin程序执行时,每个命令按次序进行解析。 470.Hive是一个构建在Hadoop上的数据仓库框架。 471.Hive一般在工作站上运行。 472.Hive把数据组织为表。 473.元数据(如表模式)存储在metastore数据库中。 474.Hive外壳环境是我们交互的主要方式。 475.HiveQL是Hive的查询语言。 476.Hive操作表而Pig直接操作数据集。 477.HiveQL大小写不敏感。 478.用-e选项在行嵌入命令,不用加分号。 479.在Hive的仓库目录中,表存储为目录。 480.Metastore包含两部分:服务和后台数据的存储。 481.对于独立的metastore,mysql是一种很受欢迎的选择。 482.Hive把表组织成“分区”。 483.桶为表加上了额外的结构。 484.每个桶就是表(分式)目录里的一个文件。 485.Hive从两个维度对表的存储进行管理:行格式和文件格式。 486.视图是一种用select语句定义的“虚表”。 487.Hbase是一个在HDFS上开发的面向列的分布式数据库。 488.数据模型: 1.应用把数据存放在带标签的表中 2.表中行的键也是字节数组 3.行中的列被分成“列族” 4.一个表的列族必须预先给出 5.所有列族成员都一起存放在文件系统中。 489.HBase自动把表水平分成“区域”,每个区域由表中行的子集构成。 490.HBase依赖于Zookeeper。 491.HBase通过Hadoop文件系统API来持久化存储数据。 492.HBase有Java开发。 493.Hbase是一个分布式的,面向列的数据存储系统。 494.HBase有一个高效的批量加载工具。 495.Sqoop将结构化存储器抽取到Hadoop中。 496.Sqoop有java开发。 497.Hive不支持事务。 498.Hive是最适合数据仓库应用程序的。 499.Hive和Mysql提供的SQL方言最接近。