hadoop生态系统之hadoop核心的部署

在hadoop生态系统中,hadoop核心包括了hdfs以及mapreduce.java

hadoop的一些设计机制

机架感知rack-aware
使得master可以获取整个集群的基于网络ip地址或者主机名的分布图。
经过一个脚本实现,脚本耦合少,参数只有网络ip地址或者主机名。
相关配置项 topology.script.file.namenode

health-checker健康检查的模块 
相似hadoop这种组件繁多的生态系统,精简耦合是必须的,这个检查模块作得真是很小巧,
它只经过脚本的返回的结果中有没有ERROR这个字符串来判断健康状态。
相关配置项 yarn.NM.health-checker 开头的都是linux

slaves节点
slaves节点都写在一个slaves文件里一行一个.web

配置文件的更新
每当有配置文件的更新咱们都必须手动复制这些配置文件到每个节点,而后利用bin目录下面以refresh开头的命令来刷新,有时可能会出现一些问题,
严重的是可能还要重启服务。这要是发生在生产环境中绝对是很可怕的事。shell

native库
为了提升性能(毕竟是java写的),hadoop默认使用native库来操做文件,native库要本身编译。其实就是一个so动态库,若是没有这个文件会自动切换为java运行。
相关配置项 io.native.lib.availableapache

日志功能
hadoop有自带日志聚合功能,可以把日志聚合起来,你也能够禁用。这样日志就会分散到各个节点.浏览器

各个节点使用hostname而不是ip
在dns里修改解析很快,hostname通常也不须要更改.缓存

Hadoop IPC
Hadoop IPC 是一个hadoop内部的rpc方案,是一个简洁的,低消耗的RPC机制。 提供更精确控制链接,超时,缓存等的能力。服务器

uber task模式。
这个模式是为了限制mapreduce过程占用的hadoop资源。可使用
maxmaps, maxreduces, 和maxbytes 来设置。其中maxbytes指输入的文件大小网络

container-executor
在yarn里边,mr工做将会在每一个节点上的container中执行。这个container设计上来讲相似资源分割系统,可是目前只有内存分割的功能。
container的运行状态和生命周期由nm管理,rm负责调度。

Secondary NameNode,Checkpoint Node,backup node
Secondary NameNode按期合并fsimage和edits日志。 控制edits的大小。Checkpoint Node方案与Secondary NameNode的原理基本相同,
在节点上运行 bin/hdfs namenode -checkpoint查看你的配置有没有问题.
backup node利用Hadoop自身的Failover措施,配置一个Backup Node,Backup Node在内存和本地磁盘均保存了HDFS系统最新的名字空间元数据信息。
若是NameNode发生故障,可用使用Backup Node中最新的元数据信息。不过当NameNode发生故障,目前还只能经过重启NameNode的方式来恢复服务。当前版本的Backup Node还不具备热备功能
在节点上运行 bin/hdfs namenode -backup 查看你的配置有没有问题.
启动前必须在节点上格式化namenode 而且保证与主节点上的VERSION文件是同样的。
Checkpoint Node与backup node都是使用下面5个配置:
dfs.namenode.backup.address
dfs.namenode.backup.http-address
dfs.namenode.checkpoint.period 指定两次checkpoint的最大时间间隔,默认3600秒。
dfs.namenode.checkpoint.dxns
dfs.namenode.checkpoint.check.period 每次通讯的间隔时间,默认5分钟

hadoop核心的部署

选用cloudera的 hadoop2.0.0-cdh4.3.0
选用理由:依据cloudera的特点,cloudera知名,有实力,商用性强,生态系统组件完善,且各个组件版本对应正确,文档维护好。

这里 http://archive.cloudera.com/cdh4/cdh/4/ 有一整套的cdh生态系统下载列表。使用前先编译hadoop native library 用cmake编译,
你可能须要设置GENERATED_JAVAH为java home的目录.就看你有没有提示错误了。若是是单独编译,一些头文件放在
jar包里必须本身解压出来。只须要编译libhadoop.so 跟libhdfs.so ,不用编译 yarn 跟 mapreduce1的.
yarn下面有一个c写的container-executor程序

另外,英特尔Hadoop发行版作得也很好,图形界面的的管理很是简单,再此也推荐一下。
英特尔Hadoop发行版免费版本只有50节点,8TB最大数据存储量。
Facebook近日开源了它们的mapreduce框架Corona,也值得一试,看看可否更好知足业务需求。

申请的机器:

192.168.2.21 resourcemanage,namenode ,nodemamage datanode
192.168.2.22 nodemamage datanode

假设你已经安装好了。

配置过程:

配置hadoop通常参考 *.default.xml文件,选择你须要修改的配置项。 *.default.xml文件放在doc目录里

下面是咱们用的一些:

核心配置core-site.xml
fs.defaultFS 一个uri格式的字符串,这里是:hdfs://192.168.2.21:9000

hdfs配置hdfs-site.xml
dfs.datanode.dns.nameserver 192.168.2.9 namenode联系各个节点时候须要解析hostname为ip这是一个dns服务器。 在2.9的管理器上添加 21 22的机子
dfs.replication 2 数据保存份数
dfs.datanode.handler.count 10 节点的服务线程数,跟读写工做量有关。
dfs.datanode.data.dir file:///root/cdh/dfs/data datanode存储块数据的文件夹
dfs.namedata.name.dir file:///root/cdh/dfs/name,file:///root/cdh/dfs/name1 namenode存储name表的文件夹 这里存储2份,一个做为备份
dfs.namenode.backup.address 192.168.2.22:50100 backup node的地址
dfs.namenode.backup.http-address 192.168.2.22:50105 backup node的web界面
dfs.namenode.http-address 192.168.2.21:50070 namenode的web界面backup node将从这里下载数据
dfs.datanode.max.xcievers 40960 至少要4096,为了这里设置10倍大小。这个数字是 DataNode 一次最大可以操做的文件数.为未来上线的hbase作好准备。

配置 mapred-site.xml
mapreduce.framework.name yarn 第二代mapreduce框架
mapreduce.jobhistory.address 192.168.2.21:10020
mapreduce.jobhistory.webapp.address 192.168.2.21:19888
mapred.child.java.opts 设置java的运行时选项 当它报一些jvm级别的错误的时候,你须要添加一些选项 好比 class的位置之类的。跟你运行任何java程序的选项是同样的。
mapreduce.job.counters.max MapReduce的计数器,默认120,调高点能够运行比较大的mr运算。
配置 yarn-site.xml
yarn.nodemanager.aux-services mapreduce.shuffle yarn的map过程结束后产生的结果,会被mapreduce.shuffle收集起来reduce。这里aux-services应该能够本身实现。或者有人提供因此单独配置出来。
yarn.nodemanager.aux-services.mapreduce.shuffle.class org.apache.hadoop.mapred.ShuffleHandler ShuffleHandler估计是一个反射,用接口来调用。
yarn.resourcemanager.address 192.168.2.21:8032 RM的链接地址
yarn.resourcemanager.scheduler.address 192.168.2.21:8030 调度接口地址
yarn.resourcemanager.resourc-tracker.address 192.168.2.21:8031
yarn.resourcemanager.admin.address 192.168.2.21:8033 RM的管理地址
yarn.resourcemanager.webapp.address 192.168.2.21:8088 RM的web ui地址 能够用浏览器或者w3m访问的

集群部署过程:
在 slaves文件里面添加21 22机子
将21,22的ssh登陆受权文件放到各自的验证目录里,也就是 21 到自身、到22,22到自身、到21的ssh都是不须要输入密码的。若是集群大了,你须要用脚原本完成。
确保21,22的dhcp服务端是开启的。在dhcp服务端里配置 hostname与ip的对应。

格式化namenode
bin/hdfs namenode -format

启动集群
sbin/start-all.sh //这shell脚本已经不推荐使用了。不过我使用是没什么问题的。

启动以后 使用jps能够看到下面的服务
datanode
namenode
NM
secondarynamenode
RM

只有 datanode,NM的是slave,若是少一个服务,你就要看看日志了。
nohup bin/hdfs namenode -backup >/{日志记录目录}/namenodebackup.log 2>&1 > /dev/null & //启动22上面的namenodebackup 服务

实验集群
bin/hadoop fs -ls / 能够看看根目录下面有什么内容 开始应该是空的
从本地复制文件到hdfs 可使用:bin/hadoop fs -copyFromLocal ~/1.txt /1.txt
而后 bin/hadoop fs -ls / 能够看到1.txt已经在里边了。

运行yarn 的wordcount
bin/hadoop jar examples.jar workcount /1.txt /r

运行成功后目录 /r 下面就会有 _SUCCESS 文件,其它相似part-r-00000的文件是输出结果
bin/hadoop fs -cat /r4/part-r-00000 查看输出结果。
值得一提的是 hadoop文件系统的命令跟linux下面的几乎同样,很容易看懂跟使用。

关闭集群 sbin/stop-all.sh //也不推荐使用了。不知道为何这样。可能有些集群不须要 mapreduce 功能。

相关文章
相关标签/搜索