摘要:我们在很多情况下只需要一个配置极简但具备所有功能的hadoop来做一些探索或者调查性等工作,虽然这时候的hadoop不具有生产环境下的强大配置和工业级的可靠性和稳定性但是它的可工作和可运行性已经足够。本文目的是在一个只有1核,cpu频率不到 1.8G,内存1G的机器上快速搭建一个hadoop伪分布式集群。
关键词:极简,hadoop
导言:我想用最新版的hadoop(写本文时是2.5.1),在一个极其简陋的Linux机器(CPU 1+G, core 1, memory 1G)上跑hdfs, MapReduce和YARN,可以吗?答案是肯定的。只要我们把Hadoop配成伪分布式,各个daemon进程(对YARN而言是namenode[nn],secondary namenode[snn], datanode[dn],resource manager[rm], node manager[nm])需要的内存配置成满足我们需要的极低值,就可以达成目的。虽然不是真正的分布式,但是它与真实的hadoop本质相象性可达到99.99%。比如,我想知道在一个命令行Java应用程序运行Jar或者Java class (不用hadoop本身的hadoop jar XXX.jar ....)来把自己写的wordcount MapReduce程序提交到集群并跑起来需要哪些jar和配置文件或属性。 再比如,我们有时在开发时只需要一个可运行hadoop环境验证代码正确性,然后再提交给QA去做正式的测试,那么这种快速极简的hadoop就非常有用。
环境:
机器与操作系统:1台 Linux机器,内存1G,
Java :Oracle JDK1.6.0_45 ,安装位置: /usr/java/jdk1.6.0_45
Hadoop: 版本 2.5.1,示例安装位置: ~/hadoop/hadoop-2.5.1
本示例使用root安装,请根据你的环境做相应修改
攻略与步骤:
1.安装Java,比如jdk1.6.0_45
2.下载Apache Hadoop2.5.1并解压 (比如解压到 ~/hadoop/hadoop-2.5.1)
3.建passwordless的ssh
3.1 # ssh-keygen (一路回车即可)
3.2 # cat id_rsa.pub >> authorized_keys
3.3 # chmod 700 ~/.ssh
3.4 # chmod 600 ~/.ssh/authorized_keys
4.修改Hadoop配置文件(在目录~/hadoop/hadoop-2.5.1/etc/hadoop)
4.1 core-site.xml:
<property>
<name>fs.defaultFS</name>
<value>hdfs://centos6.localdomain:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/root/hadoop/hadoop-2.5.1/temp</value>
</property>
4.2 hdfs-site.xml:
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
4.3 mapred-site.xml:
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
4.4 yarn-site.xml:
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>centos6.localdomain</value>
</property>
4.5 hadoop-env.sh
把 export JAVA_HOME那一行改成你的java安装目录,比如:
export JAVA_HOME=/usr/java/jdk1.6.0_45
到export HADOOP_HEAPSIZE= 和 export HADOOP_NAMENODE_INIT_HEAPSIZE= 改成128,比如
export HADOOP_HEAPSIZE=128
export HADOOP_NAMENODE_INIT_HEAPSIZE="128"
4.6 yarn-env.sh
把 export JAVA_HOME改成和4.5一样。
把 JAVA_HEAP_MAX改成-Xmx128m,比如:JAVA_HEAP_MAX=-Xmx128m
5.执行namnode format
在~/hadoop/2.5.1/bin 下执行 #./hadoop namenode -format
6.启动hadoop
在~/hadoop/2.5.1/sbin 下执行 #./start-all.sh
可以看到 如图所示,所有hadoop后台进程已经起来
7. 查看下内存,是否达到我们的期望:
内存只占用了569 M,不错~~
8.运行下hadoop自带的wordcount程序看看:
先弄个小文件,上传到hdfs比如/user/root/wordcount/input/,#hadoop fs -put ~/hadoop/2.5.1/sbin/start-all.sh /user/root/wordcount/input
运行wordcount:
运行成功,更不错~~
9. 在web界面查看hdfs和RM
在RM上看到wordcount运行成功。。。目的达成! :)
说明:
1. Unable to load native-hadoop library for your platform... using builtin-java classes where applicable 一般不影响运行除非你用到nativeIO,比如解压缩。
2. 如果没有linux机器只有windows ,可以考虑安装一个Oracle VirtualBox在windows上,在virtualBox上建个虚拟机,也可以跑得很欢。其网络配置可参考本人另一博客:
用VirtualBox 对Linux虚机进行网络配置 用VirtualBox 对Linux虚机进行网络配置