首先要说明的是,之前我在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
|
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
>
</
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
|
八. 在单机上运行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
|
如果有Namenode,SecondaryNameNode,TaskTracker,DataNode,JobTracker五个进程,就说明你的hadoop单机版环境配置好了!
如下图:
然后可以通过firefox浏览器查看,使用http://localhost:50030/
对,你没有看错不是我们配置的core-site的9000的端口,也不是9001的端口,是50030,我也不知道为什么,有谁知道一下。如果看到下面激动人心的画面,就说明你成功了。
这个问题的解答:
九 一些问题
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运行。
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