设为首页 收藏本站
查看: 1003|回复: 0

[经验分享] Hadoop集群搭建

[复制链接]
累计签到:1 天
连续签到:1 天
发表于 2016-2-25 09:24:29 | 显示全部楼层 |阅读模式
Hadoop集群搭建
Hadoop是Apache软件基金会旗下的一个开源分布式计算平台。以Hadoop分布式文件系统(HDFS,Hadoop Distributed Filesystem)和MapReduce(Google MapReduce的开源实现)为核心的Hadoop为用户提供了系统底层细节透明的分布式基础架构。
对于Hadoop的集群来讲,可以分成两大类角色:Master和Salve。一个HDFS集群是由一个NameNode和若干个DataNode组成的。其中NameNode作为主服务器,管理文件系统的命名空间和客户端对文件系统的访问操作;集群中的DataNode管理存储的数据。MapReduce框架是由一个单独运行在主节点上的JobTracker和运行在每个集群从节点的TaskTracker共同组成的。主节点负责调度构成一个作业的所有任务,这些任务分布在不同的从节点上。主节点监控它们的执行情况,并且重新执行之前的失败任务;从节点仅负责由主节点指派的任务。当一个Job被提交时,JobTracker接收到提交作业和配置信息之后,就会将配置信息等分发给从节点,同时调度任务并监控TaskTracker的执行。
从上面的介绍可以看出,HDFS和MapReduce共同组成了Hadoop分布式系统体系结构的核心。HDFS在集群上实现分布式文件系统,MapReduce在集群上实现了分布式计算和任务处理。HDFS在MapReduce任务处理过程中提供了文件操作和存储等支持,MapReduce在HDFS的基础上实现了任务的分发、跟踪、执行等工作,并收集结果,二者相互作用,完成了Hadoop分布式集群的主要任务。

具体安装步骤如下:
一、安装Linux Centos6.7操作系统,配置网络信息如下,具体步骤略
配置host主机名
[iyunv@master ~]# vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=master #另外两台是slave1和slave2
NTPSERVERARGS=iburst
需要重启后才能生效
临时更改主机名的方法是
[iyunv@master ~]# hostname master
[iyunv@master ~]# bash

配置IP
[iyunv@master ~]# vi /etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
HWADDR=00:0C:29:72:15:45
TYPE=Ethernet
UUID=9c82314b-32ef-4e1f-af8d-540310fd74c6
ONBOOT=yes
NM_CONTROLLED=yes
BOOTPROTO=static
IPADDR=192.168.101.230
NETMASK=255.255.255.0
GATEWAY=192.168.101.254
DNS1=192.168.101.254
DNS2=192.168.100.241
DNS2=8.8.8.8

机器分部信息如下:
192.168.101.230 master

192.168.101.231 slave1
192.168.101.230 slave2

二、添加3台虚拟机hosts文件
slave1和slave2都要添加,hosts文件的作用,它主要用于确定每个结点的IP地址,方便后续master结点能快速查到并访问各个结点
[iyunv@master ~]# vim /etc/hosts
#127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
#::1         localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.101.230 master
192.168.101.231 slave1
192.168.101.232 slave2

三、建立hadoop运行账号密码hadoop,三台机器上都需要建立
[iyunv@master ~]# useradd hadoop
[iyunv@master ~]# passwd hadoop
更改用户 hadoop 的密码 。
新的 密码:
无效的密码: 它基于字典单词
无效的密码: 过于简单
重新输入新的 密码:
passwd: 所有的身份验证令牌已经成功更新

赋予hadoop用户执行所有命令的权限 ,三台主机上都添加,之后使用sudo + 命令就增加权限了
[iyunv@master ~]# vim /etc/sudoers
root    ALL=(ALL)        ALL
hadoop  ALL=(ALL)ALL

四、 配置ssh免密码登录
Hadoop在运行中需要远程管理Hadoop守护进程,在Hadoop启动之后,NameNode是通过SSH来启动和停止各个DateNode上的守护进程,这就必须在主从节点之间实现无密码登录执行指令,所以这里使用SSH无密码公钥认证方式,这样NameNode使用SSH无密码登录并启动DateNode进程,同样原理DateNode上也能使用SSH无密码登录到NameNode

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

(2)确认三台机器安装好OpenSSH的Server和Client
[iyunv@master ~]# rpm -qa | grep openssh
openssh-server-5.3p1-112.el6_7.i686
openssh-askpass-5.3p1-112.el6_7.i686
openssh-5.3p1-112.el6_7.i686
openssh-clients-5.3p1-112.el6_7.i686
[iyunv@master ~]# rpm -qa | grep  rsync
rsync-3.0.6-12.el6.i686

如果没有安装,使用如下命令进行安装
yum install -y ssh
yum install -y rsync
service sshd restart

确认三台机器的sshd配置文件允许无密码登录
[hadoop@master root]$ vi /etc/ssh/sshd_config
去掉注释符号“#”:
RSAAuthentication yes
PubkeyAuthentication yes
AuthorizedKeysFile      .ssh/authorized_keys

(2)hadoop用户Master机器上生成dsa加密方式的密码对,注意:使用hadoop用户登录虚拟机
[hadoop@master root]$ whoami
hadoop
生成密钥对,-t 加密类型dsa -P原密码空,-f指定加密后文件keyfile导入到.ssh/id_dsa
[hadoop@master root]$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa  

把公钥文件加入到验证文件中
[hadoop@master root]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

修改权限
[hadoop@master ~]$ chomod 700 ~/.ssh
[hadoop@master root]$ chmod 600 ~/.ssh/authorized_keys

测试ssh无密码登录

[hadoop@master root]$ ssh localhost  #这里不需要输入密码即可直接登录
Last login: Wed Feb 24 11:50:14 2016 from localhost

(3)拷贝id_dsa.pub到slave并追加到authorized_keys中
拷贝id_dsa.pub到slave1上/home/hadoop/目录下
[hadoop@master ~]$ scp ~/.ssh/id_dsa.pub hadoop@slave1:/home/hadoop/
hadoop@192.168.101.231's password:
id_dsa.pub                                    100%  603     0.6KB/s   00:00
相同方法拷贝到slave2上,略

hadoop用户首先在两台slave上新建/home/hadoop/.ssh文件
[hadoop@slave1 root]$ mkdir ~/.ssh
[hadoop@slave2 root]$ ls -la ~/
drwxrwxr-x   2 hadoop hadoop 4096 2月  24 12:07 .ssh
[hadoop@slave1 ~]$ pwd;ls
/home/hadoop
id_dsa.pub

(4)追加公钥id_dsa.pub内容到authorized_keys中
[hadoop@slave1 ~]$ cat ~/id_dsa.pub >> ~/.ssh/authorized_keys
[hadoop@slave2 ~]$ cat ~/id_dsa.pub >> ~/.ssh/authorized_keys

修改文件权限

[hadoop@slave1 ~]$ chomod 700 ~/.ssh
[hadoop@slave1 ~]$ chmod 600 ~/.ssh/authorized_keys
同样修改slave2机器上.ssh和.ssh/quthorized_key的权限

测试master登录slave机器,可以免密码直接登录了

[hadoop@master ~]$ ssh slave1
Last login: Wed Feb 24 13:02:07 2016 from master

到此,hadoop用户可以在master机器上使用ssh免密码登录slave1和slave2,注意,现在需要在slave1和slave2上执行上面的操作,让用户hadoop使用ssh免密码密钥登录master,具体配置省略,最终三台虚拟机之前全部可以通过密钥免密码登录


五、安装java


六、下载并解压hadoop安装包

1、下载hadoop2.6安装包

[hadoop@master local]# cd /usr/local/src/
[hadoop@master src]# sudo wget http://mirror.bit.edu.cn/apache/ ... hadoop-2.6.0.tar.gz

2、解压hadoop2.6,拷贝hadoop2.6到/usr/local目录下
[hadoop@master src]#sudo tar -zxvf hadoop-2.6.0.tar.gz
[hadoop@master src]# ls
hadoop-2.6.0   
[hadoop@master src]# mv hadoop-2.6.0 /usr/local/
[hadoop@master local]$ cd /usr/local/hadoop-2.6.0/

修改hadoop文件夹的属主和属组
[hadoop@master local]$ sudo chown -R hadoop:hadoop hadoop-2.6.0/

七、修改hadoop的配置文件
1、配置之前,先在本地文件系统创建以下文件夹:/hadoop/tmp、/dfs/data、/dfs/name
[hadoop@master local]$ cd /usr/local/hadoop/
[hadoop@master hadoop-2.6.0]$ mkdir tmp
[hadoop@master hadoop-2.6.0]$ mkdir -p dfs/data
[hadoop@master hadoop-2.6.0]$ mkdir dfs/name

2、进去hadoop配置文件目录,修改配置文件
主要涉及的配置文件有7个:都在/hadoop-2.6.0/etc/hadoop文件夹下
hadoop-2.6.0/etc/hadoop/hadoop-env.sh
hadoop-2.6.0/etc/hadoop/yarn-env.sh
hadoop-2.6.0/etc/hadoop/slaves
hadoop-2.6.0/etc/hadoop/core-site.xml
hadoop-2.6.0/etc/hadoop/hdfs-site.xml
hadoop-2.6.0/etc/hadoop/mapred-site.xml
hadoop-2.6.0/etc/hadoop/yarn-site.xml
[hadoop@master hadoop-2.6.0]$ cd etc/hadoop/
[hadoop@master hadoop]$ ls
capacity-scheduler.xml      httpfs-env.sh            mapred-env.sh
configuration.xsl           httpfs-log4j.properties  mapred-queues.xml.template
container-executor.cfg      httpfs-signature.secret  mapred-site.xml.template
core-site.xml               httpfs-site.xml          slaves
hadoop-env.cmd              kms-acls.xml             ssl-client.xml.example
hadoop-env.sh               kms-env.sh               ssl-server.xml.example
hadoop-metrics2.properties  kms-log4j.properties     yarn-env.cmd
hadoop-metrics.properties   kms-site.xml             yarn-env.sh
hadoop-policy.xml           log4j.properties         yarn-site.xml
hdfs-site.xml               mapred-env.cmd

(1)配置 hadoop-env.sh文件-->修改JAVA_HOME
[hadoop@master hadoop]$ sudo vim hadoop-env.sh
JAVA_HOME=/usr/local/jdk1.8.0_20/

(2)配置 yarn-env.sh 文件,修改JAVA_HOME
[hadoop@master hadoop]$ sudo vim yarn-env.sh
# some Java parameters
export JAVA_HOME=/usr/local/jdk1.8.0_20/

(3)配置slaves文件,增加slave节点
[hadoop@master hadoop]$ sudo vim slaves
localhost
slave1
slave2

(4)配置 core-site.xml文件,增加hadoop核心配置(hdfs文件端口是9000、file:/usr/local/hadoop-2.6.0/tmp)

[hadoop@master hadoop]# vim core-site.xml

<configuration>
<property>
  <name>fs.defaultFS</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:/usr/local/hadoop-2.6.0/tmp</value>
  <description>Abasefor other temporary directories.</description>
</property>
<property>
  <name>hadoop.proxyuser.spark.hosts</name>
  <value>*</value>
</property>
<property>
  <name>hadoop.proxyuser.spark.groups</name>
  <value>*</value>
</property>
</configuration>

(5)配置  hdfs-site.xml 文件,增加hdfs配置信息(namenode、datanode端口和目录位置)

[hadoop@master hadoop]# vim 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>file:/usr/local/hadoop-2.6.0/dfs/name</value>
</property>
<property>
  <name>dfs.datanode.data.dir</name>
  <value>file:/usr/local/hadoop-2.6.0/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 文件,增加mapreduce配置(使用yarn框架、jobhistory使用地址以及web地址)

[hadoop@master hadoop]# vim 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>


(7)配置   yarn-site.xml  文件,增加yarn功能

[hadoop@master hadoop]# vim 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>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:8035</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>


3、将配置好的hadoop文件copy到另一台slave机器上

scp -r /usr/local/hadoop-2.6.0/ hadoop@slave1:/usr/local/

确认slave机器上的/hadoop-2.6.0文件夹和子文件夹属主和属组都是hadoop,否则使用下面的命令修改

[hadoop@slave1 local]$ sudo chown -R hadoop:hadoop /usr/local/hadoop-2.6.0/


八、验证hadoop

1、格式化namenode:

[hadoop@master hadoop-2.6.0]$ cd /usr/local/hadoop-2.6.0/
[hadoop@master hadoop-2.6.0]$ ./bin/hdfs namenode -format

[hadoop@master hadoop-2.6.0]$ ssh slave1
Last login: Wed Feb 24 20:53:43 2016 from master
[hadoop@slave1 ~]$ cd /usr/local/hadoop-2.6.0/

[hadoop@slave1 hadoop-2.6.0]$ ./bin/hdfs namenode -format

[hadoop@master hadoop-2.6.0]$ ssh slave2
Last login: Wed Feb 24 21:05:35 2016 from master
[hadoop@slave2 ~]$ cd /usr/local/hadoop-2.6.0/
[hadoop@slave2 hadoop-2.6.0]$ ./bin/hdfs namenode -format

2、启动hdfs:

./sbin/start-dfs.sh

[spark@S1PA11 hadoop-2.6.0]$ jps
22230 Master
30889 Jps
22478 Worker
30498 NameNode
30733 SecondaryNameNode
19781 ResourceManager

3、停止hdfs:

[spark@S1PA11 hadoop-2.6.0]$./sbin/stop-dfs.sh
15/01/05 16:40:28 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Stopping namenodes on [S1PA11]
S1PA11: stopping namenode
S1PA222: stopping datanode
Stopping secondary namenodes [S1PA11]
S1PA11: stopping secondarynamenode
15/01/05 16:40:48 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
[spark@S1PA11 hadoop-2.6.0]$ jps
30336 Jps
22230 Master
22478 Worker
19781 ResourceManager

4、启动yarn:

[spark@S1PA11 hadoop-2.6.0]$./sbin/start-yarn.sh
starting yarn daemons
starting resourcemanager, logging to /home/spark/opt/hadoop-2.6.0/logs/yarn-spark-resourcemanager-S1PA11.out
S1PA222: starting nodemanager, logging to /home/spark/opt/hadoop-2.6.0/logs/yarn-spark-nodemanager-S1PA222.out
[spark@S1PA11 hadoop-2.6.0]$ jps
31233 ResourceManager
22230 Master
22478 Worker
30498 NameNode
30733 SecondaryNameNode
31503 Jps

5、停止yarn:

[spark@S1PA11 hadoop-2.6.0]$ ./sbin/stop-yarn.sh
stopping yarn daemons
stopping resourcemanager
S1PA222: stopping nodemanager
no proxyserver to stop
[spark@S1PA11 hadoop-2.6.0]$ jps
31167 Jps
22230 Master
22478 Worker
30498 NameNode
30733 SecondaryNameNode

6、查看集群状态:

[spark@S1PA11 hadoop-2.6.0]$ ./bin/hdfs dfsadmin -report
15/01/05 16:44:50 WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable
Configured Capacity: 52101857280 (48.52 GB)
Present Capacity: 45749510144 (42.61 GB)
DFS Remaining: 45748686848 (42.61 GB)
DFS Used: 823296 (804 KB)
DFS Used%: 0.00%
Under replicated blocks: 10
Blocks with corrupt replicas: 0
Missing blocks: 0


-------------------------------------------------
Live datanodes (1):


Name: 10.126.45.56:50010 (S1PA222)
Hostname: S1PA209
Decommission Status : Normal
Configured Capacity: 52101857280 (48.52 GB)
DFS Used: 823296 (804 KB)
Non DFS Used: 6352347136 (5.92 GB)
DFS Remaining: 45748686848 (42.61 GB)
DFS Used%: 0.00%
DFS Remaining%: 87.81%
Configured Cache Capacity: 0 (0 B)
Cache Used: 0 (0 B)
Cache Remaining: 0 (0 B)
Cache Used%: 100.00%
Cache Remaining%: 0.00%
Xceivers: 1
Last contact: Mon Jan 05 16:44:50 CST 2015

7、查看hdfs:http://10.58.44.47:50070/





六、            配置namenode,修改site文件

七、            配置hadoop-env.sh文件

八、            配置masters和slaves文件

九、            向各节点复制hadoop

十、            格式化namenode

十一、            启动hadoop

十二、      用jps检验各后台进程是否成功启动

十三、      通过网站查看集群情况




运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-182516-1-1.html 上篇帖子: Hadoop常用的操作命令 下篇帖子: Hadoop2.6运行wordcount Google 服务器 基金会 客户端 监控
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表