Hadoop安装及配置

最近和实验室的朋友尝试着在几台虚拟机上搭了搭Hadoop,期间遇到很多问题,百度上很多答案要么是表意不清,要么是版本太老,坑得我们走了很多弯路。其实只要理解了相应的配置文件和操作,还是很简单的,一个下午安装hadoop,hbase,zookeeper,nutch问题不大。才接触hadoop不久,有需要改进的地方希望朋友们给指出来,谢啦。


我是根据虾皮工作室的这篇文章来安装的:点击打开链接,里面解释得非常清楚,小白理解起来也绝不会有压力。

1、集群部署介绍

1.1环境说明

由于实验室服务器资源有限,我们也分为好几个hadoop小组,每组的实验资源是四台虚拟机,分别模拟集群中的4个节点,各节点均为Centos6.3系统,创建的账户名均为hadoop。

节点IP地址分布如下:

机器名称:             IP地址:

Master                 172.31.62.51  

Slave1                 172.31.62.52

Slave2                 172.31.62.53

Slave3                 172.31.62.54

Master机器主要配置NameNode和JobTracker的角色(小集群无需分开配置),负责总管分布式数据和分解任务的执行;3个Salve机器配置DataNode和TaskTracker的角色,负责分布式数据存储以及任务的执行。

1.2 网络配置

1)修改当前机器名称:

通过vim /etc/sysconfig/network 修改其中的HOSTNAME属性值

2)修改IP地址:

修改/etc/sysconfig/network-scripts/ifcfg-eth0 中的“IPADDR”属性

3)配置/etc/hosts文件:

"/etc/hosts"这个文件是用来配置主机将用的DNS服务器信息,是记载各主机的对应[HostName和IP]用的。在进行Hadoop集群配置中,需要在"/etc/hosts"文件中添加集群中所有机器的IP与主机名,这样Master与所有的Slave机器之间不仅可以通过IP进行通信,而且还可以通过主机名进行通信。所以在所有的机器上的"/etc/hosts"文件末尾中都要添加如下内容:

172.31.62.51 Master

172.31.62.52 Slave1

172.31.62.53 Slave2

172.31.62.54 Slave3

此处我们应注意一点:hosts文件中对应有”127.0.0.1”一项,默认对应于”localhost”或”centos”,应将此属性值删除。

注:由于127.0.0.1是回送地址,主要用于网络软件测试以及本地机进程间通信,无论什么程序,一旦使用回送地址发送数据,协议软件立即返回,不进行任何网络传输。猜测:此处如果不删除,可能会无法启动namenode,就像“本机被屏蔽”一样,之后的Hbase配置也与此有关,所以最好还是将该项删除。

1.3所需软件

1)jdk

虽然此centos内置openjdk,但考虑到openjdk只包含最精简的JDK,不包含部署功能,无Rhino Java DB JAXP等软件包,为了后期开发方便还是安装了jdk1.8.0,其jdk安装地址为:

/usr/jdk1.8

2)hadoop(1.2.1版本)

下载地址:http://hadoop.apache.org/common/releases.html

3)使用Xshell连接到虚拟机,它自带了XFTP可以传文件,无需使用VSFTP。


2、SSH无密码访问验证配置

在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode。

2.1通过以下两个命令,我们得知ssh和rsync服务已经安装:

rpm –qa |grep openssh

rpm –qa |grep rsync

2.2配置Master无密码登陆Slave

1)SSH无密码原理

Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端Master复制到Slave上。

2)Master机器上生成密码对

在Master节点上执行以下命令:

ssh -keygen –t rsa –P ''

生成的密钥对:id_rsa和id_rsa.pub,默认存储在"/home/hadoop/.ssh"目录下。接着执行:

cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys

把id_rsa.pub追加到授权的key里面去。在验证前,需要修改文件"authorized_keys"权限,还要用root用户设置"/etc/ssh/sshd_config"的内容。使其无密码登录有效。

1.chmod 600 ~/.ssh/authorized_keys

2.Vim /etc/ssh/sshd_config

RSAAuthenticationyes # 启用 RSA 认证

PubkeyAuthenticationyes # 启用公钥私钥配对认证方式

AuthorizedKeysFile.ssh/authorized_keys # 公钥文件路径(和上面生成的文件同)

设置完之后重启SSH服务,service sshd restart,使刚才设置有效。

验证是否成功:ssh localhost

如Master成功登陆Slave1,会显示

Last login: Sun Jan 18 22:45:30 2015 from 172.31.62.253

然后把公钥复制所有的Slave机器上。使用下面的命令格式进行复制公钥:

scp ~/.ssh/id_rsa.pub 远程用户名@远程服务器IP:~/

下面就针对IP为"172.31.62.52"的Slave1.Hadoop的节点进行配置。

1)  把Master.Hadoop上的公钥复制到Slave1.Hadoop上

2)在"/home/hadoop/"下创建".ssh"文件夹:mkdir ~/.ssh,并修改权限:chmod 700 ~/.ssh

3)追加到授权文件"authorized_keys"

使用下面命令进行追加并修改"authorized_keys"文件权限:

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

chmod 600~/.ssh/authorized_keys

追加成功后可cat authorized_keys查看,里面是一堆乱七八糟的序列,但可以看到刚才追加了keys的对应主机名。

4)用root用户修改"/etc/ssh/sshd_config"

5)用Master.Hadoop使用SSH无密码登录Slave1.Hadoop

当前面的步骤设置完毕,就可以使用下面命令格式进行SSH无密码登录了。

ssh 远程服务器IP

最后把"/home/hadoop/"目录下的"id_rsa.pub"文件删除掉。

rm –r~/id_rsa.pub

到此为止,我们实现了从"Master.Hadoop"到"Slave1.Hadoop"SSH无密码登录,下面就是重复上面的步骤把剩余的两台(Slave2.Hadoop和Slave3.Hadoop)Slave服务器进行配置。这样,我们就完成了"配置Master无密码登录所有的Slave服务器"。因为要使得从Slave到Master相互间可以无密码登陆,故技重施,将Slave生成的公钥追加到Master之中,此处从略。最后完成效果应该是:Master能无密码验证登录每个Slave,每个Slave也能无密码验证登录到Master。


3、安装JAVA

此处从略,安装好后记得配置环境变量。

在尾部加入:

# setjava environment

exportJAVA_HOME=/usr/jdk1.8

exportCLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JRE_HOME/lib

exportPATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin

执行下面命令使其配置立即生效。

source /etc/profile       (*必不可少)

java–version

验证JDK无问题。


4、Hadoop集群安装

把"hadoop-1.2.1.tar.gz"复制到"/usr"目录下面。

cp/home/hadoop/hadoop-1.2.1.tar.gz /usr/new/

把"hadoop-1.0.0.tar.gz"进行解压,并将其命名为"hadoop",把该文件夹的读权限分配给普通用户hadoop,然后删除"hadoop-1.0.0.tar.gz"安装包。最后在"/usr/new/hadoop"下面创建tmp文件夹:

1.tar -zxvf hadoop-1.0.0.tar.gz

2.mv hadoop-1.0.0.tar.gz hadoop

3.[root@Master usr]chown -R hadoop:hadoop hadoop     (递归地将hadoop文件夹权限分配给hadoop用户,冒号两端分别为用户和所在组名)

把Hadoop的安装路径添加到"/etc/profile"中,修改"/etc/profile"文件(配置java环境变量的文件),将以下语句添加到末尾,并使其有效:

# sethadoop path

exportHADOOP_HOME=/usr/new/hadoop

exportPATH=$PATH:$HADOOP_HOME/bin

(可建立软连接: ln -s /usr/new/hadoop /hadoop


4.2 配置hadoop

1)配置hadoop-env.sh

在文件的末尾添加下面内容。

# setjava environment

export JAVA_HOME=/usr/jdk1.8

Hadoop配置文件在conf目录下,之前的版本的配置文件主要是Hadoop-default.xml和Hadoop-site.xml。由于Hadoop发展迅速,代码量急剧增加,代码开发分为了core,hdfs和map/reduce三部分,配置文件也被分成了三个core-site.xml、hdfs-site.xml、mapred-site.xml。

2)配置core-site.xml文件

  修改Hadoop核心配置文件core-site.xml,这里配置的是HDFS的地址和端口号。

<configuration>

    <property>

        <name>hadoop.tmp.dir</name>

        <value>/usr/new/hadoop/tmp</value>

        <description>A base for othertemporary directories.</description>

    </property>

<!--file system properties -->

    <property>

       <name>fs.default.name</name>

        <value>hdfs://172.31.62.51:9000</value>

    </property>

</configuration>

  备注:hadoop.tmp.dir是hadoop文件系统依赖的基础配置,很多路径都依赖它。如果不配置它会默认指向临时目录,而该目录在每次重启后都会被干掉,必须重新执行format才行,否则会出错。fs.default.name是一个描述集群中NameNode结点的URI(包括协议、主机名称、端口号),集群里面的每一台机器都需要知道NameNode的地址。DataNode结点会先在NameNode上注册,这样它们的数据才可以被使用。独立的客户端程序通过这个URI跟DataNode交互,以取得文件的块列表

3)配置hdfs-site.xml文件

  修改Hadoop中HDFS的配置,配置的备份方式默认为3。

<configuration>

<property>

        <name>dfs.replication</name>

        <value>1</value>(备注:replication 是数据副本数量,默认为3,salve少于3台就会报错)

</property>

<property>

<name>dfs.data.dir</name>

<value>/usr/new/hadoop/data</value>  (这个参数用于确定将HDFS文件系统的数据保存在什么目录下)

</property>

<property>

<name>dfs.name.dir</name>

<value>/usr/new/hadoop/tmp</value>(这个参数用于确定将HDFS文件系统的元信息保存在什么目录下,namenode下配置

</property><configuration>

4)配置mapred-site.xml文件

  修改Hadoop中MapReduce的配置文件,配置的是JobTracker的地址和端口。

<configuration>

    <property>

        <name>mapred.job.tracker</name>

       <value>http://172.31.62.51:9001</value>

    </property>

</configuration>

5)配置masters文件

去掉"localhost",加入Master机器的IP:172.31.62.51

6)配置slaves文件(Master主机特有)

去掉"localhost",加入集群中所有Slave机器的IP,也是每行一个。

现在在Master机器上的Hadoop配置就结束了,剩下的就是配置Slave机器上的Hadoop。

将 Master上配置好的hadoop所在文件夹"/usr/new/hadoop"复制到所有的Slave的"/usr"目录下。用下面命令格式进行。(备注:此时用户可以为hadoop也可以为root)

scp -r/usr/hadoop root@服务器IP:/usr/

此时,我们要将hadoop文件夹的权限进行修改,要给要给"Slave1.Hadoop"服务器上的用户hadoop添加对"/usr/new/hadoop"读权限,否则在启动hadoop时会出现权限不足的问题。以root用户登录"Slave1.Hadoop",执行:chown -R hadoop:hadoop(用户名:用户组)hadoop(文件夹)

接着在"Slave1 .Hadoop"上修改"/etc/profile"文件(配置 java 环境变量的文件),配置hadoop的环境变量,参照Master配置即可,并使其有效(source /etc/profile)。

到此为此在一台Slave机器上的Hadoop配置就结束了。剩下的事儿就是照葫芦画瓢把剩余的几台Slave机器进行部署Hadoop。


4.3启动及验证

1)格式化HDFS文件系统

在"Master.Hadoop"上使用普通用户hadoop进行操作。(备注:只需一次,下次启动不再需要格式化,只需 start-all.sh)

hadoop namenode -format

2)启动hadoop

在启动前关闭集群中所有机器的防火墙(每次机器reboot都要重新关闭),不然会出现datanode开后又自动关闭。

service iptables stop

使用下面命令启动:

start-all.sh(stop-all.sh是关闭)

可以通过以下启动日志看出,首先启动namenode 接着启动datanode1,datanode2,…,然后启动secondarynamenode。再启动jobtracker,然后启动tasktracker1,tasktracker2,…。启动 hadoop成功后,在 Master 中的 tmp 文件夹中生成了 dfs 文件夹,在Slave 中的 tmp 文件夹中均生成了 dfs 文件夹和 mapred 文件夹。

3)验证hadoop

(1)验证方法一:用"jps"命令

在Master上用java自带的小工具jps查看进程:

xxxx NameNode

xxxx JobTracker

xxxx SecondaryNameNode

xxxx Jps

在Slave1上用jps查看进程:

xxxx TaskTracker

xxxx DataNode

xxxx Jps

(2)验证方式二:用"hadoop dfsadmin -report"

用这个命令可以查看Hadoop集群的状态:

Configured Capacity: 627311050752 (584.23 GB)

Present Capacity: 575630934016 (536.1 GB)

DFS Remaining: 569248821248 (530.15 GB)

DFS Used: 6382112768 (5.94 GB)

DFS Used%: 1.11%

Under replicated blocks: 3

Blocks with corrupt replicas: 0

Missing blocks: 0

出现类似的信息即可。

 

4.4 网页查看集群

1)访问"http:172.31.62.51:50030"

2)访问"http: 172.31.62.51:50070"








  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值