18

集群搭建

  • 通常,集群里的一台机器被指定为 NameNode,另一台的机器被指定为JobTracker,这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves
  • 对Hadoop的配置通过conf/目录下的两个重要配置文件完成:
  • 此外,通过设置conf/hadoop-env.sh中的变量为集群特有的值,你可以对bin/目录下的Hadoop脚本进行控制。
  • 配置Hadoop守护进程的运行参数
  • 这部分涉及Hadoop集群的重要参数,这些参数在conf/hadoop-site.xml中指定。
  1. hadoop-default.xml – 只读的默认配置。
  2. hadoop-site.xml – 集群特有的配置。
参数 取值 备注
fs.default.name NameNode的URI。 hdfs://主机名/
mapred.job.tracker JobTracker的主机(或者IP)和端口。 主机:端口
dfs.name.dir NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。
dfs.data.dir DataNode存放块数据的本地文件系统路径,逗号分割的列表。 当这个值是逗号分割的目录列表时,数据将被存储在所有目录下,通常分布在不同设备上。
mapred.system.dir Map/Reduce框架存储系统文件的HDFS路径。比如/hadoop/mapred/system/。 这个路径是默认文件系统(HDFS)下的路径, 须从服务器和客户端上均可访问。
mapred.local.dir 本地文件系统下逗号分割的路径列表,Map/Reduce临时数据存放的地方。 多路径有助于利用磁盘i/o。
mapred.tasktracker.{map|reduce}.tasks.maximum 某一TaskTracker上可运行的最大Map/Reduce任务数,这些任务将同时各自运行。 默认为2(2个map和2个reduce),可依据硬件情况更改。
dfs.block.size 每个block的大小,byte  
dfs.replication Block缺省的副本数量  
mapred.reduce.tasks 每个任务启动的reduce task数量  

 

HDFS架构和设计简介

  • HDFS采用master/slave架构。一个HDFS集群是由一个Namenode和一定数目的Datanodes组成。Namenode是一个中心服务器,负责管理文件系统的名字空间(namespace)以及客户端对文件的访问。集群中的Datanode一般是一个节点一个,负责管理它所在节点上的存储。HDFS暴露了文件系统的名字空间,用户能够以文件的形式在上面存储数据。从内部看,一个文件其实被分成一个或多个数据块,这些块存储在一组Datanode上。Namenode执行文件系统的名字空间操作,比如打开、关闭、重命名文件或目录。它也负责确定数据块到具体Datanode节点的映射。Datanode负责处理文件系统客户端的读写请求。在Namenode的统一调度下进行数据块的创建、删除和复制。
  • 文件系统的名字空间 (namespace)

HDFS支持传统的层次型文件组织结构。 Namenode负责维护文件系统的名字空间,任何对文件系统名字空间或属性的修改都将被Namenode记录下来

  • 数据复制

每个文件存储成一系列的数据块,除了最后一个,所有的数据块都是同样大小的。为了容错,文件的所有数据块都会有副本

  • 副本选择

为了降低整体的带宽消耗和读取延时,HDFS会尽量让读取程序读取离它最近的副本

  • 安全模式

Namenode启动后会进入一个称为安全模式的特殊状态。 Namenode从所有的 Datanode接收心跳信号和块状态报告,块状态报告包括了某个Datanode所有的数据块列表。 更多详细内容 »

Tags:

作者:Jock

18

Why Cassandra

Ÿ   MySQL drives too many random I/Os

Ÿ   File-based solutions require far too many locks

Ÿ   Cassandra vs MySQL with 50GB of data

MySQL Cassandra
~300ms write ~0.12ms write
~350ms read ~15ms read

分布式领域CAP(Consistency, Availability, Partition tolerance)理论

Consistency(一致性), 数据一致更新,所有数据变动都是同步的

Availability(可用性), 好的响应性能

Partition tolerance(分区容错性) 可靠性

定理:任何分布式系统只可同时满足二点,没法三者兼顾。(这个定理并没有被证明)

忠告:架构师不要将精力浪费在如何设计能满足三者的完美分布式系统,而是应该进行取舍。

Cassandra特点

  1. High availability高可用性
  2. Incremental scalability可扩展
  3. Eventually consistent最终一致性
  4. Tunable tradeoffs between consistency and latency
  5. 灵活的schema,不需要象数据库一样预先设计schema,增加或者删除字段非常方便(on the fly)。
  6. 支持range查询:可以对Key进行范围查询。
  7. Minimal administration
  8. 单点故障不影响集群服务No SPF (Single Point of Failure) 更多详细内容 »
Tags:

作者:Jock

03

IMG_1649.JPG
IMG_1657.JPG

作者:Jock

十二 22

IMG_1267.JPG

作者:Jock

十二 22

test

照片 203 views, No Comments

小花
奥林匹克森林公园
佛香阁
佛香阁

作者:Jock

十一 17

编辑C:\WINDOWS\system32\drivers\etc\hosts文件
增加

作者:Jock

04

Subscriber: www.hjide.com
Subscription Code:jLR8ZO-655444-65678656835710503
更多详细内容 »

Tags:

作者:Jock

31

JobConf代表一个Map/Reduce作业的配置。

JobConf是用户向Hadoop框架描述一个Map/Reduce作业如何执行的主要接口。框架会按照JobConf描述的信息忠实地去尝试完成这个作业,然而:

•一些参数可能会被管理者标记为 final,这意味它们不能被更改。
•一些作业的参数可以被直截了当地进行设置(例如: setNumReduceTasks(int)),而另一些参数则与框架或者作业的其他参数之间微妙地相互影响,并且设置起来比较复杂(例如: setNumMapTasks(int))。
通常,JobConf会指明Mapper、Combiner(如果有的话)、 Partitioner、Reducer、InputFormat和 OutputFormat的具体实现。JobConf还能指定一组输入文件 (setInputPaths(JobConf, Path…) /addInputPath(JobConf, Path)) 和(setInputPaths(JobConf, String) /addInputPaths(JobConf, String)) 以及输出文件应该写在哪儿 (setOutputPath(Path))。

JobConf可选择地对作业设置一些高级选项,例如:设置Comparator; 放到DistributedCache上的文件;中间结果或者作业输出结果是否需要压缩以及怎么压缩; 利用用户提供的脚本(setMapDebugScript(String)/setReduceDebugScript(String)) 进行调试;作业是否允许预防性(speculative)任务的执行 (setMapSpeculativeExecution(boolean))/(setReduceSpeculativeExecution(boolean)) ;每个任务最大的尝试次数 (setMaxMapAttempts(int)/setMaxReduceAttempts(int)) ;一个作业能容忍的任务失败的百分比 (setMaxMapTaskFailuresPercent(int)/setMaxReduceTaskFailuresPercent(int)) ;等等。

当然,用户能使用 set(String, String)/get(String, String) 来设置或者取得应用程序需要的任意参数。然而,DistributedCache的使用是面向大规模只读数据的。

Tags:

作者:Jock

31

Reduce的数目建议是0.951.75乘以 (<no. of nodes> * mapred.tasktracker.reduce.tasks.maximum)。

用0.95,所有reduce可以在maps一完成时就立刻启动,开始传输map的输出结果。用1.75,速度快的节点可以在完成第一轮reduce任务后,可以开始第二轮,这样可以得到比较好的负载均衡的效果。

增加reduce的数目会增加整个框架的开销,但可以改善负载均衡,降低由于执行失败带来的负面影响。

上述比例因子比整体数目稍小一些是为了给框架中的推测性任务(speculative-tasks) 或失败的任务预留一些reduce的资源。

无Reducer

如果没有归约要进行,那么设置reduce任务的数目为是合法的。

这种情况下,map任务的输出会直接被写入由 setOutputPath(Path)指定的输出路径。框架在把它们写入FileSystem之前没有对它们进行排序。

Tags: ,

作者:Jock

23

当HDFS从一个版本升级到另外一个版本的时候,NameNode和DataNode使用的文件格式有可能会改变。当你第一次使用新版本的时候,你要使用/opt/hadoop/bin/start-dfs.sh -upgrade告诉Hadoop 去改变HDFS版本(否则,新版本不会生效)。然后它开始升级,你可以通过 /opt/hadoop/bin/hadoop dfsadmin -upgradeProgress 命令来查看版本升级的情况。当然你可以使用/opt/hadoop/bin/hadoop dfsadmin -upgradeProgress details来查看更多的详细信息。当升级过程被阻塞的时候,你可以使用/opt/hadoop/bin/hadoop dfsadmin -upgradeProgress force 来强制升级继续执行(当你使用这个命令的时候,一定要慎重考虑)。

当HDFS升级完毕后,Hadoop依旧保留着旧版本的有关信息,以便你可以方便的对HDFS进行降级操作。你可以使用/opt/hadoop/bin/start-dfs.sh -rollback来执行降级操作。

Hadoop一次只保存一个版本的备份。当新版本运行几天以后还是没有出现什么问题,你就可以使用/opt/hadoop/bin/hadoop dfsadmin -finalizeUpgrade命令把旧版本的备份从系统中删掉了。删除以后rollback 命令就失效了。在另外一次版本升级前,这个操作是一定要做的。

获取帮助 – 跟 dfs 模块是一样的, 你可以使用 /opt/hadoop/bin/hadoop dfsadmin -help命令来获取特定的命令的一些用法。

Tags:

作者:Jock

Switch to our mobile site