搭建环境的时候参考了以下下文章:
Ubuntu14.04下安装Hadoop2.4.0 (单机模式)
Ubuntu14.04下安装Hadoop2.4.0 (伪分布模式)
由于在Hadoop2.4.0版本下对于mapred-site.xml和yarn-site.xml等配置有区别于之前的一些版本。
自己在搭建时遇到一些问题,所以现在结合已有的文章和自己搭建的过程总结一下。
一、 安装Ubuntu建立用户名及其设备名
二、配置hosts文件
三、配置ssh免密码连入
四、安装Java环境
五、下载并解压hadoop安装包
六、 配置/hadoop/etc/hadoop/文件
七、 配置hadoop-env.sh文件
八、配置slaves文件
九、 向各节点复制hadoop
十、格式化namenode
十一、启动hadoop
十二、用jps检验各后台进程是否成功启动
十三、通过网站查看集群情况
十四、运行自带的wordcount程序
一、安装Ubuntu建立用户名及其设备名
在安装Ubuntu时将4台PC用户名都设置为hadoop,设备名分别是master、slave1、slave2、slave3
二、配置hosts文件
配置hosts文件的作用,它主要用于确定每个结点的IP地址,方便后续
master结点能快速查到并访问各个结点。通过ifconfig命令进行查看本机IP地址。
修改每台机器的/etc/hosts 修改为如下:
127.0.0.1 localhost
192.168.1.101 master
192.168.1.102 slave1
192.168.1.103 slave2
192.168.1.104 slave3
三、配置ssh免密码连入
SSH是什么?Secure Shell Protocol 安全外壳协议(SSH)
这里我们需要使用SSH的基于密匙的安全验证
需要依靠密匙,也就是你必须为自己创建一对密匙,并把公用密匙放在需要访问的服务器上。如果你要连接到SSH服务器上,客户端软件就会向服务器发出请求,请求用你的密匙进行安全验证。服务器收到请求之后,先在该服务器上你的主目录下寻找你的公用密匙,然后把它和你发送过来的公用密匙进行比较。如果两个密匙一致,服务器就用公用密匙加密“质询”(challenge)并把它发送给客户端软件。客户端软件收到“质询”之后就可以用你的私人密匙解密再把它发送给服务器。
安装
sudo apt-get install openssh-server
安装完成后,启动服务
sudo /etc/init.d/ssh start
查看服务是否正确启动:ps -e | grep ssh
设置免密码登录,生成私钥和公钥
ssh-keygen -t rsa -P ""
此时会在/home/hadoop/.ssh下生成两个文件:id_rsa和id_rsa.pub,前者为私钥,后者为公钥。
下面我们将公钥追加到authorized_keys中,它用户保存所有允许以当前用户身份登录到ssh客户端用户的公钥内容。
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
登录ssh
ssh localhost
退出
exit
让主结点(master)能通过SSH免密码登录三个子结点(slave)
为了实现这个功能,三个slave结点的公钥文件中必须要包含主结点的公钥信息,这样
当master就可以顺利安全地访问这两个slave结点了。操作过程如下:
如上过程显示了slave1结点通过scp命令远程登录master结点,并复制master的公钥文件到当前的目录下,这一过程需要密码验证。接着,将master结点的公钥文件追加至authorized_keys文件中,通过这步操作,如果不出问题,master结点就可以通过ssh远程免密码连接slave1结点了。在master结点中操作如下:
由上图可以看出,slave1结点首次连接时需要,“YES”确认连接,这意味着master结点连接slave1结点时需要人工询问,无法自动连接,输入yes后成功接入,紧接着注销退出至master结点。要实现ssh免密码连接至其它结点,还差一步,只需要再执行一遍ssh slave1,如果没有要求你输入”yes”,就算成功了,过程如下:
如上图所示,master已经可以通过ssh免密码登录至slave1结点了。
对slave1结点也可以用同样的方法进行,如下图:
slave1结点复制master结点中的公钥文件
Master通过ssh免密码登录至slave1结点测试:
第一次登录时:
第二次登录时:
表面上看,这两个结点的ssh免密码登录已经配置成功,但是我们还需要对主结点master也要进行上面的同样工作,这一步有点让人困惑,但是这是有原因的,具体原因现在也说不太好,据说是真实物理结点时需要做这项工作,因为jobtracker有可能会分布在其它结点上,jobtracker有不存在master结点上的可能性。
对master自身进行ssh免密码登录测试工作:
至此,SSH免密码登录已经配置成功。
四、 安装Java环境
sudo apt-get install openjdk-7-jdk
查看安装结果,输入命令:java -version,结果如下表示安装成功。
五、下载并解压hadoop安装包
官网下载http://mirror.bit.edu.cn/apache/hadoop/common/
安装
在所有机器上安装配置Hadoop
首先在namenode上配置,配置后在分发到datanode上
解压
sudo tar xzf hadoop-2.4.0.tar.gz
假如我们要把hadoop安装到/usr/local下
拷贝到/usr/local/下,文件夹为hadoop
sudo mv hadoop-2.4.0 /usr/local/hadoop
赋予用户对该文件夹的读写权限
sudo chmod 774 /usr/local/hadoop
配置~/.bashrc
配置该文件前需要知道Java的安装路径,用来设置JAVA_HOME环境变量,可以使用下面命令行查看安装路径
update-alternatives - -config java
执行结果如下:
完整的路径为
/usr/lib/jvm/java-7-openjdk-amd64/jre/bin/java
我们只取前面的部分 /usr/lib/jvm/java-7-openjdk-amd64
配置.bashrc文件
sudo gedit ~/.bashrc
该命令会打开该文件的编辑窗口,在文件末尾追加下面内容,然后保存,关闭编辑窗口。
最终结果如下图:
执行下面命,使添加的环境变量生效:
source ~/.bashrc
六、修改/hadoop/etc/hadoop文件
配置core-site.xml
/usr/local/hadoop/etc/hadoop/core-site.xml 包含了hadoop启动时的配置信息。
编辑器中打开此文件
sudo gedit /usr/local/hadoop/etc/hadoop/core-site.xml
<configuration> <property> <name>fs.default.name</name> <value>hdfs://master:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>131072</value> </property> <property> <name>hadoop.tmp.dir</name> <value>file:/home/hadoop/hadoop/tmp</value> <description>Abase for other temporary directories.</description> </property> <property> <name>hadoop.proxyuser.hadoop.hosts</name> <value>*</value> </property> <property> <name>hadoop.proxyuser.hadoop.groups</name> <value>*</value> </property> </configuration>
/usr/local/hadoop/etc/hadoop/yarn-site.xml包含了MapReduce启动时的配置信息。
编辑器中打开此文件
sudo gedit yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties --> <!--211.65.240.61 主机IP--> <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>
创建和配置mapred-site.xml
默认情况下,/usr/local/hadoop/etc/hadoop/文件夹下有mapred.xml.template文件,我们要复制该文件,并命名为mapred.xml,该文件用于指定MapReduce使用的框架。
复制并重命名
cp 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> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> </configuration>
/usr/local/hadoop/etc/hadoop/hdfs-site.xml用来配置集群中每台主机都可用,指定主机上作为namenode和datanode的目录。
创建文件夹,如下图所示
你也可以在别的路径下创建上图的文件夹,名称也可以与上图不同,但是需要和hdfs-site.xml中的配置一致。
编辑器打开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>/home/hadoop/hadoop/hdfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/hadoop/hadoop/hdfs/data</value> </property> <property> <name>dfs.replication</name> <value>3</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
七、配置hadoop-env.sh文件
编辑/usr/local/hadoop/etc/hadoop/hadoop-env.sh
执行下面命令,打开该文件的编辑窗口
sudo gedit /usr/local/hadoop/etc/hadoop/hadoop-env.sh
找到JAVA_HOME变量,修改此变量如下
export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
修改后的hadoop-env.sh文件如下所示:
八、配置slaves文件
在/hadoop/etc/hadoop/下修改slaves文件,加入三个slave设备名
slave1
slave2
slave3
九、向各节点复制hadoop
到此,hadoop的有关配置已经完成,namenode端通过如下命令把配置好的hadoop发送到各个datanode处:
scp -r hadoop路径 slave1:对应路径
十、格式化namenode
进入hadoop目录下,格式化hdfs文件系统
cd /home/hadoop/hadoop
bin/hdfs namenode -format
只需要执行一次即可,如果在hadoop已经使用后再次执行,会清除掉hdfs上的所有数据。(如果格式化两次时,启动HDFS会报错,原因是序列号不同。解决方法是删除hadoop下的temp和log文件夹,重新启动HDFS)
十一、启动hadoop
经过上文所描述配置和操作后,下面就可以启动这个单节点的集群
执行启动命令:
进入hadoop目录下
cd /home/hadoop/hadoop
sbin/start-all.sh 启动hadoop
sbin/stop-all.sh 停止hadoop
十二、用jps检验各后台进程是否成功启动
执行 jps命令,会看到Hadoop相关的进程
master上
Jps
NameNode
SecondaryNameNode
ResourceManager
slave上
Jps
DataNode
NodeManager
十三、通过网站查看集群情况
浏览器打开 http://localhost:50070/ ,会看到hdfs管理页面(如果lives节点为0,就说明HDFS没有成功启动)
浏览器打开http://localhost:8088,会看到hadoop进程管理页面(Active Nodes为0,说明hadoop配置出错了)
dfs上创建input目录
bin/hadoop fs -mkdir -p input
把hadoop目录下的README.txt拷贝到dfs新建的input里
hadoop fs -copyFromLocal README.txt input
运行WordCount
hadoop jar share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.4.0-sources.jar org.apache.hadoop.examples.WordCount input output
可以看到执行过程
运行完毕后,查看单词统计结果
hadoop fs -cat output/*
PS:其它一些常用命令
bin/hdfs dfs -mkdir /tmp
bin/hdfs dfs -mkdir /tmp/wordcount HDFS中新建/tmp/wordcount
bin/hdfs dfs -copyFromLocal /home/hadoop/xx.txt /tmp/wordcount/xx.txt 本地文件拷贝到HDFS
bin/hadoop dfs -ls /tmp/wordcount/out/* HDFS查看结果文件夹
bin/hadoop dfs -cat /tmp/wordcount/out/* HDFS查看结果文件
bin/hadoop dfs -rm -r /tmp/wordcount/o HDFS上删除文件
bin/hadoop jar /home/hadoop/hadoop/share/hadoop/mapreduce/sources/hadoop-mapreduce-examples-2.4.0-sources.jar org.apache.hadoop.examples.WordCount /tmp/wordcount/xx.txt /tmp/wordcount/out 运行java HDFS文件 HDFS结果存放文件夹(自动生成)