2008-06-19

搭建Cloud Computing测试环境--hadoop/hbase

关键字: hadoop/hbase

最近研究hadoop,由于hbase0.12的lib包里面包含的是hadoop0.16.3,如果没打算研究hbase的话,建议下载hadoop0.17版本,相对稳定些。故我们就使用hadoop0.16.3版本来安装学习。网上有几篇文章讲解如何安装,但都有这样那样的问题,下面就以我们的安装步骤来说明
1、硬件环境
    我们采用了3台机器来构建,都安装的是Ubuntu8.04系统,并且都有一个名为“quan“的帐号,如下:
           主机名称:360quan-1    ip:192.168.0.37        功能:NameNode,JobTracker
           主机名称:360quan-2    ip:192.168.0.43        功能:DataNode,TaskTracker
           主机名称:360quan-3    ip:192.168.0.53        功能:DataNode,TaskTracker
    重点:修改3台机器的/etc/hosts,让彼此的主机名称和ip都能顺利解析
          127.0.0.1       localhost
          192.168.0.37    360quan-1
          192.168.0.43    360quan-2
          192.168.0.53    360quan-3
2、每台机器都要安装java环境,我们的路径统一为“/opt/jdk1.6.0_03“,并添加到系统环境变量 sudo gedit /etc/profile

       JAVA_HOME=/opt/jdk1.6.0_03
	CLASSPATH=$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:.
	PATH=$JAVA_HOME/bin:$PATH
	export JAVA_HOME
	export CLASSPATH
	export PATH

 3、下载hadoop0.16.3,hbase0.12版本到"360quan-1",将hadoop解压到/home/quan/opt/hadoop,hbase解压到hadoop/contrib/hbase。建议最好也将hadoop的目录添加到环境变量里面去:

       HADOOP_HOME=/home/quan/opt/hadoop	#这是hadoop的主目录
	export HADOOP_HOME
	HADOOP_CONF_DIR=$HADOOP_HOME/conf	#这是hadoop的配置文件目录
	export HADOOP_CONF_DIR
	HADOOP_LOG_DIR=/home/quan/hadoop/log	#存放运行日志目录
	export HADOOP_LOG_DIR
	HADOOP_SSH_OPTS="-p 22"			#SSH的端口号,其实默认就是22
	export HADOOP_SSH_OPTS	

 4、安装ssh,这里注意ubuntu8.04下面是ssh2,如果是ssh1的话,请升级,安装完后,建立ssh通道,使用空密码(生产环境可不能使用空密码啊),这里使用“360quan-1”这台机器为例说明:

       sudo apt-get install ssh
	ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa 
	cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

      以上配置完成后,执行一下ssh localhsot,确认你的每台机器都可以使用ssh(不需要密码)连接,连接成功后会输出以下信息:

       Linux zhangqiaohui-desktop 2.6.24-19-generic #1 SMP Wed Jun 4 16:35:01 UTC 2008 i686
	The programs included with the Ubuntu system are free software;
	the exact distribution terms for each program are described in the
	individual files in /usr/share/doc/*/copyright.
	Ubuntu comes with ABSOLUTELY NO WARRANTY, to the extent permitted by
	applicable law.
	To access official Ubuntu documentation, please visit:
	http://help.ubuntu.com/
	Last login: Thu Jun 12 10:40:50 2008 from localhost

     ok后,我们将“360quan-1”机器上产生的这个空密钥拷贝到另外2台机器上,作为公共密钥,让namenode也可以不需要密码访问2台datanode:

       sudo scp authorized_keys 360quan-2:/home/quan/.ssh/ 
	sudo scp authorized_keys 360quan-3:/home/quan/.ssh/ 
	ssh 360quan-2
	ssh 360quan-3

 5、接下来,我们要修改hadoop的相关设定了。修改"360quan-1"上面的hadoop的[conf/masters]、[conf/slaves]这2个文件:

       Master设置(<HADOOP_HOME>/conf/masters) :360quan-1
       Slave设置(<HADOOP_HOME>/conf/slaves) L:360quan-2 360quan-3
6、修改[conf/hadoop-env.sh]:

       export JAVA_HOME=/opt/jdk1.6.0_03

7、修改[conf/hadoop-site.xml],这里只是几个常用的属性配置,有关hadoop的性能优化调整,需要研究hadoop-default.xml:

<configuration>
		<property>
			<name>fs.default.name</name>
			<value>360quan-1:9000</value>
			<description>指定NameNode的IP地址和端口号,缺省值是file:///, 表示使用本地文件系统, 用于单机非分布式模式</description>
		</property>
		<property>
			<name>mapred.job.tracker</name>
			<value>360quan-1:9001</value>
			<description>指定 JobTracker的IP地址和端口号。缺省值是local, 表示在本地同一Java进程内执行JobTracker和TaskTracker, 用于单机非分布式模式</description>
		</property>
		<property>
			<name>dfs.replication</name>
			<value>1</value>
			<description>指定HDFS中每Block被复制的次数,起数据冗余备份的作用。在典型的生产系统中,这个数常常设置为3。</description>
		</property>
		<property>
			<name>hadoop.tmp.dir</name>
			<value>/home/quan/opt/hadoop/tmp/</value>
		</property>
	</configuration>

 8、修改hbase的[hbase-evn.sh]:
        export JAVA_HOME=/opt/jdk1.6.0_03
9、修改hbase的[hbase-site.xml]:

<configuration>
		<property>
			<name>hbase.master</name>
			<value>360quan-1:60000</value>
		</property>
		<property>
			<name>hbase.rootdir</name>
			<value>hdfs://360quan-1:9000/hbase</value>
		</property>
</configuration>

 10、然后将hadoop的整体环境拷贝到360quan-2、360quan-3上面去
          scp -r /home/quan/hadoop 360quan-2:/home/hdp/
          scp -r /home/quan/hadoop 360quan-3:/home/hdp/
11、在360quan-1这个namenode上面格式化一个新的分布式文件系统HDFS,就是hadoop-site.xml文件中指定的hadoop.tmp.dir路径
         <HADOOP_HOME>/bin/hadoop namenode -format
    
到此大致上就完成了属于你自己的Cloud Computing环境了
        启动hadoop:<HADOOP_HOME>/bin/start-all.sh
        启动hbase:<HADOOP_HOME>/contrib/hbase/bin/start-hbase.sh
        停止hbase:<HADOOP_HOME>/contrib/hbase/bin/stop-hbase.sh
        停止hadoop:<HADOOP_HOME>/bin/stop-all.sh
说明:
    (1) 执行 $ bin/start-all.sh启动Hadoop进程后,会启动5个java进程,同时会在/tmp目录下创建五个pid文件记录这些进程ID号。通过这五个文件,可以得知namenode,datanode,secondary namenode,jobtracker,tasktracker 分别对应于哪一个Java进程。当你觉得 Hadoop 工作不正常时,可以首先查看这5个java进程是否在正常运行,运行jps命令也可以查看。
    (2) 访问 http://360quan-1:50030 可以查看JobTracker的运行状态。访问 http://360quan-1:50060可以查看 TaskTracker的运行状态。访问 http://360quan-1:50070可以查看NameNode以及整个分布式文件系统的状态,浏览分布式文件系统中的文件以及log等。
    (3) 查看 ${HADOOP_HOME}/logs目录下的log文件,namenode,datanode,secondary namenode,jobtracker, tasktracker各有一个对应的log文件,每一次运行的计算任务也有对应用log文件。分析这些log文件有助于找到故障原因。

评论
blank 2008-06-21
to fredzhang :
呵呵,我只是说用hadoop/hbase来搭建cloud computing测试环境,我并没有说hadoop/hbase就是cloud computing
google的gfs论文我看了,确实有很多地方没有搞明白,但gfs并不开源,可参考的资料非常少,我想任何人光从这个论文就能完全理解该思想或者搞一套自己的gfs还是有点难度的吧?现在有了开源的hadoop/hbase来让我们学习理解cloud computing,毕竟现在hadoop还没有真正意义上的1.0版本,但从中应该可以将gfs的思想理解透彻一点,但我们并不是要去研究gfs而研究hdfs,我们也是从公司实际的需求来考虑研究hdfs是否有好的解决方案.
感谢指教!
fredzhang 2008-06-21
1. gfs的论文你仔细阅读过了吗?它的思想决定了基于它应当如何来实现,如何才能高容错,什么叫批处理,应当应用在什么IO前提之下,围绕这些思想,设计非常明确,不论是hadoop(HDFS)还是kfs。hadoop(其中的HDFS)的代码非常晦涩,但kfs的非常好,事实上,我们在接下来的项目中正是基于kfs来实现分布式存储,因为应用语境类似。换句话说,如果没有kfs,我们也会基于gfs来给出自己的实现。
2. 关于cloud computing,仅仅mapreduce+gfs,这只是一个分布式框架,适合于企业内部应用,你怎么就能把它跟面向公共服务的cloud computing搞在一起呢?分布式计算出现几十年了,由于google商业上的成功,同时也不排除对它技术的炒作和神话,以及open source的兴起,才使得原本阳春白雪的玩意让大众有了了解的前提。有兴趣你可以看看grid是什么东东。面向大众提供分布式计算服务,最重要一点,就是如何保证对于不同的客户能够提供统一平台从而确保计算任务的划分和归并。至于计算任务的划分和归并本身,即mapreduce,这是任何分布式框架最起码的功能,只不过由于有了google论文的提炼,使得这种思想变得异常简单和为众人所理解而已,远远谈不上本质上的创新。在如何提供统一平台这一点上,不同企业对此定义差别很大。
3. hbase本人同事刚好在用,用以存储超大矩阵,由于崩溃且没找出什么原因,所以暂时将数据存储在数据库做为过度。
blank 2008-06-20
to frdzhang:

引用
hadoop是完全基于 google的论文实现的,因此,除非对论文本身的前提进行调整

这个看法我不敢苟同,什么叫完全基于?就google论文的那点说明?最多就是个思想而已
引用
hadoop仅仅是一种分布式文件系统,没必要把它看得太神秘

我一直没把如何东西看得很神秘,虽然我水平不行,呵呵
引用
hadoop+hbase就cloud computing,作者在这里有标题党之嫌

想想也确实是有点标题党之嫌,同意,不过还请指教真正的cloud computing是什么东东,学生学习一二
引用
hbase还可能有在数据量过大而崩溃的情况

请问是否自己真正测试过?如有,还请指出什么原因,好让我们少走点弯路,谢谢
fredzhang 2008-06-20
下一个版本会对小文件操作性能改善么?hadoop是完全基于 google的论文实现的,因此,除非对论文本身的前提进行调整。
此外,hadoop仅仅是一种分布式文件系统,没必要把它看得太神秘,甚至于在机器数量少的时候都可以采用nfs等等其他分布式文件系统做替代。
此外,hadoop+hbase就cloud computing,作者在这里有标题党之嫌,hadoop+hbase的搭配仅仅算得上是一个能存储结构化数据的文件系统,距离cloud computing 还差了十万八千里。
最后,无论是hadoop还是hbase,都有不同替代者。hbase还可能有在数据量过大而崩溃的情况,或许可以试试其他选择如hypertable之类。
blank 2008-06-20
hadoop目前主要是针对大数据和多服务器来研究开发的,对小数据量支持的并不好,下个版本可能对小文件的操作性能会有所提升
我们研究的条件有限,只有1个namenode和3个datanode来测试,速度确实不是很快
也不能说hadoop不成熟,只是很少有公司有相关的需求而已,故研究学习的并不多
facebook就是使用的hadoop,使用的很好
xingshaomin 2008-06-20
请问有没有做性能测试,我也很想用,可是网上有人的测试结果认为,性能提升并不多,可能是hadoop还不太成熟
发表评论

您还没有登录,请登录后发表评论

blank
搜索本博客
我的相册
5c2c51d9-1a15-3713-8084-e1742c808801-thumb
P1080256
共 30 张
存档
最新评论