Hadoop其实本身是Linux下开发的应用,不过得益于虚拟机技术,也可以运行在其他平台。例如FreeBSD。

不过,Linux用的好好的,为什么用FreeBSD呢?
这个问题的回答其实比较复杂,基于几个方面考虑。
一、磁盘IO速度
其实根据我以前的评测,FreeBSD的UFS2写入速度并不如EXT4快,甚至慢很多,但是读取速度明显快于EXT4和EXT3。每读取1G的数据,基本要比EXT4快0.8-1.5秒。Hadoop的HDFS是构建在基本文件系统上的,所以,基本文件系统的读写速度决定了HDFS的读取速度,而HADOOP处理的都是TB级数据,所以,1G感觉不明显,1TB读取就大约快了800-1500秒,相当于快了15-30分钟。HDFS的设计初衷就是一次写入多次读取,所以读取速度越快越好。
二、网络IO速度
FreeBSD是TCP/IP协议的最早实现者,所以,在这个网络数据传输速度和稳定性上,FreeBSD还是要优于Linux的。
三、高度精简系统强壮,稳定和高安全性
FreeBSD的系统在默认安装情况下,是高度精简的,除了内核和常用命令,并没有多余的东西,非常干净和稳定。其稳定性也是久经考验,10年不关机的故事不是神话,据说目前Hotmail还有一部分FreeBSD的服务器。网络安全方面得天独厚,被发现的远程漏洞明显少于Linux。另外,由于UFS2默认采用实时写入的方式,基本不用考虑掉电的数据安全问题。
基于以上几方面考虑,似可认为,FreeBSD更适合大数据的挖掘工作。省时很重要,我们一生有多少分钟可以浪费在盯着屏幕等待map/reduce脚本的执行上呢?
不过,在FreeBSD上安装hadoop也存在一些缺憾,比如,默认的csh不支持执行hadoop脚本,需要自己编译安装bash。因为许可协议问题,FreeBSD对JDK的安装不是很友好,需要自己下载所有的安装包才行,并不能通过ports直接make install。
不过,为了节约生命,这些我都可以忍了。
那么,开始介绍FreeBSD安装Hadoop。
先进入/usr/ports/java/jdk16目录,执行make install,这是一定会报错的。不过我们需要的就是报错信息,根据报错信息提示,我们下载几个安装文件,放到/usr/ports/distfiles下面,大概有5,6个文件。然后我们再返回/usr/ports/java/jdk16下执行make install,等待安装完成。
然后去hadoop.apache.org下载hadoop-0.20.205.0,尽管hadoop发布了0.22,0.23,和1.0。但是我不建议使用,因为目前hadoop的外围诸如Hive,HBase等,对这些新版本支持并不好,所以还是下一个稳定支持的版本比较好。
其实hadoop的安装很简单,就不需要安装,只要找个目录解压缩就可以了。
当然,为了正常使用hadoop,你还需要执行以下步骤
#cd /usr/ports/shells/bash
#make install
#cd /usr/ports/devel/apache-ant
#make install

###添加hadoop用户

#pw user add hadoop
#chsh hadoop

###将/bin/sh改为/usr/local/bin/bash,保存退出

#chown -R hadoop:hadoop /path/to/your/hadoop
#su hadoop
#export JAVA_HOME=/usr/local/jdk16_21
#export HADOOP_HOME=/path/to/your/hadoop

然后执行
注意,现在是hadoop用户,以下事情都要用hadoop用户完成

#cd $HADOOP_HOME
###运行ant,不运行也可以,无所谓了
#ant

编辑$HADOOP_HOME/conf/core-site.xml
#vi $HADOOP_HOME/conf/core-site.xml
删除所有内容,加入以下
<configuration>
         <property>
                 <name>fs.default.name</name>
                 <value>hdfs://localhost:9000</value>
         </property>
</configuration>

#vi $HADOOP_HOME/conf/hdfs-site.xml
删除所有内容,加入以下
<configuration>
         <property>
                 <name>dfs.replication</name>
                 <value>1</value>
         </property>
</configuration>

#vi $HADOOP_HOME/conf/mapred-site.xml
删除所有内容,加入以下
<configuration>
         <property>
                 <name>mapred.job.tracker</name>
                 <value>localhost:9001</value>
         </property>
</configuration>

配置完成,我们可以去启动hadoop试试,现在可以看到,我启动的是单机版伪分布式。网络版和对硬盘的详细配置下节说。
#cd $HADOOP_HOME/bin
#./hadoop namenode -format
#./hadoop_daemon.sh start namenode
#./hadoop_daemon.sh start jobtracker
#./hadoop_daemon.sh start datanode
#./hadoop_daemon.sh start tasktracker

顺利的话,用ps aux可以看到4个java进程,当然,不顺利是大多数情况。
所以要排错。
#cd $HADOOP_HOME/logs/
#ls -la
#cat hadoop-hadoop-namenode-localhost.log

按照顺序,分别检查namenode,jobtracker,datanode,tasktracker的日志文件,以便找出报错。
完成了。很省事,不是吗。