Centos6.4 +Hadoop 1.2.1集群配置

转自:

pizibaidu

http://pizibaidu.blog.51cto.com/1361909/1318684


一.简述:

Hadoop是一种分布式系统基础架构,由Apache基金会开发。用户可以在不了解分布式底层细节的情况下,开发分布式程序,充分利用集群的威力高速运算和存储。Hadoop 1.2.1版本下载地址:http://apache.dataguru.cn/hadoop/common/hadoop-1.2.1/

本文章配置的是完全分布模式。


hadoop 三种运行模式:

单机模式:无需任何守护进程,所有程序在单JVM上执行

伪分布模式:守护进程运行在本地机器上。

完全分布模式:守护进程运行在一个集群上。


二、准备安装环境

本机: windows8.1企业版X64,上面装有VMware vSphere Client。

测试服务器:公司一台DELL PowerEdgeT110测试服务器(上面安装有VMwareVsphere Esxi5.1),在Esxi上面虚拟了3个centos6.4。

JDK: jdk1.7.0_45

集群:一个master,两个slave,主机名称分别是node1,node2,node3.

机器名

IP

作用

Node1

192.168.1.191

NameNode,JobTraker

Node2

192.168.1.192

DataNode,TaskTraker

Node3

192.168.1.193

DataNode,TaskTraker


 .安装

1.修改主机名称并设置hosts

设置主机名:Hostname node1(三台主机上分别设置)


修改hostsVim/etc/hosts,写入下列内容(三台主机都要设置)

192.168.1.191 node1

192.168.1.192 node2

192.168.1.193 node3

170838266.jpg





然后保证互ping可以通。


2.清除防火墙规则和临时关闭selinux


为了测试方便,建议把防火墙规则清除,以及临时关闭selinx


防火墙设置:

保存规则:iptables-save>iptables-script

清除规则:iptables –F


临时关闭selinux :

使用命令setenforce 0

3.安装JDK


1.)下载JDK. 打开http://java.sun.com/javase/downloads/index.jsp


170840683.jpg




170842365.jpg






2.)mkdir -p /usr/local/java/

tar -zxvf jdk-7u45-linux-x64.tar.gz

mv jdk1.7.0_45 /usr/local/java


3.)修改/etc/profile,添加如下内容


JAVA_HOME=/usr/local/java/jdk1.7.0_45

JRE_HOME=$JAVA_HOME/jre

CLASSPATH=.:$JAVA_HOME/jre/lib/rt.jar:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools/jar


PATH=$PATH:$HOME/bin:$JAVA_HOME:$JRE_HOME:$CLASSPATH:$JAVA_HOME/bin:/home/hadoop/hadoop-1.2.1/bin


export PATH


4.)使配置生效

source /etc/profile




4.添加用户.

在root权限下使用以下命令添加hadoop用户,在三个虚拟机上都添加这个用户

useradd hadoop


将下载到的hadoop-1.2.1.tar文件放到/home/hadoop/目录下解压,然后修改解压后的文件夹的权限,命令如下:

Tar -zxvf hadoop-1.2.1.tar

Chown -R hadoop:hadoop hadoop-1.2.1


5.配置SSH无密码登录


在Hadoop启动以后,Namenode是通过SSH(Secure Shell)来启动和停止各个datanode上的各种守护进程的,这就须要在节点之间执行指令的时候是不须要输入密码的形式,故我们须要配置SSH运用无密码公钥认证的形式。

以本文中的三台机器为例,现在node1是主节点,他须要连接node2和node3。须要确定每台机器上都安装了ssh,并且datanode机器上sshd服务已经启动。



[hadoop@node1 ~]$ 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这个文件,直接复制过去就行


下面是具体的过程:

1.)生成密钥对


su hadoop切换hadoop用户

cd /home/hadoop

ssh-keygen -t rsa


在/home/hadoop目录下会生成一个隐藏的.ssh目录。

ll -a


170844493.jpg



2.) 生成authorized_keys文件并测试



进入.ssh文件夹,然后将id_rsa.pub复制到authorized_keys文件,

命令如下:


cd .ssh

cp id_rsa.pub authorized_keys #生成authorized_keys文件

ssh localhost #测试无密码登陆,第一可能需要密码

ssh node1 #同上一个命令一样

171523778.jpg











注:在三台主机上都要执行上述命令。


3.)在node1、node2和node3上互换公钥。


在node2和node3执行以下命令

scp authorized_keys hadoop@node1:/tmp

#复制authorized_keys到node1的tmp目录中去


cat /tmp/authorized_keys>>/home/hadoop/.ssh/authorized_keys

#把公钥追加到文件后面。

现在node1上的authorized文件已经包含了三台主机的公钥。



最后把node1上的authorized_keys,再复制回node2和node3上。

scp /home/hadoop/.ssh/authorized_key root@node2:/home/hadoop/.ssh



4.)设置文件权限并测试。

chmod 644 authorized_keys 此步非常重要,如果权限不对,则无密码访问不成功。



测试三台主机之间无密码互访,搞定。

171138537.jpg




6.安装hadoop


将当前用户切换到hadoop用户,如果集群内机器的环境完全一样,可以在一台机器上配置好,然后把配置好的软件即hadoop-0.20.203整个文件夹拷贝到其他机器的相同位置即可。 可以将Master上的Hadoop通过scp拷贝到每一个Slave相同的目录下,同时根据每一个Slave的Java_HOME 的不同修改其hadoop-env.sh 。


6.1)配置conf/hadoop-env.sh文件

切换到hadoop-1.2.1/conf目录下,添加JAVA_HOME路径

171135729.jpg



6.2)配置/conf/core-site.xml


171140155.jpg


fs.default.name是NameNode的URI。hdfs://主机名:端口/


hadoop.tmp.dir :Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,就删除此文件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。



6.3)配置/conf/mapred-site.xml


171142735.jpg


mapred.job.tracker是JobTracker的主机(或者IP)和端口。主机:端口。其中/home/hadoop/hadoop_home/var目录需要提前创建,并且注意用chown -R 命令来修改目录权限




6.4)配置/conf/hdfs-site.xml


171144235.jpg



dfs.name.dir是NameNode持久存储名字空间及事务日志的本地文件系统路径。 当这个值是一个逗号分割的目录列表时,nametable数据将会被复制到所有目录中做冗余备份。


dfs.replication是数据需要备份的数量,默认是3,如果此数大于集群的机器数会出错。


此处的name1和data1等目录不能提前创建,如果提前创建会出问题。


6.5)配置master和slaves主从节点


配置conf/masters和conf/slaves来设置主从结点,注意最好使用主机名,并且保证机器之间通过主机名可以互相访问,每个主机名一行。

vi masters

输入:

node1


171148461.jpg






vi slaves

输入:

node2

node3

171150458.jpg

配置结束,把配置好的hadoop文件夹拷贝到另外两台主机中,并且保证上面的配置对于其他机器而言正确,

scp -r /home/hadoop/hadoop-1.2.1 root@node2:/home/hadoop/


#输入node2的root密码即可传输,如果java安装路径不一样,需要修改conf/hadoop-env.sh



四、Hadoop启动与测试



1、)格式化一个新的分布式文件系统


hadoop namenode -format #格式化文件系统


如下图(我的hadoop已经使用,不想重新格式化选择了No)

171152450.jpg




2、)启动所有节点

/home/hadoop/hadoop-1.2.1/bin/start-all.sh


3、)查看集群的状态:

hadoop dfsadmin -report


171155281.jpg


4、)Hadoop测试

浏览NameNode和JobTracker的网络接口,它们的地址默认为:

NameNode - http://192.168.1.191:50070/

171157876.jpg

JobTracker - http://192.168.1.191:50030/



172819408.jpg


要想检查守护进程是否正在运行,可以使用 jps 命令(这是用于JVM 进程的ps 实用程序)。这个命令列出 5 个守护进程及其进程标识符。

172627243.jpg

将输入文件拷贝到分布式文件系统:

  1. bin/hadoop fs -mkdir input #创建input目录


  1. bin/hadoop fs -put conf/core-site.xml input #拷贝文件到input目录


  1. bin/hadoop jar hadoop-examples-1.2.1.jar grep input output 'dfs[a-z]' #使用Hadoop运行示例

171159561.jpg

到此为止,hadoop已经配置完成

五、Hadoop一些常用的操作命令

1、hdfs常用操作:

hadoop dfs -ls 列出HDFS下的文件

hadoop dfs -ls input 列出HDFS下某个文档中的文件

hadoop dfs -put 1.txt input/2.txt 上传文件到指定目录并且重新命名,只有所有的DataNode都接收完数据才算成功

hadoop dfs -get input/1.txt test.txt 从HDFS获取文件并且重新命名为test.txt,同put一样可操作文件也可操作目录

172543432.jpg

hadoop dfs -rmr out 删除指定文件从HDFS上

hadoop dfs -cat in/* 查看HDFS上in目录的内容

hadoop dfsadmin -report 查看HDFS的基本统计信息,结果如下

hadoop dfsadmin -safemode leave 退出安全模式

hadoop dfsadmin -safemode enter 进入安全模式

2、负载均衡

start-balancer.sh,可以使DataNode节点上选择策略重新平衡DataNode上的数据块的分布。


六.遇到的问题。

1) 执行jps时,找不到此命令。

答:这是由于jdk的环境没有配置好。

172509621.jpg

2)SSH无密码访问配置好之后,还是让输入密码?

答:文件权限问题。执行chmod 644 authorized_keys

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
对于计算机专业的学生而言,参加各类比赛能够带来多方面的益处,具体包括但不限于以下几点: 技能提升: 参与比赛促使学生深入学习和掌握计算机领域的专业知识与技能,如编程语言、算法设计、软件工程、网络安全等。 比赛通常涉及实际问题的解决,有助于将理论知识应用于实践中,增强问题解决能力。 实践经验: 大多数比赛都要求参赛者设计并实现解决方案,这提供了宝贵的动手操作机会,有助于积累项目经验。 实践经验对于计算机专业的学生尤为重要,因为雇主往往更青睐有实际项目背景的候选人。 团队合作: 许多比赛鼓励团队协作,这有助于培养学生的团队精神、沟通技巧和领导能力。 团队合作还能促进学生之间的知识共享和思维碰撞,有助于形成更全面的解决方案。 职业发展: 获奖经历可以显著增强简历的吸引力,为求职或继续深造提供有力支持。 某些比赛可能直接与企业合作,提供实习、工作机会或奖学金,为学生的职业生涯打开更多门路。 网络拓展: 比赛是结识同行业人才的好机会,可以帮助学生建立行业联系,这对于未来的职业发展非常重要。 奖金与荣誉: 许多比赛提供奖金或奖品,这不仅能给予学生经济上的奖励,还能增强其成就感和自信心。 荣誉证书或奖状可以证明学生的成就,对个人品牌建设有积极作用。 创新与研究: 参加比赛可以激发学生的创新思维,推动科研项目的开展,有时甚至能促成学术论文的发表。 个人成长: 在准备和参加比赛的过程中,学生将面临压力与挑战,这有助于培养良好的心理素质和抗压能力。 自我挑战和克服困难的经历对个人成长有着深远的影响。 综上所述,参加计算机领域的比赛对于学生来说是一个全面发展的平台,不仅可以提升专业技能,还能增强团队协作、沟通、解决问题的能力,并为未来的职业生涯奠定坚实的基础。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值