因为最近想做一个基于豆瓣图书分析的展示系统,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 文件夹下统计出所有单词和词频。