前言:

  本文章是转载的,自己又加上了一些自己的笔记整理的

  详细地址请查看Ubuntu 12.04搭建hadoop单机版环境

Hadoop的三种运行模式

独立模式:无需任何守护进程,所有程序都在单个JVM上执行。

伪分布模式:Hadoop守护进程运行在本地机器上,模拟一个小规模的集群。

全分布模式:Hadoop守护进程运行在一个集群中。

一. 安装Ubuntu;

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

1. 创建hadoop用户组:

sudo groupadd hadoop

如图:

2. 创建hadoop用户:

sudo useradd -ms /bin/bash -g hadoop hadoop

如图:

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

sudo gedit /etc/sudoers

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

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

hadoop  ALL=(ALL:ALL) ALL

如图:

三. 在Ubuntu下安装JDK

使用如下命令执行即可:

sudo apt-get install openjdk-6-jre

(这里我自己下载的jdk,具体的安装方法见我的另一篇Linux下安装JDK和Eclipse)

如图:

四. 修改机器名

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

1. 打开/etc/hostname文件:

sudo gedit /etc/hostname

2. 将/etc/hostname文件中的ubuntu改为你想取的机器名。这里我取"dubin-ubuntu"。 重启系统后才会生效。

3. 为了彻底的改变你的主机名,还需要更改vim /etc/hosts,将其中的

127.0.1.1改成和你hostname中一样的名字

五. 安装ssh服务

这里ssh可以实现远程登录和管理,具体可以参考其他相关资料。安装ssh的目的就是为了启动守护进行,且必须是无密码登陆的。

安装openssh-server,

sudo apt-get install ssh openssh-server

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

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

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

su - hadoop

如图:

ssh生成密钥有rsa和dsa两种生成方式,默认情况下采用rsa方式。

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

ssh-keygen -t rsa -P ""

如图:

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

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

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

如图:

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

3. 登录localhost:

ssh localhost

如图:

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

4. 执行退出命令:

exit

七. 安装hadoop

这里我的安装版本为:hadoop-1.1.2(http://www.apache.org/dyn/closer.cgi/hadoop/common/  )

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

sudo cp hadoop-1.1.2.tar.gz /usr/local/

2. 解压hadoop-1.1.2.tar.gz:

cd /usr/local
sudo tar -zxf hadoop-1.1.2.tar.gz

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

sudo mv hadoop-1.1.2 hadoop1.1.2

4. 将该hadoop1.1.2文件夹的属主用户设为hadoop:

sudo chown -R hadoop:hadoop hadoop1.1.2

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

vim hadoop1.1.2/conf/hadoop-env.sh

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

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

这个主要就是为了配置hadoop运行环境的jdk路径

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

sudo gedit hadoop/conf/core-site.xml

编辑如下:

  1. <?xmlversion="1.0"?>

  2. <?xml-stylesheettype="text/xsl"href="configuration.xsl"?>

  3. <!-- Put site-specific property overrides in this file. -->

  4. <configuration>

  5. <property>

  6. <name>fs.default.name</name>

  7. <value>hdfs://localhost:9000</value>

  8. </property>

  9. </configuration>

该文件主要是 fs.default.name,是一个描述集群中NameNode结点的URI(包括协议、主机名称、端口号)。该配置文件主要用于设置Hadoop的默认文件系统,而文件系统由URI指定,这里我们设置的是hdfs文件系统。这里的这种配置方式是属于伪分布式模式,当配置为全分布式模式的时候,需要改为hdfs://namenod/。集群里面的每一台机器都需要知道NameNode的地址。DataNode结点会先在NameNode上注册,这样它们的数据才可以被使用。独立的客户端程序通过这个URI跟DataNode交互,以取得文件的块列表。

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

vim hadoop1.1.2/conf/mapred-site.xml

编辑如下:

  1. <?xmlversion="1.0"?>

  2. <?xml-stylesheettype="text/xsl"href="configuration.xsl"?>

  3. <!-- Put site-specific property overrides in this file. -->

  4. <configuration>

  5. <property>

  6. <name>mapred.job.tracker</name>

  7. <value>localhost:9001</value>

  8. </property>

  9. </configuration>

该配置文件主要用于配置JobTracker的主机(或者IP)和端口,同样这是伪分布模式,当在全分布式模式中value的值为jobtracker:8021

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

vim hadoop/conf/hdfs-site.xml

编辑如下:

  1. <configuration>

  2. <property>

  3. <name>dfs.name.dir</name>

  4. <value>/usr/local/hadoop/datalog1,/usr/local/hadoop/datalog2</value>

  5. </property>

  6. <property>

  7. <name>dfs.data.dir</name>

  8. <value>/usr/local/hadoop/data1,/usr/local/hadoop/data2</value>

  9. </property>

  10. <property>

  11. <name>dfs.replication</name>

  12. <value>2</value>

  13. </property>

  14. </configuration>

dfs.replication -它决定着系统里面的文件块的数据备份个数。对于一个实际的应用,它 应该被设为3(这个  数字并没有上限,但更多的备份可能并没有作用,而且会占用更多的空间)。少于三个的备份,可能会影响到数据可靠性(系统故障时,也许会造成数据丢失)

dfs.data.dir - 这是DataNode结点被指定要存储数据的本地文件系统路径。DataNode结点上的这个路径没有必要完全相同,因为每台机器的环境很可能是不一样的。但如果每台机器上的这个路径都是统一配置的话,会使工作变得简单一些。默认的情况下,它的值hadoop.tmp.dir, 这个路径只能用于测试的目的,因为,它很可能会丢失掉一些数据。所以,这个值最好还是被覆盖。

dfs.name.dir - 这是NameNode结点存储hadoop文件系统信息的本地系统路径。这个值只对NameNode有效,DataNode并不需要使用到它。

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

vim hadoop/conf/masters

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

vim hadoop/conf/slaves

八. 在单机上运行hadoop

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

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

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

3. 启动bin/start-all.sh:

bin/start-all.sh

4. 检测hadoop是否启动成功:

jps

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

如下图:

后记:

1 该部署安装环境如下:

VirtualBox-4.2.16-86992-Win

ubuntu12.04

jdk-6u33-linux-i586.bin

hadoop-1.1.2.tar.gz

经过测试完全可以正常运行

2 在执行hadoop命令的时候,都是调用hadoop/bin中的命令,可以将hadoop安装路径设置到path中,这样每次执行hadoop就不用加上绝对路径了。具体的做法如下:

sudo vim /etc/profile添加两句

export HADOOP_INSTALL=/usr/local/hadoop1.1.2

PATH=$HADOOP_INSTALL/bin:$PATH  然后注销后输入hadoop version即可

3 由于在复制hadoop的时候已经创建了专门的用户与用户组来操作hadoop,一定要为该hadoop安装ssh无密码登陆,在安装hadoop的时候,记得也要全称用刚创建的用户来安装,且一定要使用

chown -R hadoop:hadoop hadoop1.1.2来将所有的文件权限改为hadoop用户。在安装后,如果使用jps只是显示几个进程,可以切换到root中,再次执行该命令chown -R hadoop:hadoop hadoop1.1.2

当安装后,如果jps显示的进程不到5个,则可以将hadoop安装目录下生成data1和data2或者datalog1和datalog2删除了,再重新利用bin/hadoop namenode -format

4 分布式存储的角度来说,集群中的结点由一个NameNode和若干个DataNode组成,另有一个SecondaryNameNode作为NameNode的备份。从分布式应用的角度来说,集群中的结点由一个JobTracker和若干个TaskTracker组成,JobTracker负责任务的调度,TaskTracker负责并行执行任务TaskTracker必须运行在DataNode上,这样便于数据的本地计算。JobTracker和NameNode则无须在同一台机器上。