伪分布式hadoop在ubuntu下的安装

首先要说明的是,之前我在win7下有尝试过安装hadoop,但是费时费力还没有安装成功。相比之下,在linux下的安装配置确实比较简单。本文的大部分内容是直接从网上拷贝过来的,但是运行起来有些问题,我在安装的过程中做了修改和补充,其原文网址是http://www.cnblogs.com/tippoint/archive/2012/10/23/2735532.html,望参考。

安装前说明:

1)本文是在ubuntu12.10基础上安装hadoop1-1-2,如果是其它的环境和不同版本包大同小异。

2)安装前你可能需要知道你电脑的具体硬件配置,毕竟并行运算的效率在很大程度上很硬件有关,其相关命令可以参考http://www.ithov.com/linux/102860.shtml

3)另外,你需要安装JDK,JDK 分为两种OpenJDK 和sun公司的JDK,在ubuntu下已经安装的是OpenJDK,但这里需要安装的是sun公司的JDK,所以在此给你提个醒

4)针对那些对linux命令不太熟的同学,建议在安装每个步骤是首先清楚每个命令的含义,然后再进行此步骤的安装,循环往复

一.安装ubuntu

  我这里安装的是ubuntu12.10,不管是用虚拟机(http://baike.baidu.com/view/2690045.htm)还是直接安装一个linux系统,网上有很多教程,可以搜下,在此省略。

二. 在Ubuntu下创建hadoop用户组和用户;

1. 创建hadoop用户组;

1
sudo  addgroup hadoop

如图:


2. 创建hadoop用户;

1
sudo  adduser -ingroup hadoop hadoop

这里的ingroup表示为用户名指定组名,后面的第一个hadoop表示用户名,后一个表示组名(当然可以有多个);默认情况下其home地址为/home/hadoop,除非另有指定

如图:


3. 给hadoop用户添加权限,打开/etc/sudoers文件;

1
sudo  gedit /etc/sudoers

这里注意的是一般用到gedit的时候是要用到root的权限的,所以总是有sudo,你懂的

按回车键后就会打开/etc/sudoers文件了,给hadoop用户赋予root用户同样的权限。

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

1
hadoop  ALL=(ALL:ALL) ALL

如图:


三. 在Ubuntu下安装JDK

使用如下命令执行即可:

1
sudo  apt-get install  openjdk-6-jre

如图:


这里需要说明:我就是在这里没有太注意,后面费了点事情。

linux下的java有两种一个是openjdk一个sun的。因为一些原因,Sun Java 无法从 Ubuntu 的软件库里面取得
取而代之的是 OpenJDK,不过 OpenJDK 跑某些程式会出现问题所以还是需要 Sun Java 
下面说说在 Ubuntu 12.04 安装 Sun Java 的方法: 

(1)首先删除掉已经安装的openjdk

sudo apt-get purge openjdk*

(2)$ sudo apt-add-repository ppa:flexiondotorg/java

apt-add-resository是添加源命令,后面的是源地址

(3)$ sudo apt-get update 

一定要执行这个步骤啊,如果更新比较慢,在unbuntu软件中心更新源,操作方面是编辑--源,使用自动测试寻找最快的源,我开始是使用的这个,给我找的一个源后来不稳定,我手工切换到科技大学的源(前面也是这个源稳定啊)

(4)$ sudo apt-get install sun-java6-jre sun-java6-jdk sun-java6-plugin

这一步骤大概花费一点时间,下载几十M的软件,我是在这步就执行成功的,如果执行不成功,还可以使用下面的办法,(事实上,走到这里我还真没有执行成功,所以就运行了下面的步骤了):

$ sudo add-apt-repository "deb http://archive.canonical.com/ubuntu maverick partner"
$ sudo apt-get install python-software-properties
$ sudo apt-get update
$ sudo apt-get install sun-java*
$ sudo apt-get install openjdk-6-jdk openjdk-6-jdk gcj-4.6-jdk ecj default-jdk

(5)配置JAVA环境变量: 

这里遇到一个问题:我在添加环境变量的时候原以为在/usr/lib/jvm/的目录下应该有java-6-sun文件夹的,可打开没有,于是以为安装错了所以就重复执行了步骤(5),结果还是没有这个文件夹;后来索性硬着头皮进行下面的步骤,不过后来也确实运行成功了,至此也不理解为什么?
sudo gedit /etc/environment
在其中添加如下两行:

JAVA_HOME=/usr/lib/jvm/java-6-sun
CLASSPATH=.:/usr/lib/jvm/java-6-sun/lib

 (6)java -version查看不出错说明,成功,经从测试我的是1.7。

四. 修改机器名 (这步骤没有必要可以省略

每当ubuntu安装成功时,我们的机器名都默认为:ubuntu ,但为了以后集群中能够容易分辨各台服务器,需要给每台机器取个不同的名字。机器名由 /etc/hostname文件决定。

1. 打开/etc/hostname文件;

1
sudo  gedit /etc/hostname

2. 将/etc/hostname文件中的ubuntu改为你想取的机器名。这里我取"dubin-ubuntu"(重启系统后才会生效)。 不过你如果真的执行到了这一步,而且修改了机器名,那就一定要重启系统再进行下面的安装;否则会报错(新机器名无法识别)。 

五. 安装ssh服务

这里的ssh和三大框架:spring,struts,hibernate没有什么关系,ssh可以实现远程登录和管理,具体可以参考其他相关资料。

安装openssh-server;

1
sudo  apt-get install  ssh  openssh-server

这时假设您已经安装好了ssh,您就可以进行第六步了哦~

六、 建立ssh无密码登录本机

首先要转换成hadoop用户,执行以下命令

1
su  - hadoop

如图:


ssh生成密钥有RSA和DSA两种生成方式(两种密钥生成方式,具体可见百科),默认情况下采用RSA方式。

1. 创建ssh-key,,这里我们采用rsa方式;

1
ssh -keygen -t rsa -P ""

-t表示密钥的生成方式,具体可用man查询

如图:


(注:回车后会在~/.ssh/下生成两个文件:id_rsa和id_rsa.pub这两个文件是成对出现的)

2. 进入~/.ssh/目录下,将id_rsa.pub追加到authorized_keys授权文件中,开始是没有authorized_keys文件的;

1
2
cd  ~/. ssh
cat  id_rsa.pub >> authorized_keys

如图:


(完成后就可以无密码登录本机了。)

3. 登录localhost;

1
ssh  localhost

如图:

( 注:当ssh远程登录到其它机器后,现在你控制的是远程的机器,需要执行退出命令才能重新控制本地主机。)

4. 执行退出命令;

1
exit

 

七. 安装hadoop

我们采用的hadoop版本是:hadoop-0-。20.203.0(http://www.apache.org/dyn/closer.cgi/hadoop/common/)(我这里选择的是hadoop1-1-2),你可以选择一个版本下载

1. 假设hadoop-0.20.203.tar.gz在桌面,将它复制到安装目录 /usr/local/下;

1
sudo  cp  hadoop-0.20.203.0rc1. tar .gz /usr/local/

2. 解压hadoop-0.20.203.tar.gz;

1
2
cd  /usr/local
sudo  tar  -zxf hadoop-0.20.203.0rc1. tar .gz

3. 将解压出的文件夹改名为hadoop;

1
sudo  mv  hadoop-0.20.203.0 hadoop

4. 将该hadoop文件夹的属主用户设为hadoop,

1
sudo  chown  -R hadoop:hadoop hadoop
-R表示对hadoop文件下的所有文件都执行“改属主”操作,这个命令中 hadoop:hadoop表示hadoop组中的hadoop用户,后一个hadoop表示要修改属主的文件夹

5. 打开hadoop/conf/hadoop-env.sh文件;

1
sudo  gedit hadoop /conf/hadoop-env .sh

6配置conf/hadoop-env.sh(找到#export JAVA_HOME=...,去掉#,然后加上本机jdk的路径);

1
export JAVA_HOME=/usr/lib/jvm/java-6-openjdk

7. 打开conf/core-site.xml文件;

1
sudo  gedit hadoop /conf/core-site .xml

编辑如下:property后面需要手工敲(也可以直接复制粘贴)

1
2
3
4
5
6
7
8
9
10
11
<? xml  version = "1.0" ?>
<? xml-stylesheet  type = "text/xsl"  href = "configuration.xsl" ?>
                                                                                                               
<!-- Put site-specific property overrides in this file. -->
                                                                                                               
< configuration >
< property >  
   < name >fs.default.name</ name >  
   < value >hdfs://localhost:9000</ value >   
  </ property >  
</ configuration >

8. 打开conf/mapred-site.xml文件;

1
sudo  gedit hadoop /conf/mapred-site .xml

编辑如下property后面需要手工敲:

1
2
3
4
5
6
7
8
9
10
11
<? xml  version = "1.0" ?>
<? xml-stylesheet  type = "text/xsl"  href = "configuration.xsl" ?>
                                                                                                            
<!-- Put site-specific property overrides in this file. -->
                                                                                                            
     < configuration >  
      < property >   
       < name >mapred.job.tracker</ name >  
       < value >localhost:9001</ value >   
      </ property >  
     </ configuration >

9. 打开conf/hdfs-site.xml文件;

1
sudo  gedit hadoop /conf/hdfs-site .xml

编辑如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
< configuration >
< property >
< name >dfs.name.dir</ name >
< value >/usr/local/hadoop/datalog1,/usr/local/hadoop/datalog2</ value >
</ property >
< property >
< name >dfs.data.dir</ name >
< value >/usr/local/hadoop/data1,/usr/local/hadoop/data2</ value >
</ property >
< property >
< name >dfs.replication</ name >
< value >2</ value >
</ property >
</ configuration >

10. 打开conf/masters文件,添加作为secondarynamenode的主机名,作为单机版环境,这里只需填写 localhost 就Ok了。

1
sudo  gedit hadoop /conf/masters

11. 打开conf/slaves文件,添加作为slave的主机名,一行一个。作为单机版,这里也只需填写 localhost就Ok了。

1
sudo  gedit hadoop /conf/slaves
  10.11我自己没敲,默认就是localhost,千万别修改为127.0.0.1 localhost虽然正式的多台机器是这样的写法,但是单台机器不需要前面的ip地址,否则会报错

八. 在单机上运行hadoop

1进入hadoop目录下,格式化hdfs文件系统,初次运行hadoop时一定要有该操作,

1
2
cd  /usr/local/hadoop/
bin /hadoop  namenode - format

2. 当你看到下图时,就说明你的hdfs文件系统格式化成功了。


3. 启动bin/start-all.sh

1
bin /start-all .sh

4. 检测hadoop是否启动成功

1
jps
千万要注意这里,我使用这个命令只能看到jps自己的进程,纠结了很长时间,忽然发现得用 sudo jps果然能出现6个进程,坑爹啊,大家千万要注意。

如果有Namenode,SecondaryNameNode,TaskTracker,DataNode,JobTracker五个进程,就说明你的hadoop单机版环境配置好了!

如下图:

然后可以通过firefox浏览器查看,使用http://localhost:50030/

对,你没有看错不是我们配置的core-site的9000的端口,也不是9001的端口,是50030,我也不知道为什么,有谁知道一下。如果看到下面激动人心的画面,就说明你成功了。

这个问题的解答:

localhost:9000是你的namenode的地址,比如本机下访问HDFS中的文件可以用 hdfs://localhost:9000/your_path 这种格式。namenode并不负责文件的具体存储,但是它存储文件的权限,日期等属性信息和属于哪些block以及这些block对应的DataNode等信息。也就是说localhost:9000指定的是namenode服务器的地址,你访问hdfs的文件,必须告诉namenode服务器,然后由它给你处理返回文件,具体的细节是透明的。而  http://localhost:50030只是一个jobtracker的web访问接口,为的是方便用户查看相关信息。类似的还有:
http://localhost:50070/ – web UI of the NameNode daemon
http://localhost:50030/ – web UI of the JobTracker daemon
http://localhost:50060/ – web UI of the TaskTracker daemon

 

九 一些问题

1 运行到这里应该说hadoop就安装成功了,但或许会出现些问题(我就出现了):

Bad connection to FS. command aborted. exception: Call to localhost/127.0.0.1:8020 failed on connection exception: java.net.ConnectException: Connection refused
问题出在namenode没有启动,初步解决办法:
# jps                   //发现namenode没有启动
# stop-all.sh       
# hadoop namenode -format
# start-all.sh 

这个网站总结了一些常见的错误可见http://shikuan.diandian.com/post/2012-03-16/15218766

2 到这里如果hadoop本身真的是没有问题,但是还是需要一些附加知识

启动与关闭启动HADOOP

1.         进入HADOOP_HOME目录。

2.         执行sh bin/start-all.sh

关闭HADOOP

1.         进入HADOOP_HOME目录。

2.         执行sh bin/stop-all.sh

文件操作

Hadoop使用的是HDFS,能够实现的功能和我们使用的磁盘系统类似。并且支持通配符,如*。

查看文件列表

查看hdfs中目录下的文件。

1.         进入HADOOP_HOME目录。

2.         执行sh bin/hadoop fs -ls /

至此就可以看到hdfs的目录文件了

创建文件目录

1.         进入HADOOP_HOME目录。

2.         执行sh bin/hadoop fs -mkdir (后面加上创建的文件路径)

删除文件

1.         进入HADOOP_HOME目录。

2.         执行sh bin/hadoop fs -rm 

删除hdfs中/user/admin/aaron目录以及该目录下的所有文件

1.         进入HADOOP_HOME目录。

2.         执行sh bin/hadoop fs -rmr 

上传文件

上传一个本机的文件到hdfs的目录下

1.         进入HADOOP_HOME目录。

2.         执行sh bin/hadoop fs –put (后面省略)

下载文件

下载hdfs中目录下的newFile文件到本机中

1.         进入HADOOP_HOME目录。

2.         执行sh bin/hadoop fs –get 

查看文件

我们可以直接在hdfs中直接查看文件,功能与类是cat类似

1.         进入HADOOP_HOME目录。

2.         执行sh bin/hadoop fs –cat

MAPREDUCE JOB操作

提交MAPREDUCE JOB

原则上说,Hadoop所有的MapReduce Job都是一个jar包。

运行一个/home/admin/hadoop/job.jar的MapReduce Job

1.         进入HADOOP_HOME目录。

2.         执行sh bin/hadoop jar /home/admin/hadoop/job.jar [jobMainClass] [jobArgs](分别是输入输出文件夹)

杀死某个正在运行的JOB

假设Job_Id为:job_201005310937_0053

1.         进入HADOOP_HOME目录。

2.         执行sh bin/hadoop job -kill job_201005310937_0053

更多HADOOP的命令

上面介绍的这些Hadoop的操作命令是我们最常用的。如果你希望了解更多,可以按照如下的方式获取命令的说明信息。

1.         进入HADOOP_HOME目录。

2.         执行sh bin/hadoop

 练习

到这里就可以进行练习了,具体可参见http://blog.csdn.net/sgs1018/article/details/9304113 (三)hadoop运行。










评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值