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的系统组件
![](https://img-my.csdn.net/uploads/201304/08/1365436158_1539.jpg)
部署Hadoop集群, 一般让DataNode和TaskTracker运行在节点上,这样以便尽可能的达到计算数据的本地化。对于小集群,NameNode、SecondaryNameNode以及JobTracker可以运行在同一个节点上。如果集群够大, 并且条件运行, 最好是将这三者单独运行不同的节点上。
硬件准备
- 操作系统:Red hat 6.2 X86_64
- 内存:建议每个核2G, 具体大小配置,见mapred-site.xml设置。
- 机器规划,并且设置hostname为其域名
IP | 域名 | 备注 |
192.168.1.100 | master | NameNode、JobTracker |
192.168.1.101 | secondmaster | SecondaryNameNode |
192.168.1.102 | hadoop1 | DataNode、TaskTracker |
192.168.1.103 | hadoop2 | DataNode、TaskTracker |
192.168.1.104 | hadoop3 | DataNode、TaskTracker |
- 为每个机器创建一个共同的用户:hadoop
软件准备
- 安装Java 1.6 或者以上版本
- 安装ssh, 运行sshd
安装配置
配置SSH免密码登陆
设置master到所有节点的SSH免密码登陆(包括master本身)。如何设置见SSH免密码登陆。
关闭各个节点的防火墙
安装、配置Hadoop
安装Hadoop
配置Hadoop
设置hadoop-evn.sh
export JAVA_HOME=/opt/jdk1.6.0_27
设置core-site.xml
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/hadoop/datas/tmp</value>
</property>
<property>
<name>fs.checkpoint.dir</name>
<value>/home/hadoop/hadoop/datas/hdfs/namesecondary</value>
</property>
设置hdfs-site.xml
<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
<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:
设置masters
secondmaster
设置slaves
hadoop1
hadoop2
hadoop3
安装LZO
开启机架感知
<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")
启动、停止集群
运行日志
![](https://img-my.csdn.net/uploads/201304/08/1365436367_9494.jpg)
验证是否部署成功
jps查看进程
通过web查看
运行一个例子
![](https://img-my.csdn.net/uploads/201304/08/1365435941_6272.jpg)
集群增加删除节点
新增节点
- 修改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