原创文章,转载请注明: 转载自 镜中影的技术博客
本文链接地址: Hadoop2.2配置详解
URL:http://blog.csdn.net/linkpark1904/article/details/50790906
hadoop,著名的云计算平台,在google发布了GFS,Mapreduce,Bigtable之后,社区的大牛们在这三篇论文思想的基础上,搭建了hadoop这个大的云计算平台,其中hdfs,hadoop-mapreduce,hbase分别对应谷歌的三篇论文的具体实现。在离线应用上,hadoop平台被广泛应用,作为一个开源平台是相当不错的。
一次机缘巧合,有幸在实验室接触hadoop,利用实验室现有的硬件资源,在多机环境下搭建了hadoop平台,这里把我搭建的过程分享一下。
一、准备工作
1.1 java环境准备
由于hadoop需要运行在java环境下,所以,java环境是必须的,需要安装jdk,最好不要用linux上自带的openjdk,需要用oracle官网提供的jdk才行。
下载jdk网址为:http://www.oracle.com/technetwork/java/javase/downloads/index.html
安装方法请自行参阅官网或者网上资料。
1.2 hadoop2.2安装环境准备
Hadoop2.2 源码下载地址为:http://apache.claz.org/hadoop/common/hadoop-2.2.0/
注意其中的几个文件,凡是带有src的都是hadoop2.2的源码文件,是没有编译过的,其中的hadoop-2.2.0.tar.gz是已编译过的文件,不过,该文件是在32位操作系统下的编译文件,在64位系统下是用不了的,所以若是在64位系统下需要重新编译源码文件,生成已编译的hadoop-2.2.0.tar.gz,再开始hadoop的配置,本文不对hadoop的编译流程做赘述,怎么在64位环境下编译hadoop请自行参阅官网,或网上相关资料。另外最新的hadoop-2.4.0我也试过,编译安装方法和hadoop2.2基本一模一样。
1.3 无密码ssh登陆
Hadoop的namenode节点和datanode节点的访问均是通过ssh,所以在配置hadoop之前需要配置无密码ssh登陆。
我们这里搭建的集群包括三台机器:
192.168.1.51 Ipppc-test-51 namenode OpenSUSE 11 x64
192.168.1.52 Ippc-test-52 datanode OpenSUSE 11 x64
192.168.1.54 Ippc-test-54 datanode OpenSUSE 11 x64
1.3.1 设置localhost的无密码ssh登陆
在~目录下,会有一个隐藏的.ssh目录,配置localhost无密码ssh登陆过程如下所示:
进入.ssh文件夹
ssh-keygen -t rsa 之后一路回 车(产生秘钥)
新建文件authorized_keys。
把id_rsa.pub 追加到授权的 key 里面去(cat id_rsa.pub >> authorized_keys)
重启 SSH 服 务命令使其生效 :service sshd restart。
验证无密码登陆是否成功
1.3.2 远程无密码ssh登陆
进入192.168.1.51的.ssh目录,将该目录下的authorized_keys追加到远程机器的.ssh目录下的authorized_keys文件中,具体做法如下:
scp authorized_keys root@192.168.1.52:~/.ssh/ authorized_keys_from_51
cat authorized_keys_from_c51 >> authorized_keys
验证一下在192.168.1.51机器上的远程登陆
1.3.3 host设置(这一步也可以跳过)
可以在各个机器之间增加host设置,修改/etc/hosts文件内容如下:
192.168.1.51 ipppc-test-51.site ipppc-test-51
192.168.1.52 ipppc-test-52
192.168.1.54 ippc-test-54
1.3.4 防火墙问题
有关防火墙,这里可以进行设置,开放hadoop所需的端口,为了方便,我们这里将防火墙关闭了。
ipppc-test-51:~# SuSEfirewall2 stop
二、 正式配置
2.1 配置前的准备
解压hadoop到相应的用户目录下,这里我们选择root用户,所以将hadoop解压到root的根目录下。
配置之前需要在根目录下新建几个文件夹
~/dfs/name
~/dfs/data
~/tmp
涉及到的hadoop配置文件有7个:
~/hadoop-2.2.0/etc/hadoop/hadoop-env.sh
~/hadoop-2.2.0/etc/hadoop/yarn-env.sh
~/hadoop-2.2.0/etc/hadoop/slaves
~/hadoop-2.2.0/etc/hadoop/core-site.xml
~/hadoop-2.2.0/etc/hadoop/hdfs-site.xml
~/hadoop-2.2.0/etc/hadoop/mapred-site.xml
~/hadoop-2.2.0/etc/hadoop/yarn-site.xml
以上配置文件个别不存在,可以复制相应的template文件获得。
2.2 配置文件的编写
在hadoop中,所以的配置xml文件均是由以下结构组成:
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.1.51:9000</value>
</property>
Name节点的值为需要配置的项,value为相应配置项的内容。
配置文件具体信息含义详见官网
配置文件1:hadoop-env.sh
修改JAVA_HOME的值:
# The java implementation to use.
export JAVA_HOME=/usr/java/jdk1.7.0_45
配置文件2:yarn-env.sh
修改JAVA_HOME的值
# some Java parameters
export JAVA_HOME=/usr/java/jdk1.7.0_45
配置文件3:slaves(这个文件保存所有slave节点)
192.168.1.52
192.168.1.54
配置文件4:core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://192.168.1.51:9000</value>
</property>
<property>
<name>io.file.buffer.size</name>
<value>131072</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/root/tmp</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.hosts</name>
<value>*</value>
</property>
<property>
<name>hadoop.proxyuser.hduser.groups</name>
<value>*</value>
</property>
</configuration>
配置文件5:hdfs-site.xml
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>192.168.1.51:9001</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/root/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/root/dfs/data</value>
</property>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<property>
<name>dfs.webhdfs.enabled</name>
<value>true</value>
</property>
</configuration>
配置文件6:mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>192.168.1.51:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>192.168.1.51:19888</value>
</property>
</configuration>
配置文件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>192.168.1.51:8032</value>
</property>
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.1.51:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.1.51:8031</value>
</property>
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.1.51:8033</value>
</property>
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.1.51:8088</value>
</property>
</configuration>
2.3 复制到其他节点
这里可以写一个shell脚本来执行复制操作:我们的集群里面全部是64位操作系统,所以可以直接将192.168.1.51上的hadoop直接复制到192.168.1.52和192.168.1.54机器上
#!/bin/bash
scp -r /root/dfs root@192.168.1.52:/root
scp -r /root/hadoop-2.2.0 root@192.168.1.52:/root
scp -r /root/dfs root@192.168.1.54:/root
scp -r /root/hadoop-2.2.0 root@192.168.1.54:/root
2.4 启动验证
进入安装目录:cd ~/hadoop-2.2.0/
格式化namenode: ./bin/hdfs namenode –format
启动hdfs: ./sbin/start-dfs.sh
此时在192.168.1.51上运行的进程有包括namenode secondarynamenode的进程,而在192.168.1.52 上运行的进程有包括datanode的进程.
能够证明dfs启动起来了。
给出几个简单的例子:
1.查看集群状态:./bin/hdfs dfsadmin –report
2.查看文件块组成: ./bin/hdfsfsck / -files -blocks
3.查看HDFS: http://192.168.1.51:50070
4.查看RM: http:// 192.168.1.51:8088
5.在网页上访问的截图如下所示:
三、 可能遇到的问题
1、多次格式化namenode之后,可能datanode启动不起来。解决办法,找到配置文件hdfs-site.xml中的配置项:
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/root/dfs/data</value>
</property>
清空对应的/root/dfs/data目录的内容,重启hadoop即可
2、 启动hadoop之后无法通过网页访问,可能是防火墙拦截了50070端口,关闭防火墙再访问。
四、 hadoop的基本操作
4.1 启动和关闭
启动和关闭的执行脚本均在hadoop目录下的sbin目录下。
Start-dfs.sh
Stop-dfs.sh
4.2 基本操作
执行hadoop shell的命令位于hadoop目录下的bin目录下:
执行文件操作的命令式hadoop
查看文件列表
./hadoop fs –ls –R /user
创建目录
./hadoop fs –mkdir /user/program
删除文件
./hadoop fs –rm /user/program/Hello.java
./haddop fs –rm –R /user
上传文件
./hadoop fs –put /root/Hello.java /usr
下载文件
./hadoop fs –get /user/Hello.java /root
查看文件内容
./hadoop fs –cat /usr/Hello.java