前言
Hadoop从存储上来说,是类似于冗余磁盘阵列(RAID)的存储方式,将数据分散存储并提供以提供吞吐量,它的存储系统就是HDFS(Hadoop Distuibute Fils System);从计算上来说,它通过MapReduce模型,将大数据的计算分发到多台计算机上完成,再将结果合并,减少计算的时间。
Hadoop适合于:
1、超大数据的计算;
2、一次写入、多次读取的模式;
3、可以跑在普通的硬件上。
Hadoop不适合:
1、低延迟的数据访问,它是为高数据吞吐量应用优化的;
2、大量的小文件
Hadoop客户端需要和namenode进行交互,而namenode中存放的是datanode的文件属性,且都是在内存中,如果小文件过多,namenode是存放不了的;
3、多用户写入,任意修改文件。
Hadoop适合于一次计算,多次读取的场景,如搜索引擎,只支持随机读取不支持随机写入,如Hadoop和Lucene的集成就不能够直接集成,因为Lucene支持随机写入。
本文将从使用的角度上谈了如何搭建Hadoop、如何配置Hadoop、如何验证Hadoop及在Hadoop上面执行计算,以及可能会遇到些什么样的问题。
一、Hadoop环境搭建
因为Hadoop需要在Linux运行,并且Hadoop是基于Java的,在继续进行下面的步骤之前,请确认你已经准备好Linux操作系统以及Java 6或以上版本,并且已经正确的设置了JAVA_HOME。
1、下载Hadoop
搭建Hadpp的版本为1.2.1 下载地址为:http://apache.fayea.com/apache-mirror/hadoop/common/hadoop-1.2.1/
2、安装Hadoop
解压缩Hadoop到任意目录,我当前的Hadoop是将其解压到目录/usr/local/hadoop-1.2.1,并在/etc/profile中设置好环境变量HADOOP_HOME(这个变量不是必须的,在1.2.1已经是Deprecated了,这里我之所以设置,还是为了方便),以及将$HADOOP_HOME/bin目录加入到PATH中,这样我们就可以在任意地方执行hadoop命令了,为了使用上的方便,再给”hadoop fs”设一个名为hdfs的alias方便使用,以下是我机器上/etc/profile增加的内容:
export JAVA_HOME=/usr/local/jdk1.6.0_33 export HADOOP_HOME=/usr/local/hadoop-1.2.1 export CLASSPATH=.:$JAVA_HOME/lib/tools.jar:$JAVA_HOME/lib/dt.jar PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin #Alias for hadoop alias hdfs=‘hadoop fs‘ |
注:该文件的编辑需要root权限,修改完成后,如果想立即生效,需要通过source命令操作一下:
source /etc/profile |
否则就只有退出重新登陆才会生效。
3、准备ssh
Hadoop需要通过SSH和其它计算服务器进行沟通,所以首先要确定本机或者是其它Hadoop计算服务器,是否都已经安装了ssh。
(1)、确定系统是否安装了ssh和ssh-keygey
可以通过which命令来确认
which ssh which ssh-keygen |
如果出现
/usr/bin/which: no ssh in (/usr/.....)则表示系统里面没有安装SSH服务,可以通过www.openssh.com下载安装
(2)、发布公钥证书
执行如下命令:
ssh-keygen -t rsa -P ‘‘ -f ~/.ssh/id_rsa |
在~/.ssh/ 目录会生成id_rsa和id_rsa.pub两个文件,将id_rsa.pub复制一份在~/.ssh/目录下,并重命名为authorized_keys,如果是单机搭建伪分布式,此时ssh的准备工作已经完成了,如果使用全分布式环境,那么需要将authorized_keys及id_rsa两个文件复制到各台分布式slave机器的“~/.ssh目录中”中,这样任意两台机器之间互相通过ssh访问,都不需要输入密码了,如果只是拷贝到authorized_keys到slave机器中,就只能够实现主到从的不输密码访问。
(3)测试登陆验证
在本例中,采用的是在单机中搭建伪分布式系统,通过如下ssh命令尝试登陆:
ssh localhost 或 ssh 127.0.0.1 |
如果不再提示输入密码,直接登陆成功,那么SSH登陆就设置成功了。
Hadoop入门进阶步步高(一)-环境准备