之前我们用虚拟机安装了linux,很多书和资料上都提出了可以用伪分布以及采用在windows下用cygwin的方式去搭建hadoop环境。首先伪分布的方式,我觉得完全没有必要去搭建,因为在实际的项目中也不可能用这种方式,另外它也不利于我们的学习。第二cygwin的方式,我强烈建议大家不要用这种方式安装。很多人觉得一开始用虚拟机会比较麻烦,不愿意安装虚拟机。如果你采用cygwin的方式的话,会遇到很多很多莫名其妙的错误。而且有些根本没法解决,在前期搭建环境的时候就会消耗你很多的时间去解决这些莫名奇妙的问题,而且还会打击到你学习的积极性。怎么说呢,时间也算是学习的成本吧,所以还是分享一点个人的经验,以免大家少走弯路。
这里我们采用最快的方式先把hadoop环境搭建起来。其实我觉得学习编程最好的方式就是先把例子跑起来,先写好第一个hello word。具体细节之后才去详细分析。所以,这里我还是采用这种方式。先以最快的速度搭起来,其中具体的细节和知识点,我们以后有机会再做分析。
一 . 安装准备
1 . 下载hadoop,去官网下载。http://www.apache.org/dist/hadoop/core/
hadoop版本更新也非常的快现在已经到了2.0.0的测试版本。但是我们这里还是建议下载0.20.2这个版本的。选择这个版本原因之一是它非常的稳定,其二现在绝大多数企业中都是采用的这个版本,我们公司也不例外,另外就是这个版本的资料相对较多,大家遇到问题的时候也好寻找解决方案。
2 . 下载jdk,我这里选择的版本是 jdk-6u32-linux-i586.bin.还是给比较懒的同学们发一下下载链接 http://www.oracle.com/technetwork/java/javase/downloads/index.html
3 . 操作系统采用32位的 CentOS 这也是企业中用的比较多的。最主要的原因我想是因为他免费吧。前面我们已经安装好了虚拟机。
4 . 物理机。这里我们的条件不具备,因此我们只能通过虚拟机才学习。 效果是一样的。
二 . Cloudera
1 . 本来打算后面的实战篇介绍的,这里还是顺带提一下Cloudera,其实这个公司他的定位其实就是把hadoop标准化,他将hadoop源码进行了修改,让其配置标准化以达到更方便的帮助企业安装,配置,运行hadoop以达到大规模企业数据的处理和分析。Cloudera的Hadoop配置和HBase,Hive,Pig等有良好的接口,使得这些软件的安装,配置和使用的成本降低并且进行了标准化。其实在我们实际的项目中采用的就是Cloudera系列的产品,主要原因就是他可以很方便的和我们的HBase,Hive等进行整合。
官网:https://www.cloudera.com
使用版本:hadoop-0.20.2-cdh3u2.tar.gz
下载地址:http://archive.cloudera.com/cdh/3/
(写半天不小心关掉了。一大版文字又要重新写了。建议iteye还是出个自动保存功能。555.)
三 . jdk的安装和配置
1 . 我们用的jdk的版本是 jdk-6u32-linux-i586.bin ,大家自行去sun的官方现在,当然现在是oracle.然后用filezllia讲安装包上传到我们的linux上。所有的节点都上传,也就是我们安装的linux虚拟机。这里大家可以根据自己的机器情况安装多个slave节点。因为我机器的空间原因只安装了1个master和1个slave,学习的话其实多少个slave都是一样只要了解原理就可以了。我们将jdk上传到/usr目录下。并且赋予执行的权限 chomod 777 jdk-6u32-linux-i586.bin,然后./jdk-6u32-linux-i586.bin执行安装包。
然后我们需要配置我们的java环境变量,同样每台节点都需要配置。export JAVA_HOME=/usr/jdk1.6.0_32
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$PATH:$JAVA_HOME/lib:$JAVA_HOME/jre/bin:$JAVA_HOME/bin
四 . hadooop的安装和配置
1 . 这里我们还是不要用root用户,另外创建一个hadoop用户来搭建hadoop环境。
useradd hadoop
passwd hadoop
2 . 用root用户登陆,在所有的节点上修改 /etc/hosts文件,添加所有的master和slave的ip
192.168.1.101 master
192.168.1.102 slave1
3 . 在我们的/usr下 创建hadoop目录并且制定好用户组,我们准备吧我们的hadoop安装到这个目录下。chgrp hadoop hadoop
chown hadoop hadoop
linux不熟的朋友可以再网上学习下简单的linux命令。
4 . 进入到hadoop目录用户的目录。su - hadoop
5 . 建立.ssh目录,执行的时候会有提示,直接三个回车。这个命令的意思是命令将为hadoop上的用户hadoop生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时 候,直接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在/root/.ssh目录下(注意如果是master和salve的IP有变化的话,需要重新执行此步,如果出现错误可以在/var/log/secure下查看日志文件)ssh-keygen -t rsa
6 . 将.ssh赋予755权限(很关键)chmod 755 .ssh
此时.ssh目录下回有两个文件 id_rsa 和 id_rsa.pub。如果没有请重新执行此步骤。
7 . 这一步只需要再master主节点上执行。cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
这步的意思是把公用密匙添加到authorized_keys 文件中,然后记得把这个文件赋予644权限ssh slave1 cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
上面这条命令是把slave1节点的公钥拷贝到master节点中的authorized_keys中去,如果你有多个slave节点那么就执行多个 slave1是节点的名称。scp ~/.ssh/authorized_keys slave1:~/.ssh/authorized_keys
上面这条命令是指authorized_keys文件拷贝回每一个节点,同样slave1是节点名称,如果有多个则执行多次。
8 . 登陆在master主节点,然后连接所有slave节点。输入如下命令,上有几个slave节点就要输入几次,注意每次输入后,要返回master节点,(exit)重新输入命令。需要选择yesssh slave1
此时查看 ls .ssh目录下有四个文件 authorized_keys id_rsa id_rsa.pub known_hosts
9 . 将我们下载好的 hadoop-0.20.2.tar.gz 上传到我们每台节点的hadoop目录下。tar xvfz hadoop-0.20.2.tar.gz
10 . 配置hadoop环境变量,编辑/etc/profile,增加以下内容export HADOOP_HOME=/usr/hadoop/hadoop-0.20.2
export PATH=$PATH:$HADOOP_HOME/bin
11 . 修改hadoop配置文件,在hadoop的conf目录下编辑master和slave文件。master文件里面添加 master,slave文件里面添加所有slave节点的IP,有多少个加多少个我这里只有一台slave,加上slave1 ,也可以直接加上IP,我这里用的添加主机名的方式。
12 . 修改以下共3个xml配置文件:
a . 首先hadoop-env.sh中添加如下语句:export JAVA_HOME=/usr/jdk1.6.0_32
b . core-site.xml:<configuration>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/tmp</value>
</property>
</configuration>
如果没有tmp目录就创建一个.
c . mapred-site.xml:<configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>
d . hdfs-site.xml:(这里如果不写 replication 默认为3,如果不修改,datanode 少于三台就会报错)<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
13 . 配置好的hadoop发送到多个salve节点上,有多少执行多少次scp -r /usr/hadoop/hadoop-0.20.2 slave1:/usr/hadoop/
14 . 在master节点上进入hadoop的bin目录 格式化文件系统,然后启动hadoop,当然要确保9000和9001端口是通的。./hadoop namenode -format
./start-all.sh
15 . 用jps命令查看是否启动正常。如果有4个进程 jps,namenode,second namenode,jobtracker。slave会有3个进程jps,datanode,tasktracker.这样表示启动正常。否则启动不正常。当然也可以通过查看日志的方式。还有就是通过web,通过访问http://master:50070查看namenode,访问http://master:50030查看jobtracker.
OK,到这里我们的hadoop环境就算搭建完成了.