alpha尝鲜安装和Hello world

仅供测试学习的文章,不推荐在生产环境使用Hadoop 2.0,因为2.0采用YARN,hive,hbase,mahout等需要map/reduceV1的可能无法使用hadoop 2.0或者会出现意外情况。


5月23日,apache发布了hadoop 2.0的测试版。正好跟家呆着没事干,小小的体会了一下map/reduce V2。


环境,virtual box虚拟机Ubuntu server 12.04,openjdk-7。


简单介绍一下,2.0.0是从hadoop 0.23.x发展出来的。取消了jobtracker和tasktracker,或者说,是把这两个封装到了container里面。使用YARN替代了原来的map/reduce。


YARN号称是第二代map/reduce,速度比一代更快,且支持集群服务器数量更大。hadoop 0.20.x和由其发展过来的1.0.x支持集群数量建议在3000台左右,最大支持到4000台。而hadoop 2.0和YARN宣称支持6000-10000台,CPU核心数支持200000颗。从集群数量和运算能力上说,似乎还是提高了不少的。并且加入了namenode的HA,也就是高可用。我说似乎,因为没有在实际生产环境测试速度。而namenode的HA,因为是虚拟机测试, 也就没有测试。只是简单的看了一下。


2.0的文件结构相比1.0有所变化,更加清晰明了了。可执行文件在bin/下,server启动放到了sbin/下,map/red,streaming,pipes的jar包放到了share/下。很容易找到。


安装包解压缩后,先进入etc/hadoop/目录下,按照单机版方式配置几个配置文件。有core-site.xml,hdfs-site.xml,但是没有了mapred-site.xml,取而代之的是yarn-site.xml


假设已经按照单机配置配好了,那么进入$HADOOP_HOME/bin/目录下

执行如下


./hadoop namenode -format
#先格式化
cd ../sbin/
#进入sbin目录,这里放的都是server启动脚本
./hadoop-daemon.sh start namenode
./hadoop-daemon.sh start datanode
./hadoop-daemon.sh start secondarynamenode
#备份服起不起都无所谓,不影响使用,不过可以用来试试HA功能
#下面较重要,2.0取消了jobtracker和tasktracker,以YARN来代替,所以如果运行start jobtracker一类的,会报错。
#且hadoop,hdfs,map/reduce功能都分离出了单独脚本,所以不能用hadoop-daemon.sh启动所有了。
./yarn-daemon.sh start resourcemanager
#这个就相当于原来的jobtracker,用作运算资源分配的进程,跟namenode可放在一起。
./yarn-daemon.sh start nodemanager
#这个相当于原来的tasktracker,每台datanode或者叫slave的服务器上都要启动。


ps aux一下,如果看到4个java进程,就算启动成功了,访问:50070看看hdfs情况。且由于取消了jobtracker,所以也就没有50030端口来查看任务情况了,这个以后再说吧。


然后来试试编写第一个map/reduce V2的程序。其实从程序的编写方式来说跟V1没有任何区别,只是最后调用方式变化了一下。hadoop 2.0为了保证兼容性,用户接口方面对于用户来说,还是跟原来是一样的。


这样一段数据


20120503        04      2012-05-03 04:49:22                     222.139.35.72   Log_ASF ProductVer="5.12.0425.2111"

20120503        04      2012-05-03 04:49:21                     113.232.38.239  Log_ASF ProductVer="5.09.0119.1112"


假设就2条不一样的吧,一共20条。


还是用Python来写map/red脚本


#!/usr/bin/python
#-*- encoding:UTF-8 -*-
#map.py
import sys

debug = True
if debug:
                lzo = 0
else:
                lzo = 1

count='0'
for line in sys.stdin:
                try:
                                flags = line[:-1].split('\t')
                                if len(flags) == 0:
                                                break
                                if len(flags) != 5+lzo:
                                                continue

                                stat_date = flags[2+lzo].split(' ')[0]
                                version = flags[5+lzo].split('"')[1]

                                str = stat_date+','+version+'\t'+count
                                print str

                except Exception,e:
                                print e


------------------------------------------------------------------

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:http://www.heiqu.com/4b4dbc4c4a331366130f2cd1d4a145e7.html