hadoop2.5.2的本地模式、伪分布式集群、分布式集群和HDFS系统的高可用的环境搭建

时间:2022-12-22 16:38:50

1.准备环境(JDK和Hadoop)

 
  
  1. $ tar -zxf hadoop-2.5.2.tar.gz -C /opt/app/
 
   
  1. // 卸载Linux自带java,安装jdk1.8,hive只支持1.7以上版本
  2. $ rpm -qa|grep java
  3. $ rpm -e --nodeps java的各项文件

2.环境配置

     在hadoop安装目录下的 etc/hadoop/hadoop-env.sh 配置一下环境

通过Notepad的Nppftp远程链接进行编辑
 
  
  1. $ vi /opt/app/etc/hadoop/hadoop-env.sh
 
  
  • 配置JDK环境
 
   
  1. # set to the root of your Java installation
  2. export JAVA_HOME=/usr/java/latest
 
  
  • 配置hadoop安装目录(此项可以不用高配置)
 
  
 
   
  1. # Assuming your installation directory is /usr/local/hadoop
  2. export HADOOP_PREFIX=/usr/local/hadoop

3.启动HDFS的三种模式(本地模式,伪分布,分布式)

3.1Local (Standalone) Mode 本地模式

 
 
 
 
通常作为一个Java使用,对于debug非常有用,演示实例统计程序
可以通过touch一个文件插入数据重新进行统计。
 
 
 
 
 
  
  1. # 创建一个input文件夹备份未修改过的xml文件
  2. $ mkdir input
  3. $ cp etc/hadoop/*.xml input
  4. # 执行hadoop 下的一个example的jar包
  5. $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar grep input output 'dfs[a-z.]+'
  6. # 查看输出结构
  7. $ cat output/*

3.2 Pseudo-Distributed Mode伪分布式模式

etc/hadoop/core-site.xml:
 
   
  1. <configuration>
  2. // 修改hdfs文件系统位置
  3. <property>
  4. <name>fs.defaultFS</name>
  5. <value>hdfs://localhost:9000</value>
  6. </property>
  7. // 配置hadoop临时文件夹位置,便于系统管理
  8. // 以后再执行bin/hdfs namenode -format 错误时,删除此文件目录下的dfs文件
  9. <property>
  10. <name>hadoop.tmp.dir</name>
  11. <value>/opt/app/hadoop-2.5.2/data/tmp</value>
  12. </property>
  13. </configuration>
etc/hadoop/hdfs-site.xml:
 
 
 
 
 
  
  1. <configuration>
  2. // 配置本地文件副本数
  3. <property>
  4. <name>dfs.replication</name>
  5. <value>1</value>
  6. </property>
  7. </configuration>
另外需要配置ssh无秘钥登录,方便每次各主机之间进行访问时
 
 
  1. $ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
  2. $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
  3. // 测试无秘钥登录是否成功
  4. $ ssh localhost
运行集群
- 格式化文件系统
 
   
  1. // 多次文件格式的时候,删除hadoop.tmp.dir的文件,防止报错  
  2. $ bin/hdfs namenode -format
- 启动hdfs
 
   
  1. // 配有SSH无秘钥启动的方式启动  
  2. $ sbin/start-dfs.sh
  3. // 也可以用一下方式启动
  4. $ sbin/hadoop-daemon.sh start namenode
  5. $ sbin/hadoop-daemon.sh start datanode
  6. $ sbin/hadoop-daemon.sh start secondarynode(在伪分布式集群中,没必要不启动)
- 启动hdfs以后hadoop将自动在 logs下创建日志
- 我么也可以在其WEB网页  查看NameNode信息: http://localhost:50070/
注意:若在Linux客户端通过JPS文件查看若存在进场50070无法打开的时,
应查看系统及Linucx虚拟机防火墙是否进行关闭
运行MapReduce任务
 
  
  1. $ bin/hdfs dfs -mkdir -p /user/huangxc/
  2. // 将本地文件上传到hdfs系统上
  3. $ bin/hdfs dfs -put etc/hadoop input user/huangxgc/
  4. $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar grep /user/huangxc/input /user/huangxc/inputoutput 'dfs[a-z.]+'
  5. // 将output文件下载到本地文件
  6. $ bin/hdfs dfs -get output output
  7. // 查看结果
  8. $ cat output/*
  9. $ bin/hdfs dfs -cat output/*
  10. // 关闭hdfs系统
  11. $ sbin/stop-dfs.sh

4.YARN on Single Node

- MapReduce运行在分布式的系统上。
     a mapred-env.sh 配置${JAVA_HOME}(可以不用配置)
       b.将 etc/hadoop/ mapred-site.xml.tmplate后缀去掉 etc/hadoop/mapred-site.xml
 
   
  1. <configuration>
  2. <property>
  3. <name>mapreduce.framework.name</name>
  4. <value>yarn</value>
  5. </property>
  6. </configuration>
c.etc/hadoop/yarn-env.xml:(可以不用配置)
 
    
  1. # some Java parameters
  2. export JAVA_HOME=/opt/modules/jdk1.8.0_121

d.etc/hadoop/yarn-site.xml:
 
   
 
   
  1. <configuration>
  2. <property>
  3. <name>yarn.nodemanager.aux-services</name>
  4. <value>mapreduce_shuffle</value>
  5. </property>
  6. <property>
  7. <name>yarn.resourcemanager.hostname</name>
  8. <value>hadoop.com</value>
  9. </property>
  10. </configuration>
运行YARN 
 
   
  1. # 运行yarn
  2. $ sbin/start-yarn.sh
  3. #运行mapreduce程序
  4. # 由于输出目录不能存在,所以要先将原输出目录和文件删除
  5. $ bin/hdfs -rm -R /user/huangxc/output
  6. $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.5.2.jar grep /user/huangxc/input /user/huangxc/output 'dfs[a-z.]+'
  7. # 查看输出文件信息
  8. $ bin/hdfs -dfs -cat /user/huangxc/output
  9. # 关闭yarn
  10. $ sbin/stop-yarn.sh
YARN的ResourceMananger同NameNode一样,有WEB界面:
----------------------------------------------------------------------------------------------------------------------------
5.搭建分布式集群操作
- 规划分布式集群的集群与服务
   1.设置集群是基于前SingleNode的配置上进行配置
   2.集群采用使用三台虚拟机进行搭建,主机地址分别为hadoo.com、hadoop02.com、hadoop03.com,集群IP地址设置在同一网段
   3.确保每台虚拟机防火墙均进行了关闭,后面很多路由会无法连接报错
分布式集群机群规划
 hadoop.com    hadoop02.com    hadoop03.com   配置文件
HDFS系统 hadoop-env.shcore-site.xmlhdfs-site.xmlslaves
NameNode    
DataNode DataNode DataNode
    SeconaryNameNode
YARN系统 yarn-env.shyarn-site.shslaves
  RescourceMannager  
nodeManager NodeManager NodeManager
MapReduce系统 mapred-env.shmarred-site.xml
JobHistoryServer    

5.1 HDFS系统配置

 
 
  1. hadoop-env.sh 配置&{JAVA_HOME}jdk路径(上边已配置)
  2. core-site.xml 配置hdfs地址  fs.defaultFS、临时文件路径hadoop.tmp.dir(上边已配置)  
  3. etc/hadoop/core-site.xml
  4. hdfs-site.xml 配置副本数 默认为3 (删除原单节点配置,或将value改为3)
  5. 配置SeconaryNameNode地址
     
         
    1. <property>
    2. <name>dfs.namenode.secondary.http-address</name>
    3. <value>hadoop03.com:50090</value>
    4. </property>
  6. etc/hadoop/slaves
 
 
 
   
  1. hadoop.com
  2. hadoop02.com
  3. hadoop03.com

5.2 YARN系统配置

  1. - yarn-env.sh jdk路径
  2. - yarn-site.sh
 
   
  1. <property>
  2. <name>yarn.nodemanager.aux-services</name>
  3. <value>mapreduce_shuffle</value>
  4. </property>
  5. // ResourceManager地址
  6. <property>
  7. <name>yarn.resourcemanager.hostname</name>
  8. <value>hadoop02.com</value>
  9. </property>

slaves 同上公用slaves文件

5.3 MapReduce系统配置
 
 
  1. marred-site.xml jdk路径
  2. marred-site.xml 、(mapreduce.framework.name单节点已经配置)
 
   
  1. <property>
  2. <name>mapreduce.jobhistory.address</name>
  3. <value>hadoop.com:10020</value>
  4. </property>
  5. <property>
  6. <name>mapreduce.jobhistory.webapp.address</name>
  7. <value>hadoop.com:19888.</value>
  8. </property>
5.4 将hadoop.com的分发给其他主机

- 配置不同主机之间的无秘钥登录,避免访问重复登录输入密码:
 
   
  1. ssh-copy-id hadoop02.com
  2. ssh-copy-id hadoop03.com
 - 将文件分发给不同的主机
 
   
  1. $ scp -r hadoop2.5.2/ huangxc@hadoop02.com:/opt/app/
  2. $ scp -r hadoop2.5.2/ huangxc@hadoop03.com:/opt/app/
6.运行集群
   6.1 启动HDFS 准备文件系统
 
    
  1. $ bin/hdfs dfs namenode -format
  2. $ sbin/strat-dfs.sh
  3. // 启动yarn时,因为resourcemannager在hadoop02.com上运行,所以在hadoop02.com上运行启动,不易报错
  4. $ sbin/strat-yarn.sh

7 .HDFS High Availability Using the Quorum Journal Manager  高可用性的HDFS 

在搭建高可用性的HDFS之前,需要搭建apache的协作框架 。 ZooKeeper™安装并按照如下配置conf/zoo.cfg。zookeeper.最好单数个
并且在dataDir目录下创建myid并填上所属Server的编号数字

Running Replicated ZooKeeper


 
    
  1. tickTime = 2000
  2. dataDir = / var / lib / zookeeper
  3. clientPort = 2181
  4. initLimit = 5
  5. syncLimit = 2
  6. server.1 = hadoop.com28883888
  7. server.2 =hadoop02.com28883888
  8. server.3 = hadoop03.com28883888
  hdfs-site.xml  

高可用的HDFS系统规划
 hadoop.com    hadoop02.com    hadoop03.com   配置文件
HDFS系统 hadoop-env.shcore-site.xmlhdfs-site.xmlslaves
NameNode NameNode  
DataNode DataNode DataNode
journalnode journalnode journalnode
ZooKeeper
zookeeper zookeeper zookeeper zoo.cfg

 
    
  1. <property>
  2. <name>dfs.nameservices</name>
  3. <value>ns1</value>
  4. </property>
  5. <property>
  6. <name>dfs.ha.namenodes.mycluster</name>
  7. <value>nn1,nn2</value>
  8. </property>
  9. <property>
  10. <name>dfs.namenode.http-address.mycluster.nn1</name>
  11. <value>machine1.example.com:50070</value>
  12. </property>
  13. <property>
  14. <name>dfs.namenode.http-address.mycluster.nn2</name>
  15. <value>machine2.example.com:50070</value>
  16. </property>
  17. <property>
  18. <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  19. <value>machine1.example.com:8020</value>
  20. </property>
  21. <property>
  22. <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  23. <value>machine2.example.com:8020</value>
  24. </property>
  25. <property>
  26. <name>dfs.namenode.http-address.mycluster.nn1</name>
  27. <value>machine1.example.com:50070</value>
  28. </property>
  29. <property>
  30. <name>dfs.namenode.http-address.mycluster.nn2</name>
  31. <value>machine2.example.com:50070</value>
  32. </property>
  33. <property>
  34. <name>dfs.namenode.shared.edits.dir</name>
  35. <value>qjournal://node1.example.com:8485;node2.example.com:8485;node3.example.com:8485/mycluster</value>
  36. </property>
  37. <name>dfs.client.failover.proxy.provider.mycluster</name>
  38. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  39. </property>
  40. property>
  41. <name>dfs.ha.fencing.methods</name>
  42. <value>sshfence</value>
  43. </property>
  44. <property>
  45. <name>dfs.ha.fencing.ssh.private-key-files</name>
  46. <value>/home/exampleuser/.ssh/id_rsa</value>
  47. </property>
  48. <property>
  49. <name>dfs.journalnode.edits.dir</name>
  50. <value>/path/to/journal/node/local/data</value>
  51. </property>
  core-site.xml
 
   
  1. <property>
  2. <name>fs.defaultFS</name>
  3. <value>hdfs://ns1</value>
  4. </property>


QJM HA 启动
1.在各个JournalNode 节点上,输入以下命令启动journalnode服务:
 
   
  1. sbin/hadoop-daemon.sh start namenode
2.在 nn1 上,对其hdfs进行格式化,并启动namenode:
 
   
  1. sbin/hadoop-daemon.sh start namenode
3.在nn2 上,同步nn1的元数据信息
 
   
  1. bin/hdfs namenode -bootstrapStandby
4.启动nn2
 
   
  1. sbin/hadoop-daemon.sh start datanode
5.将nn1切换为Active状态
 
   
  1. bin/hdfs haadmin -transitionToActive nn1
6.在nn1上启动素有datanode
 
   
  1. sbin/hadoop-daemon.sh start datanode