快放假了,走之前想了解一下Hadoop的基础。首先呢,就得了解一下Hadoop的环境怎么搭建。网上一搜教程一大堆,新的,旧的,简直看的人毫无头绪。相信不少新人,肯定也是在搭建环境时一头雾水。正好自己也借着这次搭建Hadoop的机会,好好整理一下,也让学习Hadoop的新人少走一些弯路。
本教程主要参考教程1(http://www.w2(此处不输入)bc.com/Article/19645)和教程2(http://m.blog.csdn.net/blog/index?username=tangxinyu318),感谢原作者的付出,这两篇文章基本解决了我很多的困惑,如果本文描述不清,欢迎大家阅读原文。
学习Hadoop,首先要了解一下Hadoop的三种运行模式:
1、单机模式(standalone Mode)
单机模式是Hadoop的默认模式。当首次解压Hadoop的源码包时,Hadoop无法了解硬件安装环境,便保守地选择了最小配置。在这种默认模式下所有3个XML文件均为空。当配置文件为空时,Hadoop会完全运行在本地。因为不需要与其它节点交互,单机模式就不使用HDFS,也不加载任何Hadoop地守护进程。该模式主要用于开发调试MapReduce程序地应用逻辑。
2、伪分布模式(Pseudo-Distributed Mode)
伪分布模式在“单节点集群”上运行Hadoop,其中所有地守护进程都运行在同一台机器上。该模式在单机模式之上增加了代码调试功能,允许你检查内存使用情况,HDFS输入输出,以及其他的守护进程交互。
3、全分布模式(Fully Distributed Mode)
Hadoop守护进程运行在一个集群上。
总结看过的所有教程,基本上都是在windows环境下使用VMvare虚拟机安装ubuntu或者Centos系统搭建Hadoop环境。
本教程是在Win10下使用Vmvare虚拟机装载ubuntu14.04稳定版搭建Hadoop的环境。
一、准备工作
1、安装虚拟机环境
Vmware,收费产品,占内存较大。
或
Oracle的VirtualBox,开源产品,占内存较小,但安装ubuntu过程中,重启会出错。
我选Vmware。
2、安装操作系统
Centos,红帽开源版,接近于生产环境。
Ubuntu,操作简单,方便,界面友好。
我选Ubuntu14.04稳定版. 64位
3、安装一些常用的软件
在每台linux虚拟机上,安装:vim,ssh
sudo apt-get install vim (注:一定要重新安装vim,Linux自带的是vi,vim是vi的升级增强版)
sudo apt-get install ssh
在客户端,也就是win7上,安装SecureCRT,Winscp或putty,这几个程序,都是依靠ssh服务来操作的,所以前提必须安装ssh服务。
service ssh status 查看ssh状态。如果关闭使用service ssh start开启服务。
SecureCRT,可以通过ssh远程访问linux虚拟机。
winSCP或putty,可以从win7向linux上传文件。
三、全分布模式下hadoop的安装
(1)修改三台虚拟机的机器名
分别修改三台主机名为:master、slave1、slave2
sudo vi /etc/hostname |
(2)设置IP地址
大家会发现好多教程都说要设置静态IP,设置的方式教程也有。在这我遇到的疑惑是按照教程的设置方法后,除了ping不同(虽然在同一网段),而且虚拟机无法上网。这在更新ubuntu系统软件的时候非常不方便。
最后我的处理方法是按照教程http://blog.csdn.net/u010666884/article/details/51832371,设置VMnet8,选择NAT设置,设置网段在192.168.1.0~255,还是支持本地DHCP分配IP地址。这样三个IP地址就在同一网段了,且查询IP地址,虚拟机每次重启后IP地址也没变化。所以我直接用系统分配的IP地址去配置hosts文件。
(3)修改/etc/hosts文件
hosts文件和windows上的功能是一样的。存储主机名和ip地址的映射。在三台机器的/etc/hosts的内容中添加如下内容:
192.168.1.108 master
192.168.1.129 slave1
192.168.1.128 slave2
(4)设置ssh免密输入
1)产生密钥
ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa |
会产生一对,其中id_rsa是私钥,id_rsa.pub是公钥。
2)导入authorized_keys
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys |
3)试验看是否安装成功
#查看是否有sshd进程 ps -e | grep ssh 尝试登录本地 ssh localhost |
4)远程无密码登录
#进入master的.ssh目录 scp authorized_keys hadoop@slave1:~/.ssh/authorized_keys_master #hadoop是用户名 #进入slave1、slave2的.ssh目录 cat authorized_keys_master >> authorized_keys |
注意:第四步要在slave上重复,要使三者都能够无密码相互登录,重复完后可以利用如下命令试验,第一次需要输入密码绑定
注意:我的主机是连接的路由无线网络,我遇到了一个问题,就是在虚拟机网络重连后master可以登录slave2,但是过一会后就发现老是connection refused,就因为这个问题我还重新安装了几次,网络上的方法都试了也不管用,后来发现,原来是我的虚拟机ip与路由局域网中的其他机器Ip冲突,千万要保证局域网内的Ip不要和虚拟机的ip冲突
(5)安装jdk
首先进入到jdk tar.gz所在的文件目录,我的是在Downloads目录下,所以命令是
cd ~/Downloads
然后将tar.gz文件解压到安装目录,我的jdk压缩包名是jdk-7u67-linux-x64.tar.gz,而且我希望它安装在/usr/local目录下,所以命令是
sudo tar zxvf jdk-7u67-linux-x64.tar.gz -C /usr/local
然后进入到/usr/local目录下
cd /usr/local
再输入
ls
即可看到里面包含一个叫jdk1.7.0_67类似的文件(文件名与所安装的JDK版本有关)
解压完毕后,就是配置环境变量了。关于环境变量的配置多种方法,我采用的是在/.bashrc文件中配置。
利用命令:
sudo gedit ~/.bashrc
在打开的文件的末尾添加以下信息:
export JAVA_HOME=/usr/local/jdk1.7.0_67 #这里添加的是jdk所在的安装目录
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:JAVAHOME/lib:JAVAHOME/lib:{JRE_HOME}/lib
export PATH=JAVAHOME/bin:JAVAHOME/bin:PATH
我的添加如下:
保存后关闭,进入终端,source一下。
source ~/.bashrc
接下来设置默认的JDK
sudo update-alternatives --install /usr/bin/java java /usr/local/jdk1.7.0_67/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/local/jdk1.7.0_67/bin/javac 300
设置完成后,输入java -version查看jdk信息。
查看到如上信息,说明jdk安装成功。
(6)hadoop配置
Master配置hadoop,并将hadoop文件传输到slave节点。
1)解包移动
#解压hadoop包 tar -zxvf hadoop... #将安装包移到/usr目录下 mv hadoop... /usr/hadoop |
2)新建文件夹
#在/usr/hadoop目录下新建如下目录(root) mkdir /dfs mkdir /dfs/name mkdir /dfs/data mkdir /tmp |
3)配置文件:hadoop-env.sh(文件都在/usr/hadoop/etc/hadoop中)
修改JAVA_HOME值(export JAVA_HOME=/usr/java)
4)配置文件:yarn-env.sh
修改JAVA_HOME值(export JAVA_HOME=/usr/java)
5)配置文件:slaves
将内容修改为:
slave1 slave2 |
6)配置文件:core-site.xml
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:8020</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/usr/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>hadoop.proxyuser.u0.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.u0.groups</name> <value>*</value> </property> </configuration> |
7)配置文件:hdfs-site.xml
<configuration> <property> <name>dfs.namenode.secondary.http-address</name> <value>master:9001</value> </property> <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>3</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration> |
8)配置文件:mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> </configuration> |
9)配置文件: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>master:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>master:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>master:8088</value> </property> </configuration> |
10)将hadoop传输到slave1和slave2根目录
scp -r /usr/hadoop u0@slave1:~/ |
(7)配置环境变量,并启动hadoop,检查是否安装成功
1)配置环境变量
#root模式编辑/etc/profile vim /etc/profile |
#以上已经添加过java的环境变量,在后边添加就可以
export PATH=$PATH:/usr/java/bin:/usr/java/jre/bin:/usr/hadoop/bin:/usr/hadoop/sbin |
2)启动hadoop(要在hadoop用户下启动)
#注意最后单词带‘-’ hadoop namenode -format start-all.sh |
3)查看启动进程