花费了三天多时间,用Hadoop搭起了一个三台机器的小集群,发现网上的一些资料有时也有一些纰漏,有些用的hadoop版本较老,而新版本的hadoop(我用的是2.5.1)的配置有细微差别。特此尽可能详尽的记录下全过程。
使用版本:hadoop2.5.1, java1.8.0_20.
一、先列参考文献
[1]http://www.cnblogs.com/lanxuezaipiao/p/3525554.html
[2]http://liubao0312.blog.51cto.com/2213529/1557657
二、安装与配置过程
[2]http://liubao0312.blog.51cto.com/2213529/1557657
二、安装与配置过程
总体来讲,整个过程分为4个部分:修改机器名及用户名,配置SSH无密码登陆,安装与配置java jdk,安装与配置hadoop。下面分别讲解。
1.修改机器名及用户名
修改机器名的目的是为了后续配置更方便,能更好的区分Master和Slaves,建议修改。这里我们的三台主机名分别为MasterHadoop, Slave1Hadoop, Slave2Hadoop。
修改用户名是必须的,三台机器必须用
相同
的用户名。这里我们的用户名为image。打开三台机器的控制台(ctrl + alt + T),会显示image@MasterHadoop, image@Slave1Hadoop, image@Slave2Hadoop。
请看下表,代表了三台机器的情况。
ifconfig
查看主机ip地址
系统 | 主机名 | 普通用户名 | IP地址 |
ubuntu14.04 | MasterHadoop | image | 10.0.0.108 |
ubuntu14.04 | Slave1Hadoop | image | 10.0.0.112 |
ubuntu14.04 | Slave2Hadoop | image | 10.0.0.102 |
1.1.第一个问题来了,假设装系统的时候用的是其它主机名,怎么办?简单,修改主机名。
sudo gedit /etc/hostname
在打开的hostname文件中,删掉本来的内容,
分别在三台机器上写入 MasterHadoop,Slave1Hadoop,Slave2Hadoop。
sudo gedit/etc/hosts
在打开的hosts文件中,本来有的内容不要动,添加后变成如下内容(三台机器
全部修改成这样):
127.0.0.1 localhost
10.0.0.100 MasterHadoop 添加的内容
10.0.0.112 Slave1Hadoop
10.0.0.102 Slave2Hadoop
#The following .....
完成。
注意: 不能像[1]中所说的那样加入
127.0.0.1 MasterHadoop(SlavaxHadoop),后面会导致连接不上,出现 http://blog.csdn.net/renfengjun/article/details/25320043 中所述的错误。
1.2.修改好了主机名,如何修改用户名?
新建用户image。
第1步到此结束。
2.配置SSH无密码登陆
就是让Master和Slaves能相互无密码登陆。
2.1.安装ssh
sudo apt-get install openssh-server
必须保证三台电脑全部都先装上,再进行后续步骤。
2.2.在Master上配置ssh
参考[1]中的步骤和图示,要非常注意切换文件路径与图示一致。
在root用户和普通用户下,都完整的做一遍!
2.3.
在Slave1Hadoop 和 Slave2Hadoop
上配置ssh
步骤与2.2一样,只是
ssh-copy-id
image@Slave
x
Hadoop
改为
ssh-copy-id
image@Master
Hadoop
注:如果在配置ssh的过程中遇到问题,建议参见[1]中的有关SSH的步骤及问题解决,很详细。
第2步到此结束。
3.安装与配置java jdk
以下操作在三台机器上都做一遍,所有机器的jdk版本必须相同,安装路径必须相同。
3.1.下载安装包
下载地址
http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html
Linux x64 | 153.42 MB | ![]() |
(我用的是64位linux,所以这里是x64)
3.2.
创建文件夹并解压
一种情况当然是在控制台root下mkdir等进行文件夹建立,文件移动等操作(我不太熟练...)。
二种情况,如果实在不想在控制台做这些事,可以将root用户建立的文件夹的所有者改成自己的用户名,然后像在windows下的操作那样进行文件操作:
sudo su #进入root
chown image /usr #这样就可以在usr文件夹下直接新建文件夹了
在 计算机/usr 下,右键,创建文件夹 java
sudo su #进入root
chown image /usr #这样就可以在usr文件夹下直接新建文件夹了
在 计算机/usr 下,右键,创建文件夹 java
将
jdk-8u20-linux-x64.tar.gz复制到java文件夹下,并解压。
结果得到 计算机/usr/java/jdk1.8.0_20
3.3.
配置java环境变量
sudo gedit /etc/profile
在打开的文件中的最后,加入如下内容
#jdk environment
export JAVA_HOME=/usr/java/jdk1.8.0_20
(注意:这要根据自己的路径和版本号来设定!)
export CLASSPATH=$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH:$HOME/bin
source /etc/profile
在image用户下执行一遍
sudo su
source /etc/profile 在root下再次执行一遍
测试: java -version
注意:三台机器都要装哦~
第3步到此结束。
4.安装与配置hadoop
4
.1.
下载并安装(三台机器都安装)
只下载 hadoop-2.5.1.tar.gz 就可以了
将安装包复制到 /usr 文件夹下,解压得到/usr/hadoop-2.5.1
重命名文件夹,得到 /usr/hadoop
chown image /usr/hadoop
在/usr/hadoop 下手动创建tmp文件夹,即/usr/hadoop/tmp
4.2.
配置环境变量(三台机器都配置)
sudo gedit /etc/profile
在打开的文件末尾添加
#set hadoop environment
export
HADOOP_HOME=
/usr/hadoop
(注意:这要根据自己的路径来设定!)
export
PATH
=$HADOOP_HOME
/bin
:$PATH
export
CLASSPATH=$HADOOP_HOME
/lib
:$CLASSPATH
source /etc/profile
在image用户下执行一遍
sudo su
source /etc/profile
在root下再次执行一遍
测试:hadoop version
4.3.
配置hadoop文件
需要配置的文件在 /usr/hadoop/etc/hadoop 文件夹下,共有6个文件需要配置,
分别为:slaves; hadoop-env.sh; yarn-env.sh;
core-site.xml;
hdfs-site.xml; mapred-site.xml.template; yarn-site.xml.
注意
:三台机器上对这些文件的配置是相同的,所以可以
先在一台机器上配置,然后拷贝覆盖
。
下面分别说明这7个文件的配置方法。
4.3.1.slaves
双击打开,里面内容清空,写入
Slave1Hadoop
Slave2Hadoop (这些是DataNode的主机名)
4.3.2.
hadoop-env.sh
双击打开,将 export JAVA_HOME=${JAVA_HOME}修改为
export JAVA_HOME=
/usr/java/jdk1.8.0_20
(注意:这要根据自己的路径和版本号来设定!)
4.3.3.
yarn-env.sh
在中间某一行找到 #some Java parameters
#export JAVA_HOME=。。。这一行本来是被注释掉的
改为:
将 #export JAVA_HOME =。。。前的注释符号#删掉
内容修改为
export JAVA_HOME=
/usr/java/jdk1.8.0_20
(注意:这要根据自己的路径和版本号来设定!)
4.3.4.
core-site.xml
右键,打开方式为gedit,配置为
<
configuration
>
<
property
>
<
name
>fs.default.name</
name
>
<
value
>hdfs://MasterHadoop:9000</
value
> 根据Master主机名来设定
</
property
>
<
property
>
<
name
>hadoop.tmp.dir</
name
>
<
value
>file:/usr/hadoop/tmp</
value
>
4.1中创建了tmp文件夹,根据路径设定
<
description
>Abase for other temporary directories.</
description
>
</
property
>
</
configuration
>
4.3.5.
hdfs-site.xml
<
configuration
>
<
property
>
<
name
>dfs.namenode.name.dir</
name
>
<
value
>file:
/usr/hadoop/dfs/name
</
value
>
</
property
>
<
property
>
<
name
>dfs.datanode.data.dir</
name
>
<
value
>file:
/usr/hadoop/dfs/data
</
value
>
</
property
>
<
property
>
<
name
>dfs.replication</
name
>
<
value
>1</
value
>
</
property
>
<
property
>
<
name
>dfs.webhdfs.enabled</
name
>
<
value
>true</
value
>
</
property
>
</
configuration
>
4.3.6.
mapred-site.xml.template
<property>
<name>mapred.job.tracker</name>
<value> MasterHadoop:9001</value>
</property>
</configuration>
4.3.7.
yarn-site.xml(
非必须
)
<
configuration
>
<
property
>
<
name
>yarn.nodemanager.aux-services</
name
>
<
value
>mapreduce_shuffle</
value
>
</
property
>
<
property
>
<
name
>yarn.nodemanager.aux-services.mapreduce.shuffle.class</
name
>
<
value
>org.apache.hadoop.mapred.ShuffleHandler</
value
>
</
property
>
<
property
>
<
name
>yarn.resourcemanager.address</
name
>
<
value
>
MasterHadoop
:8032</
value
>
</
property
>
<
property
>
<
name
>yarn.resourcemanager.scheduler.address</
name
>
<
value
>MasterHadoop:8030</
value
>
</
property
>
<
property
>
<
name
>yarn.resourcemanager.resource-tracker.address</
name
>
<
value
>MasterHadoop:8031</
value
>
</
property
>
<
property
>
<
name
>yarn.resourcemanager.admin.address</
name
>
<
value
>MasterHadoop:8033</
value
>
</
property
>
<
property
>
<
name
>yarn.resourcemanager.webapp.address</
name
>
<
value
>MasterHadoop:8088</
value
>
</
property
>
</
configuration
>
注
:这7个文件配置完毕后,拷贝到其它两台机器上,覆盖原文件。
4.4.开启Hadoop
关闭所有机器的防火墙
sudo ufw disable
在MasterHadoop下进行初始化
cd /usr/hadoop
bin/hadoop namenode -format
每次初始化都会对dfs进行操作,一般只要初始化一次就可以了,
因为如果dfs里面有数据的话会把它给弄丢的
开启Hadoop(MasterHadoop下执行)
sbin/start-all.sh
测试:浏览器中打开 http://10.0.0.108:8088 这是MasterSlave的ip
调试: 如果某个datanode未启动,可能是多方面的原因,这是需要查看错误信息。哪里查看呢?
比如Slave1Hadoop未正常工作,则在Slave1Hadoop机器上,路径 /usr/hadoop/logs 下
有。。。.log文件,
里面记录了错误信息,然后根据错误信息参照[1]或[2]中的方案,或直接百
度google之调试解决即可。
第4步到此结束。
http://10.0.0.108:8088/
http://10.0.0.108:50070/