三 18
集群搭建
- 通常,集群里的一台机器被指定为 NameNode,另一台的机器被指定为JobTracker,这些机器是masters。余下的机器即作为DataNode也作为TaskTracker。这些机器是slaves。
- 对Hadoop的配置通过conf/目录下的两个重要配置文件完成:
- 此外,通过设置conf/hadoop-env.sh中的变量为集群特有的值,你可以对bin/目录下的Hadoop脚本进行控制。
- 配置Hadoop守护进程的运行参数
- 这部分涉及Hadoop集群的重要参数,这些参数在conf/hadoop-site.xml中指定。
- hadoop-default.xml – 只读的默认配置。
- 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:
Hadoop 作者: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特点
- High availability高可用性
- Incremental scalability可扩展
- Eventually consistent最终一致性
- Tunable tradeoffs between consistency and latency
- 灵活的schema,不需要象数据库一样预先设计schema,增加或者删除字段非常方便(on the fly)。
- 支持range查询:可以对Key进行范围查询。
- Minimal administration
- 单点故障不影响集群服务No SPF (Single Point of Failure) 更多详细内容 »
Tags:
cassandra 作者: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.95或1.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:
Hadoop,
reduce 作者: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:
Hadoop 作者:Jock
近期评论