因为最近想做一个基于豆瓣图书分析的展示系统,hadoop处理海量数据有巨大优势,于是在一无所知在Ubuntu下安装hadoop,历经各种曲折,先将经验与大家博友分享,

首先,了解Hadoop的三种安装模式:

1. 单机模式. 单机模式是Hadoop的默认模。当配置文件为空时,Hadoop完全运行在本地。因为不需要与其他节点交互,单机模式就不使用HDFS,也不加载任何Hadoop的守护进程。该模式主要用于开发调试MapReduce程序的应用逻辑。

2. 伪分布模式. Hadoop守护进程运行在本地机器上,模拟一个小规模的的集群。该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。

3. 全分布模式. Hadoop守护进程运行在一个集群上。

现在我搭建的环境是     (1)JDK1.8.0_45  (2)   ubuntu-14.04.2-desktop-i386 (3)hadoop2.7.0 

一:在Ubuntu下创建hadoop用户组和用户(为了便于以后联机)

1:增加用户名和用户组

kaka@Rev$ sudo  addgroup  hadoop
kaka@Rev$ sudo  adduser  –ingroup  hadoop  hadoop

2:增加hadoop用户为管理员权限,打开/etc/sudoers(因为后期会有大量的pemission)

kaka@Rev$ sudo  vi /etc/sudoers

在root  ALL=(ALL:ALL)  ALL下添加hadoop  ALL=(ALL:ALL)  ALL


二、配置SSH(其实作为单机模式和伪分布模式是不需要的)

配置SSH是为了实现各机器之间执行指令无需输入登录密码。务必要避免输入密码,否则,主节点每次试图访问其他节点时,都需要手动输入这个密码。

SSH无密码原理:master(namenode/jobtrack)作为客户端,要实现无密码公钥认证,连接到服务器slave(datanode/tasktracker)上时,需要在master上生成一个公钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的slave上。当master通过SSH连接slave时,slave就会生成一个随机数并用master的公钥对随机数进行加密,并发送给master。Master收到密钥加密数之后再用私钥解密,并将解密数回传给slave,slave确认解密数无误后就允许master进行连接了。这就是一个公钥认证的过程,期间不需要用户手工输入密码。重要过程是将客户端master复制到slave上。

1:在线安装ssh

先连接到hadoop账户下 su hadoop,然后安装

hadoop@Rev$ sudo apt-get install openssh-server

此时可能会报错就是ssh server版本过高的问题


正在读取软件包列表... 完成


正在分析软件包的依赖关系树      


正在读取状态信息... 完成      


有一些软件包无法被安装。如果您用的是 unstable 发行版,这也许是


因为系统无法达到您要求的状态造成的。该版本中可能会有一些您需要的软件


包尚未被创建或是它们已被从新到(Incoming)目录移出。


下列信息可能会对解决问题有所帮助:


下列软件包有未满足的依赖关系:


openssh-server : 依赖: openssh-client (= 1:6.6p1-2ubuntu1)


E: 无法修正错误,因为您要求某些软件包保持现状,就是它们破坏了软件包间的依赖关系。


这时候只需要将原来版本覆盖成需要版本即可


hadoop@Rev$ sudo apt-get install openssh-client=1:6.6p1-2ubuntu1

2:启动ssh,查看是否装好


hadoop@Rev$ sudo  sudo /etc/init.d/ssh start
hadoop@Rev$ ps -e |grep ssh

3

作为一个安全通信协议(ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式),使用时需要密码,因此我们要设置成免密码登录,生成私钥和公钥:



hadoop@Rev$sudo  ssh-keygen -t rsa -P ""

回车后会在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成对出现的前者为私钥,后者为公钥

进入~/.ssh/目录下,将公钥id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的(authorized_keys 用于保存所有允许以当前用户身份登录到ssh客户端用户的公钥内容):

hadoop@Rev$ cat ~/.ssh/id_rsa.pub>> ~/.ssh/authorized_keys

以后就可以利用ssh不用密码登陆机器:

1. hadoop@REV:~$ ssh localhost  
2. Welcome to Ubuntu 12.04 LTS (GNU/Linux 3.2.0-27-generic-pae i686)  
3.   
4.  * Documentation:  https://help.ubuntu.com/  
5.   
6. 512 packages can be updated.  
7. 151 updates are security updates.  
8.   
9. Last login: Mon Mar 11 15:56:15 2013 from localhost  
10. hadoop@REV:~$ exit

这时候记得输入 exit退出,因为你控制的是远程的机器。



三:安装java

1:从网上获取linux包tar.gz的然后解压到/usr/java目录下

  sudo tar zxvf jdk.tar.gz -C /usr/java/ 


在etc/profile 最后加上


export JAVA_HOME=
export JRE_HOME=
export CLASSPATH=.:$JAVA_HOME/lib:$JRE_HOME/lib
export PATH=$JAVA_HOME/bin:$PATH
然后source一下这个文件即可



3:检查是否装好



hadoop@Rev$ java -version

如果现实java版本号就说明成功




四 安装hadoop



1:从网上获取linux包tar.gz的然后解压到/usr/hadoop目录下



sudo tar zxvf hadoop.tar.gz -C /usr/hadoop/
2:要确保所有的操作都是在用户hadoop下完成的,所以将该hadoop文件夹的属主用户设为hadoop(因为以后的输入输出文件都在这里面,而且还要权限改一些配置参数,因此这一步很重要)
hadoop@REV$ sudo chown -R hadoop:hadoop /usr/hadoop
(1)配置hadoop用户下的环境变量 并source一下
sudo gedit ~/.bashrc
在java_home那边加上
export JAVA_HOME=/usr/java/jdk1.8.0_45export HADOOP_INSTALL=/usr/hadoop/hadoop-2.7.0export PATH=$PATH:/usr/hadoop/hadoop-2.7.0/bin五:单机模式配置成功需要验证    1:显示一下hadoop版本
   
   
hadoop@REV:/usr/hadoop$ hadoop version  
 
Hadoop 2.7.0  
 
Subversion https://svn.apache.org/repos/asf/hadoop/common/branches/branch-1.1 -r 1440782  
 
Compiled by hortonfo on Thu Jan 31 02:03:24 UTC 2013  
 
From source with checksum c720ddcf4b926991de7467d253a79b8b  
 
hadoop@REV:/usr/hadoop$



2:测试一下例子(

现在运行一下hadoop自带的例子WordCount来感受以下MapReduce过程)

(1)在hadoop目录下新建input文件夹,并在文件夹里面创建几个txt文档


hadoop@REV$ sudo mkdir /usr/hadoop/input


<pre name="code" class="plain" style="line-height: 21.59375px;">hadoop@REV:/usr/hadoop$ <span style="font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace;">Hadoop jar </span><span style="font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; white-space: pre-wrap;">/usr/hadoop/hadoop2.7.0/share/hadoop/mapreduce/sources/</span><span style="line-height: 1.8em; font-family: Consolas, 'Bitstream Vera Sans Mono', 'Courier New', Courier, monospace; white-space: pre-wrap;">hadoop-mapreduce-examples-2.4.0-sources.jar org.apache.hadoop.examples.WordCount input output</span>



成功后会在/usr/hadoop/output 文件夹下统计出所有单词和词频。