hadoop 2.5.0安装(虚拟机)

版权声明:本文为博主原创文章,未经博主允许不得转载。

目录-[-]
1 先决条件
2 实验环境搭建
21 准备工作
22 安装JDK
23下载创建用户
24 安装ssh和配置

摸索了一下发现网上关于2.5的都不怎么全面自己研究了一下
参照这两个帖子基本可以成功。
这个帖子比较全面不过是2.2的http://blog.csdn.NET/bluishglc/article/details/24591185
前期准备内容参照http://blog.csdn.Net/flyqwang/article/details/7244552/

1. 前期准备
1 先决条件
确保在你集群中的每个节点上都安装了所有必需软件:sun-JDK ,ssh,Hadoop

JavaTM
1.5.x,必须安装,建议选择Sun公司发行的Java版本。

ssh 必须安装并且保证 sshd一直运行,以便用Hadoop 脚本管理远端Hadoop守护进程。

2 实验环境搭建
2.1 准备工作
操作系统:Ubuntu 部署:Vmvare 在vmvare安装好一台Ubuntu虚拟机后,可以导出或者克隆出另外两台虚拟机。
先修改主机名方便识别/etc/hostname"文件修改其中"HOSTNAME"
如master机将HOSTNAME改为master
slave1机改为slave1依次类推 说明: 保证虚拟机的ip和主机的ip在同一个ip段,这样几个虚拟机和主机之间可以相互通信。 为了保证虚拟机的ip和主机的ip在同一个ip段,虚拟机连接设置为桥连。
IP设置成固定IP
准备机器:一台master,若干台slave,配置每台机器的/etc/hosts保证各台机器之间通过机器名可以互访,例如:
192.168.0.199 master(node1) 192.168.0.200 slave1(node2) 192.168.0.201 slave2(node3) 主机信息:

机器名 IP地址 作用
Node1 192.168.0.199 NameNode、JobTracker
Node2 192.168.0.200 DataNode、TaskTracker
Node3 192.168.0.201 DataNode、TaskTracker

为保证环境一致先安装好JDK和ssh:
2.2 安装JDK

安装JDK$ sudo apt-get install sun-java6-jdk1.2.3 这个安装,java执行文件自动添加到/usr/bin/目录。验证 shell命令 :java -version 看是否与你的版本号一致。

2.3下载、创建用户
$ useradd hadoop$ cd /home/hadoop
 在所有的机器上都建立相同的目录,也可以就建立相同的用户,最好是以该用户的home路径来做hadoop的安装路径。例如在所有的机器上的安装路径都是:/home/hadoop/hadoop,这个不需要mkdir,在/home/hadoop/下解压hadoop包的时候,会自动生成)(当然可以安装/usr/local/目录下,例如/usr/local/hadoop/ chown -R hadoop /usr/local/hadoop/ chgrp -R hadoop /usr/local/hadoop/)(最好不要使用root安装,因为不推荐各个机器之间使用root访问 )
2.4 安装ssh和配置
1) 安装:sudo apt-get install ssh
 这个安装完后,可以直接使用ssh命令 了。 执行$ netstat -nat 查看22端口是否开启了。 测试:ssh localhost。 输入当前用户的密码,回车就ok了。说明安装成功,同时ssh登录需要密码。 (这种默认安装方式完后,默认配置文件是在/etc/ssh/目录下。sshd配置文件是:/etc/ssh/sshd_config):
注意:在所有机子都需要安装ssh。
2) 配置
 在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个datanode上的各种守护进程的,这就须要在节点之间执行指令的时候是不须要输入密码的形式,故我们须要配置SSH运用无密码公钥认证的形式。以本文中的三台机器为例,现在node1是主节点,他须要连接node2和node3。须要确定每台机器上都安装了ssh,并且datanode机器上sshd服务已经启动。
( 说明:hadoop@hadoop~]$ssh-keygen -t rsa这个命令将为hadoop上的用户hadoop生成其密钥对,询问其保存路径时直接回车采用默认路径,当提示要为生成的密钥输入passphrase的时候,直接回车,也就是将其设定为空密码。生成的密钥对id_rsa,id_rsa.pub,默认存储在/home/hadoop/.ssh目录下然后将id_rsa.pub的内容复制到每个机器(也包括本机)的/home/hadoop/.ssh/authorized_keys文件中,如果机器上已经有authorized_keys这个文件了,就在文件末尾加上id_rsa.pub中的内容,如果没有authorized_keys这个文件,直接复制过去就行.)
3) 首先设置namenode的ssh为无需密码的、自动登录。
 切换到hadoop用户( 保证用户hadoop可以无需密码登录,因为我们后面安装的hadoop属主是hadoop用户。)

$ su hadoop
cd /home/hadoop
$ ssh-keygen -t rsa

然后一直按回车完成后,在home跟目录下会产生隐藏文件夹.ssh

$ cd .ssh
#之后ls 查看文件
cp id_rsa.pub  authorized_keys
测试:
$ssh localhost
或者:
$ ssh master                               

第一次ssh会有提示信息:
The authenticity of host ‘master (10.64.56.76)’ can’t be established.RSA key fingerprint is 03:e0:30:cb:6e:13:a8:70:c9:7e:cf:ff:33:2a:67:30.Are you sure you want to continue connecting (yes/no)?
输入 yes 来继续。这会把该服务器添加到你的已知主机的列表中
发现链接成功,并且无需密码。

4 ) 复制authorized_keys到node2 和node3 上
为了保证node1可以无需密码自动登录到node2和node3,先在node2和node3上执行****

$ su hadoop
cd /home/hadoop
$ ssh-keygen -t rsa
一路按回车.然后回到node1,复制authorized_keys到node2 和node3 [hadoop@hadoop .ssh]$ scp authorized_keys   slave1:/home/hadoop/.ssh/
[hadoop@hadoop .ssh]$ scp authorized_keys   slave2:/home/hadoop/.ssh/

这里会提示输入密码,输入hadoop账号密码就可以了。改动你的 authorized_keys 文件的许可权限[hadoop@hadoop .ssh]$chmod 644 authorized_keys

测试:ssh node2或者ssh node3(第一次需要输入yes)。如果不须要输入密码则配置成功,如果还须要请检查上面的配置能不能正确。
还不好使删除用户重试或者参考这个帖子
http://blog.csdn.net/joe_007/article/details/8298814
之后的内容参照2.2版的就可以

2. 安装与配置

2.1 安装前的准备
先关闭防火墙
sudo ufw disable
在安装hadoop前需要安装ssh,配置各节点间的基于密钥的免密码登录,安装jdk1.7并配置JAVA_HOME,关于这些操作请参考其他文档,本文不做赘述,只给出/etc/profile中关于JAVA_HOME和HADOOP_HOME的配置参考:

JAVA_HOME=/usr/java/jdk1.7.0_51  
HADOOP_HOME=/usr/local/hadoop  
PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin  
export JAVA_HOME HADOOP_HOME PATH  

注:为了方便起见,我们将$HADOOP_HOME/sbin也加入到了PATH中,同时为了在输入命令时避免同名cmd文件的干扰,可以使用rm -f $HADOOP_HOME/bin/.cmd;rm -f $HADOOP_HOME/s****bin/.cmd;**删除cmd文件。

2.2 配置必要的环境变量

本文安装基于这样一个约定或者说偏好:安装程序位于/usr/local(或者/opt),生成的文件和相关数据文件集中放置于/var/hadoop,将发行包解压至/usr/local(或者/opt)后,分别编辑${HADOOP_HOME}/etc/hadoop/hadoop-env.sh${HADOOP_HOME}/etc/hadoop/yarn-env.sh,在两个文件中找到并修改或者是添加下列环境变量:

export JAVA_HOME=/your/java/home  
export HADOOP_LOG_DIR=/var/hadoop/logs  
export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native  
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib"  

上述环境变量的配置都不是必须的,对于第一项配置原文件的写法是export JAVA_HOME=${JAVA_HOME},但在集群环境下启动时可能会报JAVA_HOME is not set and could not be found错误,从该项的注释上我们了解到,在集群环境下即使各结点都正确地配置了JAVA_HOME,这里最好还是显示地重新声明一遍JAVA_HOME.第二项配置是指定log的存放目录,默认位置是安装目录下的logs文件夹,按前文约定,本次安装将log文件置于/var/hadoop/logs下。对第三项和第四顶配置要视情况添加,如果出现4.2节所描述的问题则这两项是必须的!


2.3 配置${HADOOP_HOME}/etc/hadoop/core-site.xml

<configuration>  
    <property>  
        <name>fs.defaultFS</name>  
        <value>hdfs://YOUR-NAMENODE:9000</value>  
    </property>  
    <property>  
        <name>hadoop.tmp.dir</name>  
        <value>/var/hadoop</value>  
    </property>  
</configuration>  

core-site.xml的各项默认配置可参考:http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-common/core-default.xml
对于一个新集群来说,唯一必须修改的项是:fs.defaultFS,该项指明了文件系统的访问入口,实际上是告知所有的datanode它们的namenode是哪一个从而建立起namenode与各datanode之间的通信。

除此之外,按照前文约定,我们把hadoop.tmp.dir设置为/var/hadoop。观察core-default.xml我们可以发现,在所有涉及目录的配置项上,默认都是在${hadoop.tmp.dir}之下建立子文件夹,所以本次安装我们只简单地将hadoop.tmp.dir的原默认值/tmp/hadoop-${user.name}改为/var/hadoop,将所有hadoop生成和使用的文件集中/var/hadoop下,避免与/tmp目录下若干其他文件混杂在一起。

2.4 配置${HADOOP_HOME}/etc/hadoop/hdfs-site.xml

<configuration>  
    <property>  
        <name>dfs.namenode.secondary.http-address</name>  
        <value>YOUR-SECONDARY-NAMENODE:50090</value>  
    </property>  
    <property>  
        <name>dfs.replication</name>  
        <value>1</value>  
    </property>  
</configuration>  

hdfs-site.xml的各项默认配置可参考:http://hadoop.apache.org/docs/r2.2.0/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml 对于一个新集群来说这个文件没没有必须修改的项,但是有几个重要的配置项是可能需要修改的,主要是如下几项:

**dfs.namenode.secondary.http-address **//指定secondary namenode结点,若不指定,在使用start-dfs.sh启动时,当前节点将自动成为secondary namenode
dfs.replication //每一个block的复制份数,默认是3,如果集群datanode结点数量小于3应将该值设置小于或等于datanode的结点数量
dfs.namenode.name.dir //存放namenode相关数据的文件夹
**dfs.datanode.data.dir **//存放datanade相关数据的文件夹
dfs.namenode.checkpoint.dir //存放secondary namenode相关数据的文件夹

对于后三项来说,它们的默认值也都是在${hadoop.tmp.dir}之下的子文件夹,你可以根据集群的实际情况修改这三个值。比如:把它们改到一个挂载到NFS上的文件夹。
2.5 配置${HADOOP_HOME}/etc/hadoop/mapred-site.xml
在${HADOOP_HOME}/etc/hadoop下拷贝一份mapred-site.xml.template命名为mapred-site.xml,添加如下内容:

<configuration>  
    <property>  
        <name>mapreduce.framework.name</name>  
        <value>yarn</value>  
    </property>  
</configuration>  

mapred-site.xml的各项默认配置可参考:hadoop.apache.org/docs/r2.2.0/hadoop-mapreduce-client/hadoop-mapreduce-client-core/mapred-default.xml 该文件唯一一个必须要修改的项是mapreduce.framework.name,该项告诉hadoop使用何种框架执行map-reduce任务。

另外该文件也有几个设及文件存放位置的配置项:

mapreduce.cluster.local.dir
mapreduce.jobtracker.system.dir
mapreduce.jobtracker.staging.root.dir
mapreduce.cluster.temp.dir

如有必要也应该做适当修改。

2.6 配置${HADOOP_HOME}/etc/hadoop/yarn-site.xml

<configuration>  
    <property>  
        <name>yarn.resourcemanager.hostname</name>  
        <value>YOUR-RESOURCE-MANAGER</value>  
    </property>  
    <property>  
        <name>yarn.nodemanager.aux-services</name>  
        <value>mapreduce_shuffle</value>  
    </property>  
</configuration>  

yarn-site.xml的各项默认配置可参考:http://hadoop.apache.org/docs/r2.2.0/hadoop-yarn/hadoop-yarn-common/yarn-default.xml 该文件必须修改的项有两个,基中yarn.resourcemanager.hostname项与core-site.xml的fs.defaultFS项类似,该项为所有的nodemanager指明了resourcemanager,建立起resourcemanager与各nodemanager之间的通信。

另外该文件也有几个设及文件存放位置的配置项:

yarn.nodemanager.local-dirs
yarn.resourcemanager.fs.state-store.uri

****如有必要也应该做适当修改。

2.7 配置slave结点列表

通常情况我们使用start-dfs.sh脚本来启动整个集群,查看该脚本可以知道,该脚本会基于配置文件在目标结点上启动namenode,secondary namenode, 和slave(datanode)结点,slave(datanode)的列表是在${HADOOP_HOME}/etc/hadoop/slaves文件中配置的,一个结点一行。所以我们需要在此文件中添加所有的datanode机器名或IP

2.8 将上述配置的hadoop安装程序重新打包复制到所有结点的对应位置再展开,同时记得修改每个结点的/etc/profile

3. 启动

3.1 关于账户设置

在正式的部署环境上,我们推荐设置专有账户来运行hadoop,例如:创建用户hdfs用户来启动namenode和datanode,创建yarn用户来启动resourcemanager和nodemanager.至于这些用户的用户组可以是同名用户组(这与CDH的做法一致的),也可以使用一个统一的用户组,如hadoop之类,这取决于你自己的喜好,但本质上这些用户彼此之间并没有必然的联系,让它们从属于同一个用户组并没有什么特殊的意味,所以我喜欢让每一个用户独立于自己的用户组。

需要特别提醒的是:如果配置专用账户启动hadoop相关服务需要将hadoop所使用的各种文件夹(例如:dfs.namenode.name.dir等等)的owner和owner group改为专有用户,否则会导致专有用户因为没有足够的权限访问这些文件夹而导致服务启动失败。由于配置这些文件夹的owner和owner group相当繁琐,且启停这些服务时都需要切换至对应用户,对于日常开发来说是很不便的,所以如果你搭建的是本地开发环境可以简单地使用root帐号来启动hadoop.

3.2 格式化集群

初启动前,需要首先格式化集群,执行命令:hadoop namenode -format

3.3 启动hdfs

执行:

start-dfs.sh

该命令可以任意结点上执行。不过需要注意的是如果配置文件中没有指明secondary namenode(即在hdfs-site.xml中没有配置dfs.namenode.secondary.http-address),那么在哪个结点上执行该命令,该点将自动成为secondary namenode.
以下单独启动某项服务的命令:
启动namenode

hadoop-daemon.sh start namenode

启动secondarynamenode

hadoop-daemon.sh start secondarynamenode

启动datanode


hadoop-daemon.sh start datanode

启动之后,访问:


http://YOUR-NAMENODE:50070

检查HDFS各结点情况,如都能访问表示HDFS已无问题,如无法访问或缺少节点,可分析log的中的信息找出问题原因。

3.4 启动yarn

执行:start-yarn.sh
该命令可以任意结点上执行。其slaves结点与hdfs一样,读取的也是${HADOOP_HOME}/etc/hadoop/slaves文件。
以下单独启动某项服务的命令:启动resourcemanageryarn-daemon.sh start resourcemanager

启动nodemanager

yarn-daemon.sh start nodemanager

启动之后,访问:

http://YOUR-RESOURCE-MANAGER:8088

检查YARN各结点情况,如都能访问表示YARN无问题,如无法访问或缺少节点,可分析log的中的信息找出问题原因。

4. 常见错误

4.1:Problem connecting to server: xxxx:9000

在确认关闭了ipv6和防火墙之后,在namenode上使用
netstat -ntlp|grep 9000
检查namenode服务端口的分配(特别是 local address和foreign address),确定是否存在配置上的问题,如有没有正确配置/etc/hosts

4.2:libhadoop.so.1.0.0 which might have disabled stack guard

在使用./sbin/start-dfs.sh或./sbin/start-all.sh启动时会报出这样如下警告:

Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /usr/local/hadoop-2.2.0/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.
....
Java: ssh: Could not resolve hostname Java: Name or service not known
HotSpot(TM): ssh: Could not resolve hostname HotSpot(TM): Name or service not known
64-Bit: ssh: Could not resolve hostname 64-Bit: Name or service not known
....

这个问题的错误原因会发生在64位的操作系统上,原因是从官方下载的hadoop使用的本地库文件(例如lib/native/libhadoop.so.1.0.0)都是基于32位编译的,运行在64位系统上就会出现上述错误。解决方法之一是在64位系统上重新编译hadoop,另一种方法是在hadoop-env.sh和yarn-env.sh中添加如下两行:

export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native  
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib"  

4.3:Error: JAVA_HOME is not set and could not be found.虽然你已经在各个节点上正确的配置了JAVA_HOME,但是启动时还是可能会报出上述错误,从etc/hadoop/hadoop-env.sh文件关于第一行配置:export JAVA_HOME=${JAVA_HOME}的注释上来看,对于一个分布式集群,这里JAVA_HOME最好显式地指明而不要使用默认的${JAVA_HOME}。对于etc/hadoop/yarn-env.sh也是如此!

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,271评论 5 476
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,275评论 2 380
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,151评论 0 336
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,550评论 1 273
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,553评论 5 365
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,559评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,924评论 3 395
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,580评论 0 257
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,826评论 1 297
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,578评论 2 320
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,661评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,363评论 4 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,940评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,926评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,156评论 1 259
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,872评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,391评论 2 342

推荐阅读更多精彩内容