Hadoop 1.* 集群搭建

Apache 下Hadoop 版本繁多,最终选择了稳定版本作为学习、研究的切入点。

Hadoop的核心包含了HDFS分布式文件系统和MapReduce计算框架,它们是主要适合大吞吐量、批量计算的情景, 换句话说, 就是不适合作为实时系统。HDFS负责数据的持久存储的, 并且保证数据的完整性。MapReduce提供了简单计算框架,框架负责任务的、分配、执行、以及处理执行过程中出现的异常。

但是,人们选择Hadoop, 并不仅仅因为上述的两点, 更多的, 是因为Hadoop愈加成熟的生态圈, 例如HBase、Hive、Mahout等等。所有这些都是依赖Hadoop的HDFS和MapReduce。那么首先, 让我们从搭建Hadoop开始。

已经发布了Hadoop 2.0的alpha版本,它有许多改进,特别是Hadoop1.*的单点故障的问题, 但是Hadoop2.0实际上是完全重写了Hadoop, 未来将抽时间来单独学习Hadoop2.


本文记录Hadoop的搭建过程, 以备忘,并希望能够对新人有所帮助。

Hadoop的系统组件

一个进行交互着的Hadoop系统,至少包含六个组(进程):Hadoop Client、JobTracker、TaskTracker、NameNode、DataNode、SecondaryNameNode。其中Client用于和Hadoop集群交互。此外Hadoop还建立JVM之上,主节点通过SSH控制从节点的上的守护进程。



部署Hadoop集群, 一般让DataNode和TaskTracker运行在节点上,这样以便尽可能的达到计算数据的本地化。对于小集群,NameNode、SecondaryNameNode以及JobTracker可以运行在同一个节点上。如果集群够大, 并且条件运行, 最好是将这三者单独运行不同的节点上。


硬件准备

5台机器
  • 操作系统:Red hat 6.2 X86_64
  • 内存:建议每个核2G, 具体大小配置,见mapred-site.xml设置。
  • 机器规划,并且设置hostname为其域名
IP域名备注
192.168.1.100masterNameNode、JobTracker
192.168.1.101secondmasterSecondaryNameNode
192.168.1.102hadoop1DataNode、TaskTracker
192.168.1.103hadoop2DataNode、TaskTracker
192.168.1.104hadoop3DataNode、TaskTracker

  • 为每个机器创建一个共同的用户:hadoop

软件准备

  • 安装Java 1.6 或者以上版本
  • 安装ssh, 运行sshd

安装配置

配置SSH免密码登陆

设置master到所有节点的SSH免密码登陆(包括master本身)。如何设置见SSH免密码登陆

关闭各个节点的防火墙

安装、配置Hadoop

安装Hadoop

下载安装Hadoop,我使用了Hadoop-1.0.2,解压到你的安装目录。我放在/home/hadoop/hadoop目录下, 以后以$HADOOP_HOME代替。
为了方便以后使用, 我还将HADOOP_HOME export为环境变量。

配置Hadoop

所有配置文件都在$HADOOP_HOME/conf目录下。所有配置除了masters和slaves都有一个默认配置项:*-default.xml。
设置hadoop-evn.sh
这里主要是设置JAVA_HOME, 找到JAVA_HOME, 设置该变量。
export JAVA_HOME=/opt/jdk1.6.0_27


设置core-site.xml
这里主要设置fs.default.name变量, 值以url形式设置,可以是file:///,hdfs://, ...
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>


还有其他一些设置,可以参照core-default.xml进行设置。

一般还会把hadoop.tmp.dir设置到指定目录下,该变量目录是放在/tmp目录下的, 一旦机器重启,这里的数据将都丢失。
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop/datas/tmp</value>
</property>



还有一个是fs.checkpoint.dir
<property>
<name>fs.checkpoint.dir</name>
<value>/home/hadoop/hadoop/datas/hdfs/namesecondary</value>
</property>


设置hdfs-site.xml
这里主要设置dfs.name.dir、dfs.data.dir、dfs.replication、dfs.block.size
<property>
<name>dfs.name.dir</name>
<value>/home/hadoop/hadoop/datas/hdfs/name</value>
</property>

<property>
<name>dfs.data.dir</name>
<value>/home/hadoop/hadoop/datas/hdfs/data</value>
</property>

<property>
<name>dfs.replication</name>
<value>2</value>
<!--  default is 3 -->
</property>

<property>
<name>dfs.block.size</name>
<value>315621376</value>
<!--  unit bytes, default is 64M, -->
</property>

设置mapred-site.xml
这里主要设置mapred.job.tracker
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
<!--  JobTracker RPC address and port. -->
</property>
此外一般还会设置
<property>
<name>mapred.tasktracker.map.tasks.maximum</name> 
<value>8</value>
<!-- an TaskTracker's last map task slot, default is 2 -->
</property>
<property>
<name>mapred.tasktracker.reduce.tasks.maximum</name>
<value>8</value>
<!-- an TaskTracker's last reduce task slot, default is 2 -->
</property>
<property>
<name>mapred.child.java.opts</name>
<value>-Xms1024m -Xmx200m -XX:-UseGCOverheadLimit</value>
</property>

Tips:
mapred.tasktracker.map.tasks.maximum, mapred.tasktracker.reduce.tasks.maximum设置为多少大,需要参考机器内存、mapred.child.java.opts、节点上其他进程占用内存情况以及实际作业耗内存情况。

一般DataNode和TaskTracker运行在同一个节点上。默认情况下,这两进程需要2*1000MB。
上述配置中, -Xmx200m,mapred.tasktracker.map.tasks.maximum和mapred.tasktracker.reduce.tasks.maximum都是8.
那么至少需要1000*2 + 200*16 = 5200MB的内存

设置masters
这里设置的其实是SecondaryNameNode的节点,一行一个节点
secondmaster

设置slaves
也是一行一个节点
hadoop1
hadoop2
hadoop3

安装LZO

LZO是可选的压缩方式,但一般都会安装它。
请参考:

开启机架感知

开启Hadoop集群的机架感知,是可选的,它可以提高Hadoop集群的网络性能,主要针对大集群,跨机架的情形。

在core-site.xml 添加以下属性:
<property>
<name>topology.script.file.name</name>
<value>/home/hadoop/hadoop-1.0.2/script/RackAware.py</value>
</property>


编写RackAware.py:
#!/usr/bin/python
#-*-coding:UTF-8 -*-
import sys
rack = {"hadoop.cluster.master":"rack1",
"hadoop.cluster.second_master":"rack1",
"hadoop.cluster.slave1":"rack1",
"hadoop.cluster.slave2":"rack1",
"hadoop.cluster.slave3":"rack1",
"hadoop.cluster.slave4":"rack1",
"hadoop.cluster.slave5":"rack1",
"hadoop.cluster.slave6":"rack1",
"hadoop.cluster.slave7":"rack1",
"hadoop.cluster.slave8":"rack1",
"10.15.82.81":"rack1",
"10.15.82.201":"rack1",
"10.15.82.148":"rack1",
"10.15.82.149":"rack1",
"10.15.82.150":"rack1",
"10.15.82.151":"rack1",
"10.15.82.189":"rack1",
"10.15.82.153":"rack1",
"10.15.82.190":"rack1",
"10.15.82.155":"rack1",
}
if __name__=="__main__":
print "/" + rack.get(sys.argv[1],"rack0")


启动、停止集群

第一次启动集群之前,要先进行NameNode的格式化。
hadoop namenode -format

Tips:
对于完全分布式集群,请不要多次格式化话, 因为二次格式化时,不能同步节点,会因版本不一致而导致集群不能正常启动

启动各个守护进程
start-all.sh

停止集群
stop-all.sh

运行日志

默认情况下, Hadoop系统的运行日志在各个节点的$HADOOP_HOME/log目录下,分别以各个守护进程名字命名,例如:



验证是否部署成功

有多种途径可以验证Hadoop集群是否已经部署成功。通过jps查看进程、通过web接口查看集群状态以及运行一个例子进行测试。

jps查看进程

master节点上:NameNode、JobTracker
secondmaster节点上:SecondaryNameNode
hadoop1~hadoop3节点上:DataNode、TaskTracker

通过web查看

通过http://master:50070 查看NameNode和DataNode
通过http://master:50030 查看JobTracker和TaskTracker  

运行一个例子

在$HADOOP_HOME目录下执行hadoop jar hadoop-examples-1.0.2.jar pi 10 100, 如果部署成功,将会看到


集群增加删除节点

新增节点

  • 修改master中的hosts,添加新增节点的IP,并且将hosts同步到其他节点,包括新增及节点。
  • 拷贝hadoop1~hadoop2某个节点的配置到新增节点,修改$HADOOP_HOME/conf/slaves,添加新增节点的域名或者IP
  • 在新增节点上开启守护进程DataNode和TaskTracker:
    hadoop-daemon.sh start datanode
    hadoop-daemon.sh start tasktracker
  • 执行均衡,start-balancer.sh

删除节点

  • 修改集群配置,如果conf/hdfs-site.xml中没有配置dfs.hosts.exclude,则添加以下配置:
    <property>
    <name>dfs.hosts.exclude</name>
    <value>/data/soft/hadoop/conf/excludes</value>
    </property>

  • 在dfs.hosts.exclude指定的文件中指定要下架的机器,一行一个, 如:
    hadoop1
    hadoop3
  • 强制集群重新加载配置:
    hadoop dfsadmin -refreshNodes
  • 等上述过程结束时,就可以安全关闭要下架的机器了,通过report可以查看状态。
    hadoop dfsadmin -report
    如果已经完成,将显示
    Decommission Status : Decommissioned
    否则显示
    Decommission Status : Decommission in progress


参考

《Hadoop权威指南》
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值