Hadoop集群搭建
在搭建Hadoop的步骤主要分一下几点:
第一:安装虚拟机( 操作系统使用的是Ubuntu14.04)
第二:找几个闲置的IP地址
第三:安装ssh(主要用于无秘钥登录)
第四:安装Java环境和Scala(Scala主要是为后边搭建spark集群用的)
第五:安装Hadoop(本实验使用的是Hadoop-2.7.1)
下面为大家介绍搭建Hadoop集群的详细步骤:
安装虚拟机:我是通过在自己电脑的虚拟机(VMwarevSphere)远程访问服务器,在服务器上搭建的Hadoop集群。(其实也可以在自己电脑上通过VMware在自己电脑上搭建。或者不用虚拟机用真实的电脑也行)
一、在安装虚拟机的时候要注意几点:
虚拟的空间不能太小、特别是虚拟的内存要大一点在10G左右,然后就是虚拟磁盘在30G以上。要不然到后边跑数据的时候内存和虚拟磁盘的容量不够用。

在这里就不演示怎么创建虚拟机了。以下就是我创建好的虚拟机,一个Master和三个Slave。原来创建了8个Slave,但是因为内存不够,跑数据跑不起来,就删了又重新创建 了,这次搭建Hadoop可费了好大力气,之前搭建的一次已经好早了没有做笔记,这次专门记下详细的笔记。以供大家参考和自己以后再次用到。
二、给每一台虚拟机都配置IP地址
在Master上配置IP地址:
用Ctrl+Alt+T打开终端窗口,输入如下命令:
$ sudo gedit /etc/network/interface
配置完IP地址要修改主机名,在终端输入
$ sudo gedit /etc/hostname
然后把主机名修改成Master。然后再配置hosts文件。在终端输入
$ sudo gedit /etc/hosts
接下来:如果你安装Ubuntu的时候使用的不是Hadoop用户,那么就需要创建一个Hadoop用户。
同样是在终端输入 :
$ sudo useradd -m hadoop -s /bin/bash
这条命令可以创建一个Hadoop用户。另外要给Hadoop用户设置密码,在终端输入
$ sudo passwd hadoop
,系统提示请输入密码,然后输入两次以后就行了,最后就是把Hadoop用户添加进去,再输入
$ sudo adduser hadoop sudo
。最后关机重启,刚才创建的用户和网络配置还有hosts、主机名都会生效。(记得一定要重启,要不然不会生效的哦
)
接下来就等着上网测试吧。(注意:同样创建的其他Slave也要更改。)
三、刚刚创建的Hadoop用户可以上网了
那么接下来要把系统的一些软件更新一下,要不然后边安装其他软件会提示安装不上去。所以赶紧的先更新再忙其他的。在终端输入
$ sudo apt-get update
如果上面提示:W:无法下载之类的,那就打开左边的设置(就是小齿轮)→软件和更新
→点击下载自的向下的小三角
→在列表中选择mirrors.163.com 或则mirrors.aliyun.com
→选择服务器
→关闭
→重新载入。(完成以后再更新一下)
$ sudo apt-get update
就正常了。
有的实验教程上还用到了vim编辑器。我很少用,个人感觉不太习惯,就用了的gedit编辑了。如果喜欢vim那就在终端输入
$ sudo apt-get install vim
然后点击Y就可以在命令行安装了。
四、集群搭建Hadoop需要配置SSH无秘钥登录
(首先咱们先说说为什么要安装SSH并且配置“
她 ”。Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到 NameNode。
)安装SSH需要在终端输入
$ sudo apt-get install openssh-server
同样此时应该也在Slave们上也安装SSH;
$ sudo apt-get install openssh-server
安装以后可以用下面的命令登录主机:
$ ssh localhost
然后首次登录SSH会有登录提示,在这输入yes即可。在然后输入Hadoop的密码就OK了。 但是这样每次都要输入密码,太麻烦了是吧。所以我们就要充分利用SSH的特点让她生成一个公钥然后传递给各个子节点(Slave)。

在终端输入如下命令:
$ exit #退出刚才登陆的ssh localhost
$ cd ~/.ssh/ #如果没有该目录,就先执行ssh localhost
$ rm ./id_rsa* #删除之前生成的公钥
$ ssh-keygen -t rsa #这个主要是生成公钥,之后一路回车就行了
$ cat ./id_rsa.pub >> ./authorized_keys #让生成的公钥加入授权,然后Master就可以无秘钥登陆了
$ scp ~/.ssh/id_rsa.pub hadoop@Slave1:/home/hadoop #这样就可以把刚才生成的公钥传递给所有的Slave了
SCP是secure copy 的简写,用于在Linux下进行远程拷贝文件,类似于cp命令,不过CP只能在本机中拷贝,执行scp需要输入Hadoop的登陆密码。

接下来需要登陆Slave节点,将SSH公钥加入授权
$ mkdir ~/.ssh #如果不存在给文件夹需要先创建,如果已经存在则可以忽略
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$ rm ~/id_rsa.pub #用完就可以删除了
$ ssh Slave1 #试试能否在Master上登录Slave1
$ exit #退出
这样Master节点就可以登陆任意一台Slave了。哈哈哈哈哈
四、安装Java和Scala(Scala是因为后边要搭建spark,所以在这里就提前给安装上了)
1、安装Java(我安装的是Java-8-oracle)
输入以下命令:
$ sudo add-apt-repository ppa:webupd8team/java
$ sudo apt-get update #先更新一下,防止下一步安装Java时候装不上
$ sudo apt-get install Oracle-java8-Installer #安装Java8
配置环境变量:
$ sudo gedit /etc/profile
在文件的最下边添加一行环境变量如下:
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export JRE_HOME=/usr/lib/jvm/java-8-oracle
|
|
然后输入
$ source /etc/profile
此时Java就安装完毕了.(此时在Slave们上也要安装Java,或者直接从Master上给Slave们直接发送过去)
2、安装Scala
1、从网上直接下载Scala压缩包 http://downloads.typesafe.com/scala/(我下载的是Scala-2.10.5.tgz)
2、解压
$ sudo mkdir /usr/local/scala
$ sudo tar -zxf scala-2.10.5.tgz -C /usr/local/scala
(# -zxf 和-zxvf 都是解压)
3、配置环境变量
$ sudo gedit /etc/profile
在文本内输入:
export SCALA_HOME=/usr/local/scala/scala-2.10.5
|
然后关闭文本,在终端执行,
$ source /etc/profile
#就是让配置环境生效。
4、验证是否安装成功
在终端输入
$ scala -version
如果出来
Scala code runner version
2.10.5 -- Copyright 2002-2013, LAMP/EPFL
|
那么表示成功了。
五、在Master上安装Hadoop
1、先下载Hadoop。(我下载的是Hadoop-2.7.1的版本)
下载好的Hadoop-2.7.1.tar.gz 是在Hadoop用户下的/下载 目录里,但是我们最好把她放在home文件下。
2、解压hadoop文件
$ sudo tar -zxf hadoop-2.7.1.tar.gz -C /usr/local #解压到 /usr/local文件夹中
$ cd /usr/local #切换到 usr/local
$ sudo mv ./hadoop-2.7.1/ ./hadoop #更改文件夹的名称为hadoop
$ sudo chown -R hadoop:hadoop ./hadoop #给hadoop分配权限
3、创建一个名为tmp的文件夹:
$ mkdir /usr/local/hadoop/tmp #创建这个文件夹是为下边的hadoop一些文件配置用的临时文件夹
4、给hadoop配置环境变量
export HADOOP_HOME=/usr/local/hadoop
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
|
配置hadoop-env.sh:
$ sudo gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh
在文件的末尾加上Java的安装路径
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
5、配置hadoop集群环境,需要修改/usr/local/hadoop/etc/hadoop中的几个配置文件。
1、配置文件slaves,默认的slaves文件中只有一个localhost。所以要修改文件的配置,最好配成IP地址的形式,也就是每行一个IP地址。
输入
$ cd /usr/local/hadoop/etc/hadoop
$ sudo gedit slaves
在文本中配置如下
59.67.77.15 #Slave1
59.67.77.16 #Slave2
59.67.77.17 #Slave3
|
2、配置masters文件.同样是最好配置成IP地址的形式,只写一行master的IP地址就行
输入:
$ sudo gedit masters
在文本中输入如下配置:
59.67.77.12
|
3、配置hadoop的核心文件core-site.xml
$ sudo gedit core-site.xml
配置内容:
<configuration>
<property> <name>hadoop.tmp.dir</name> <value>/usr/local/hadoop/tmp</value> <description>A base for other temporary directories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://59.67.77.12:9000</value> </property> <property> <name>fs. default.name</name> <value>hdfs://59.67.77.12:9000</value> </property> <property> <name>hadoop.native.lib</name> <value> false</value> </property> <property> <name>hadoop.proxyuser.hadoop.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hadoop.groups</name> <value>*</value> </property>
</configuration>
|
4、配置hdfs-site.xml我这里配置的是三个slave节点,所以dfs.replication 的值几设为3。
$ sudo gedit hdfs-site.xml
<configuration>
<property> <name>dfs.replication</name> <value> 3</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>/usr/local/hadoop/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/usr/local/hadoop/dfs/data</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value> true</value> </property> <property> <name>dfs.permissions</name> <value> false</value> </property> </configuration> |
5、配置mapred-site.xml.template文件,(为了统一命名,我们需要把mapred-site.xml.template 文件修改为maprec-site.xml文件)
输入:
$ sudo mv ./mapred-site.xml.template/ ./mapred-site.xml #修改文件名
$ sudo gedit mapred-site.xml #打开文本开始编辑
然后编辑如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>Master:19888</value>
</property>
</configuration>
|
6、配置yarn-site.xml文件:
$ sudo gedit yarn-site.xml
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>Master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
|
配置好hadoop的文件以后需要将hadoop复制到各个slave们:(注意:这里重点说明一下,一定要先压缩打包再复制到各个slave们,最后在各个slave上解压。这样的好处就是防止直接传输过程中有的文件会丢失。一定一定一定要先压缩打包。)
$ cd /usr/local
$ sudo rm -r ./hadoop/tmp # 删除 Hadoop 临时文件
$ sudo rm -r ./hadoop/logs/* # 删除日志文件
$ tar -zcf ~/hadoop.master.tar.gz ./hadoop # 先压缩再复制
$ cd
$ scp ./hadoop.master.tar.gz Slave1:/home/hadoop #复制到slave们
同样复制到其他slave们。
然后再Slave1节点上执行:
$ sudo rm -r /usr/local/hadoop # 删掉旧的(如果存在)
$ sudo tar -zxf ~/hadoop.master.tar.gz -C /usr/local
$ sudo chown -R hadoop /usr/local/hadoop
同样在其他slave们节点上重复上面的操作
六、修改各个Slave们的环境变量
export JAVA_HOME=/usr/lib/jvm/java-8-oracle
export JRE_HOME=/usr/lib/jvm/java-8-oracle
export SCALA_HOME=/usr/scala/scala-2.10.5
export HADOOP_HOME=/usr/local/hadoop
export CLASSPATH=$CLASS_PATH::$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH
export PATH=
$JAVA_HOME:$HADOOP_HOME/bin:
$PATH
export PATH=$HADOOP_HOME/sbin:
$PATH
export PATH=
$SCALA_HOME/bin:$PATH
|
第一次启动hadoop需要在Master上格式化一下,
$ hdfs namenode -format
现再就可以启动hadoop了。
$ start-dfs.sh
$ start-yarn.sh
通过jps可以查看各个节点启动情况,正确的话会出现如下所示:
$ stop-yarn.sh
$ stop-dfs.sh
到这里hadoop的讲解就结束了,希望对读者有帮助
。