一 完全分布式集群搭建

Hadoop官方地址:http://hadoop.apache.org/

1  准备3台客户机

1.2 关闭防火墙,设置静态IP,主机名

关闭防火墙,设置静态IP,主机名此处略,参考  Linux之CentOS7.5安装及克隆

1.2 修改host文件

我们希望三个主机之间都能够使用主机名称的方式相互访问而不是IP,我们需要在hosts中配置其他主机的host。因此我们在主机的/etc/hosts下均进行如下配置:

  1. [root@node21 ~]# vi /etc/hosts
  2. 配置主机host
  3. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  4. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  5. 192.168.100.21 node21
  6. 192.168.100.22 node22
  7. 192.168.100.23 node23
  8. 将配置发送到其他主机(同时在其他主机上配置)
  9. [root@node21 ~]# scp -r /etc/hosts root@node22:/etc/
  10. [root@node21 ~]# scp -r /etc/hosts root@node23:/etc/
  11. 测试
  12. [root@node21 ~]# ping node21
  13. [root@node21 ~]# ping node22
  14. [root@node21 ~]# ping node23

1.3 添加用户账号

  1. 在所有的主机下均建立一个账号admin用来运行hadoop ,并将其添加至sudoers
  2. [root@node21 ~]# useradd admin 添加用户通过手动输入修改密码
  3. [root@node21 ~]# passwd admin 更改用户 admin 的密码
  4. 123456 passwd 所有的身份验证令牌已经成功更新。
  5. 设置admin用户具有root权限 修改 /etc/sudoers 文件,找到下面一行,在root下面添加一行,如下所示:
  6. [root@node21 ~]# visudo
  7. ## Allow root to run any commands anywhere
  8. root ALL=(ALL) ALL
  9. admin ALL=(ALL) ALL
  10. 修改完毕 wq 保存退出,现在可以用admin帐号登录,然后用命令 su - ,切换用户即可获得root权限进行操作。 

1.4 /opt目录下创建文件夹

  1. 1)在root用户下创建modulesoftware文件夹
  2. [root@node21 opt]# mkdir module
  3. [root@node21 opt]# mkdir software
  4. 2)修改modulesoftware文件夹的所有者
  5. [root@node21 opt]# chown admin:admin module
  6. [root@node21 opt]# chown admin:admin software
  7. 3)查看modulesoftware文件夹的所有者
  8. [root@node21 opt]# ll
  9. total 0
  10. drwxr-xr-x. 5 admin admin 64 May 27 00:24 module
  11. drwxr-xr-x. 2 admin admin 267 May 26 11:56 software

2   安装配置jdk1.8

  1. [deng@node21 ~]# rpm -qa|grep java #查询是否安装java软件:
  2. [deng@node21 ~]# rpm -e nodeps 软件包 #如果安装的版本低于1.7,卸载该jdk
  3. 在线安装 wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn/java/jdk/8u144-b01/090f390dda5b47b9b721c7dfaa008135/jdk-8u144-linux-x64.tar.gz
  4. 这里使用本地下载然后 xftp上传到 /opt/software/
  5. [root@node21 software]# tar zxvf jdk-8u171-linux-x64.tar.gz -C /opt/module/
  6. [root@node21 module]# mv jdk1.8.0_171 jdk1.8
  7. 设置JAVA_HOME
  8. vi /etc/profile
  9. export JAVA_HOME=/opt/module/jdk1.8
  10. export PATH=$PATH:$JAVA_HOME/bin:$JAVA_HOME/sbin
  11. source /etc/profile
  12. 向其他节点复制jdk
  13. [root@node21 ~]# scp -r /opt/module/jdk1.8 root@node22:`pwd`
  14. [root@node21 ~]# scp -r /opt/module/jdk1.8 root@node23:`pwd`
  15. 配置各个主机下jdk的环境变量,由于我的电脑上linux都是新安装的,环境变量相同,因此直接复制到了其他主机上。如果不同的主机的环境变量不同,请手动设置
  16. [root@node21 ~]# scp /etc/profile root@node22:/etc/
  17. [root@node21 ~]# scp /etc/profile root@node23:/etc/
  18. 在每个主机上都重新编译一下/etc/profile
  19. [root@node21]# source /etc/profile
  20. 测试 java -version

3   安装hadoop集群

3.1 集群部署规划

节点名称  NN1  NN2  DN  RM  NM
node21 NameNode     DataNode   NodeManager
node22   SecondaryNameNode DataNode ResourceManager NodeManager
node23     DataNode   NodeManager

3.2 设置SSH免密钥

关于ssh免密码的设置,要求每两台主机之间设置免密码,自己的主机与自己的主机之间也要求设置免密码。 这项操作可以在admin用户下执行,执行完毕公钥在/home/admin/.ssh/id_rsa.pub

  1. [admin@node21 ~]# ssh-keygen -t rsa
  2. [admin@node21 ~]# ssh-copy-id node21
  3. [admin@node21 ~]# ssh-copy-id node22
  4. [admin@node21 ~]# ssh-copy-id node23

node1与node2为namenode节点要相互免秘钥   HDFS的HA

  1. [admin@node22 ~]# ssh-keygen -t rsa
  2. [admin@node22 ~]# ssh-copy-id node22
  3. [admin@node22 ~]# ssh-copy-id node21
  4. [admin@node22 ~]# ssh-copy-id node23

node2与node3为yarn节点要相互免秘钥  YARN的HA

  1. [admin@node23 ~]# ssh-keygen -t rsa
  2. [admin@node23 ~]# ssh-copy-id node23
  3. [admin@node23 ~]# ssh-copy-id node21
  4. [admin@node23 ~]# ssh-copy-id node22 

3.3  解压安装hadoop

  1. [admin@node21 software]# tar zxvf hadoop-2.7.6.tar.gz -C /opt/module/

4   配置hadoop集群

注意:配置文件在hadoop2.7.6/etc/hadoop/下

4.1 修改core-site.xml

  1. [admin@node21 hadoop]$ vi core-site.xml
  2. <configuration>
  3. <!-- 指定HDFSNameNode的地址 -->
  4. <property>
  5. <name>fs.defaultFS</name>
  6. <value>hdfs://node21:9000</value>
  7. </property>
  8. <!-- 指定hadoop运行时产生文件的存储目录 -->
  9. <property>
  10. <name>hadoop.tmp.dir</name>
  11. <value>/opt/module/hadoop-2.7.6/data/full/tmp</value>
  12. </property>
  13. </configuration>

4.2 修改hadoop-env.sh

  1. [admin@node21 hadoop]$ vi hadoop-env.sh
  2. 修改 export JAVA_HOME=/opt/module/jdk1.8

4.3 修改hdfs-site.xml

  1. [admin@node21 hadoop]$ vi hdfs-site.xml
  2. <configuration>
  3. <!-- 设置dfs副本数,不设置默认是3 -->
  4. <property>
  5. <name>dfs.replication</name>
  6. <value>2</value>
  7. </property>
  8. <!-- 设置secondname的端口 -->
  9. <property>
  10. <name>dfs.namenode.secondary.http-address</name>
  11. <value>node22:50090</value>
  12. </property>
  13. </configuration>

4.4 修改slaves

  1. [admin@node21 hadoop]$ vi slaves
  2. node21
  3. node22
  4. node23

4.5 修改mapred-env.sh

  1. [admin@node21 hadoop]$ vi mapred-env.sh
  2. 修改 export JAVA_HOME=/opt/module/jdk1.8

4.6 修改mapred-site.xml

  1. [admin@node21 hadoop]# mv mapred-site.xml.template mapred-site.xml
  2. [admin@node21 hadoop]$ vi mapred-site.xml
  3. <configuration>
  4. <!-- 指定mr运行在yarn -->
  5. <property>
  6. <name>mapreduce.framework.name</name>
  7. <value>yarn</value>
  8. </property>
  9. </configuration>

4.7 修改yarn-env.sh

  1. [admin@node21 hadoop]$ vi yarn-env.sh
  2. 修改 export JAVA_HOME=/opt/module/jdk1.8

4.8 修改yarn-site.xml

  1. [admin@node21 hadoop]$ vi yarn-site.xml
  2. <configuration>
  3. <!-- reducer获取数据的方式 -->
  4. <property>
  5. <name>yarn.nodemanager.aux-services</name>
  6. <value>mapreduce_shuffle</value>
  7. </property>
  8. <!-- 指定YARNResourceManager的地址 -->
  9. <property>
  10. <name>yarn.resourcemanager.hostname</name>
  11. <value>node22</value>
  12. </property>
  13. </configuration>

4.9 分发hadoop到节点

  1. [admin@node21 module]# scp -r hadoop-2.7.6/ admin@node22:`pwd`
  2. [admin@node21 module]# scp -r hadoop-2.7.6/ admin@node23:`pwd`

4.10 配置环境变量

  1. [admin@node21 ~]$ sudo vi /etc/profile
  2. 末尾追加
  3. export HADOOP_HOME=/opt/module/hadoop-2.7.6
  4. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  5. 编译生效 source /etc/profile

5  启动验证集群

5.1 启动集群

 如果集群是第一次启动,需要格式化namenode

  1. [admin@node21 hadoop-2.7.6]$ hdfs namenode -format 

启动Hdfs:

  1. [admin@node21 ~]# start-dfs.sh
  2. Starting namenodes on [node21]
  3. node21: starting namenode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-namenode-node21.out
  4. node21: starting datanode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-datanode-node21.out
  5. node22: starting datanode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-datanode-node22.out
  6. node23: starting datanode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-datanode-node23.out
  7. Starting secondary namenodes [node22]
  8. node22: starting secondarynamenode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-root-secondarynamenode-node22.out

启动Yarn: 注意:Namenode和ResourceManger如果不是同一台机器,不能在NameNode上启动 yarn,应该在ResouceManager所在的机器上启动yarn。

  1. [admin@node22 ~]# start-yarn.sh
  2. starting yarn daemons
  3. starting resourcemanager, logging to /opt/module/hadoop-2.7.6/logs/yarn-root-resourcemanager-node22.out
  4. node21: starting nodemanager, logging to /opt/module/hadoop-2.7.6/logs/yarn-root-nodemanager-node21.out
  5. node23: starting nodemanager, logging to /opt/module/hadoop-2.7.6/logs/yarn-root-nodemanager-node23.out
  6. node22: starting nodemanager, logging to /opt/module/hadoop-2.7.6/logs/yarn-root-nodemanager-node22.out

jps查看进程

  1. [admin@node21 ~]# jps
  2. 1440 NameNode
  3. 1537 DataNode
  4. 1811 NodeManager
  5. 1912 Jps
  6. [admin@node22 ~]# jps
  7. 1730 Jps
  8. 1339 ResourceManager
  9. 1148 DataNode
  10. 1198 SecondaryNameNode
  11. 1439 NodeManager
  12. [admin@node23 ~]# jps
  13. 1362 Jps
  14. 1149 DataNode
  15. 1262 NodeManager

web页面访问

5.2 Hadoop启动停止方式

  1. 1)各个服务组件逐一启动
  2. 分别启动hdfs组件: hadoop-daemon.sh start|stop namenode|datanode|secondarynamenode
  3. 启动yarnyarn-daemon.sh start|stop resourcemanager|nodemanager
  4.  
  5. 2)各个模块分开启动(配置ssh是前提)常用
  6. start|stop-dfs.sh start|stop-yarn.sh
  7.  
  8. 3)全部启动(不建议使用)
  9. start|stop-all.sh

5.3 集群时间同步(略)

参考Ntp时间服务器与定时任务Crontab     https://www.cnblogs.com/frankdeng/p/9005691.html

二 完全分布式集群(HA)

1 环境准备

1.1 修改IP

1.2 修改主机名及主机名和IP地址的映射

1.3 关闭防火墙

1.4 ssh免密登录

1.5 安装JDK,配置环境变量

2集群规划

节点名称 NN JJN DN ZKFC ZK RM NM
node21 NameNode JournalNode DataNode ZKFC Zookeeper   NodeManager
node22 NameNode JournalNode DataNode ZKFC ZooKeeper ResourceManager NodeManager
node23   JournalNode DataNode   ZooKeeper ResourceManager NodeManager

3 安装Zookeeper集群

安装详解参考 : CentOS7.5搭建Zookeeper集群与命令行操作

4 安装配置Hadoop集群

4.1 解压安装Hadoop

解压 hadoop-2.7.6到/opt/module/目录下

  1. [admin@node21 software]# tar zxvf hadoop-2.7.6.tar.gz -C /opt/module/

4.2 配置Hadoop集群

配置文件都在/opt/module/hadoop-2.7.6/etc/hadoop/下

4.2.1 修改hadoop-env.sh mapred-env.sh ,yarn-env.sh 的JAVA环境变量

  1. export JAVA_HOME=/opt/module/jdk1.8

4.2.2 修改 core-site.xml

  1. [admin@node21 hadoop]$ vi core-site.xml
  2. <configuration>
  3. <!-- 把两个NameNode的地址组装成一个集群mycluster -->
  4. <property>
  5. <name>fs.defaultFS</name>
  6. <value>hdfs://mycluster</value>
  7. </property>
  8. <!-- 指定hadoop运行时产生文件的存储目录 -->
  9. <property>
  10. <name>hadoop.tmp.dir</name>
  11. <value>/opt/module/hadoop-2.7.6/data/ha/tmp</value>
  12. </property>
  13. <!-- 指定ZKFC故障自动切换转移 -->
  14. <property>
  15. <name>ha.zookeeper.quorum</name>
  16. <value>node21:2181,node22:2181,node23:2181</value>
  17. </property>
  18. </configuration> 

4.2.3 修改hdfs-site.xml

  1. [admin@node21 hadoop]$ vi hdfs-site.xml
  2. <configuration>
  3. <!-- 设置dfs副本数,默认3 -->
  4. <property>
  5. <name>dfs.replication</name>
  6. <value>2</value>
  7. </property>
  8. <!-- 完全分布式集群名称 -->
  9. <property>
  10. <name>dfs.nameservices</name>
  11. <value>mycluster</value>
  12. </property>
  13. <!-- 集群中NameNode节点都有哪些 -->
  14. <property>
  15. <name>dfs.ha.namenodes.mycluster</name>
  16. <value>nn1,nn2</value>
  17. </property>
  18. <!-- nn1RPC通信地址 -->
  19. <property>
  20. <name>dfs.namenode.rpc-address.mycluster.nn1</name>
  21. <value>node21:8020</value>
  22. </property>
  23. <!-- nn2RPC通信地址 -->
  24. <property>
  25. <name>dfs.namenode.rpc-address.mycluster.nn2</name>
  26. <value>node22:8020</value>
  27. </property>
  28. <!-- nn1http通信地址 -->
  29. <property>
  30. <name>dfs.namenode.http-address.mycluster.nn1</name>
  31. <value>node21:50070</value>
  32. </property>
  33. <!-- nn2http通信地址 -->
  34. <property>
  35. <name>dfs.namenode.http-address.mycluster.nn2</name>
  36. <value>node22:50070</value>
  37. </property>
  38. <!-- 指定NameNode元数据在JournalNode上的存放位置 -->
  39. <property>
  40. <name>dfs.namenode.shared.edits.dir</name>
  41. <value>qjournal://node21:8485;node22:8485;node23:8485/mycluster</value>
  42. </property>
  43. <!-- 配置隔离机制,即同一时刻只能有一台服务器对外响应 -->
  44. <property>
  45. <name>dfs.ha.fencing.methods</name>
  46. <value>sshfence</value>
  47. </property>
  48. <!-- 使用隔离机制时需要ssh无秘钥登录-->
  49. <property>
  50. <name>dfs.ha.fencing.ssh.private-key-files</name>
  51. <value>/home/admin/.ssh/id_rsa</value>
  52. </property>
  53. <!-- 声明journalnode服务器存储目录-->
  54. <property>
  55. <name>dfs.journalnode.edits.dir</name>
  56. <value>/opt/module/hadoop-2.7.6/data/ha/jn</value>
  57. </property>
  58. <!-- 关闭权限检查-->
  59. <property>
  60. <name>dfs.permissions.enable</name>
  61. <value>false</value>
  62. </property>
  63. <!-- 访问代理类:clientmyclusteractive配置失败自动切换实现方式-->
  64. <property>
  65. <name>dfs.client.failover.proxy.provider.mycluster</name>
  66. <value>org.apache.hadoop.hdfs.server.namenode.ha.ConfiguredFailoverProxyProvider</value>
  67. </property>
  68. <!-- 配置自动故障转移-->
  69. <property>
  70. <name>dfs.ha.automatic-failover.enabled</name>
  71. <value>true</value>
  72. </property> 
  73. <configuration>

4.2.4 修改mapred-site.xml

  1. [admin@node1 hadoop]# mv mapred-site.xml.template mapred-site.xml
  2. [admin@node1 hadoop]# vi mapred-site.xml
  3. <configuration>
  4. <!-- 指定mr框架为yarn方式 -->
  5.  <property>
  6.   <name>mapreduce.framework.name</name>
  7.   <value>yarn</value>
  8.  </property>
  9. <!-- 指定mr历史服务器主机,端口 -->
  10. <property>
  11. <name>mapreduce.jobhistory.address</name>
  12. <value>node21:10020</value>
  13. </property>
  14. <!-- 指定mr历史服务器WebUI主机,端口 -->
  15. <property>
  16. <name>mapreduce.jobhistory.webapp.address</name>
  17. <value>node21:19888</value>
  18. </property>
  19. <!-- 历史服务器的WEB UI上最多显示20000个历史的作业记录信息 -->
  20. <property>
  21. <name>mapreduce.jobhistory.joblist.cache.size</name>
  22. <value>20000</value>
  23. </property>
  24. <!--配置作业运行日志 -->
  25. <property>
  26. <name>mapreduce.jobhistory.done-dir</name>
  27. <value>${yarn.app.mapreduce.am.staging-dir}/history/done</value>
  28. </property>
  29. <property>
  30. <name>mapreduce.jobhistory.intermediate-done-dir</name>
  31. <value>${yarn.app.mapreduce.am.staging-dir}/history/done_intermediate</value>
  32. </property>
  33. <property>
  34. <name>yarn.app.mapreduce.am.staging-dir</name>
  35. <value>/tmp/hadoop-yarn/staging</value>
  36. </property>
  37. </configuration>

4.2.5 修改 slaves

  1. [admin@node21 hadoop]$ vi slaves
  2. node21
  3. node22
  4. node23

4.2.6 修改yarn-site.xml 

  1. [admin@node21 hadoop]$ vi yarn-site.xml
  2. <configuration>
  3. <!-- reducer获取数据的方式 -->
  4. <property>
  5. <name>yarn.nodemanager.aux-services</name>
  6. <value>mapreduce_shuffle</value>
  7. </property>
  8. <!--启用resourcemanager ha-->
  9. <property>
  10. <name>yarn.resourcemanager.ha.enabled</name>
  11. <value>true</value>
  12. </property>
  13. <!--声明两台resourcemanager的地址-->
  14. <property>
  15. <name>yarn.resourcemanager.cluster-id</name>
  16. <value>rmCluster</value>
  17. </property>
  18. <property>
  19. <name>yarn.resourcemanager.ha.rm-ids</name>
  20. <value>rm1,rm2</value>
  21. </property>
  22. <property>
  23. <name>yarn.resourcemanager.hostname.rm1</name>
  24. <value>node22</value>
  25. </property>
  26. <property>
  27. <name>yarn.resourcemanager.hostname.rm2</name>
  28. <value>node23</value>
  29. </property>
  30. <!--指定zookeeper集群的地址-->
  31. <property>
  32. <name>yarn.resourcemanager.zk-address</name>
  33. <value>node21:2181,node22:2181,node23:2181</value>
  34. </property>
  35. <!--启用自动恢复-->
  36. <property>
  37. <name>yarn.resourcemanager.recovery.enabled</name>
  38. <value>true</value>
  39. </property>
  40. <!--指定resourcemanager的状态信息存储在zookeeper集群-->
  41. <property>
  42. <name>yarn.resourcemanager.store.class</name>
  43. <value>org.apache.hadoop.yarn.server.resourcemanager.recovery.ZKRMStateStore</value>
  44. </property>
  45. </configuration>

4.2.6 拷贝hadoop到其他节点

  1. [admin@node21 module]# scp -r hadoop-2.7.6/ admin@node22:/opt/module/
  2. [admin@node21 module]# scp -r hadoop-2.7.6/ admin@node23:/opt/module/

4.2.7 配置Hadoop环境变量

  1. [admin@node21 ~]$ sudo vi /etc/profile
  2. 末尾追加
  3. export HADOOP_HOME=/opt/module/hadoop-2.7.6
  4. export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
  5. 编译生效 source /etc/profile

5 启动集群

1)在各个JournalNode节点上,输入以下命令启动journalnode服务:(zookeeper已启动)

  1. [admin@node21 ~]$ sbin/hadoop-daemon.sh start journalnode
  2. [admin@node22 ~]$ sbin/hadoop-daemon.sh start journalnode
  3. [admin@node23 ~]$ sbin/hadoop-daemon.sh start journalnode

启动Journalnde是为了创建/data/ha/jn,此时jn里面是空的

 

2)在[nn1]上,对namenode进行格式化,并启动:

  1. [admin@node21 ~]$ bin/hdfs namenode -format

格式化namenode,此时jn里面会产生集群ID等信息

另外,/data/ha/tmp也回产生如下信息

启动nn1上namenode

  1. [admin@node21 current]$ hadoop-daemon.sh start namenode
  2. starting namenode, logging to /opt/module/hadoop-2.7.6/logs/hadoop-admin-namenode-node21.out

3)在[nn2]上,同步nn1的元数据信息:

  1. [admin@node22 ~]$ bin/hdfs namenode -bootstrapStandby

4)启动[nn2]:

  1. [admin@node22 ~]$ sbin/hadoop-daemon.sh start namenode

5)在[nn1]上,启动所有datanode

  1. [admin@node21 ~]$ sbin/hadoop-daemons.sh start datanode

6)查看web页面此时显示

7)手动切换状态,在各个NameNode节点上启动DFSZK Failover Controller,先在哪台机器启动,哪个机器的NameNode就是Active NameNode

  1. [admin@node21 ~]$ sbin/hadoop-daemin.sh start zkfc
  2. [admin@node22 ~]$ sbin/hadoop-daemin.sh start zkfc

或者强制手动其中一个节点变为Active

  1. [admin@node21 data]$ hdfs haadmin -transitionToActive nn1 --forcemanual

Web页面查看

8)自动切换状态,需要初始化HA在Zookeeper中状态,停掉hdfs服务,随便找一台zookeeper的安装节点

  1. [admin@node21 current]$ bin/hdfs zkfc -formatZK

查看,此时会产生一个hadoop-ha的目录

  1. [root@node22 ~]# zkCli.sh  

启动hdfs服务,查看namenode状态

  1. [admin@node21 ~]$ sbin/start-hdfs.sh

9)验证

(1)将Active NameNode进程kill

kill -9 namenode的进程id

(2)将Active NameNode机器断开网络

service network stop

如果测试不成功,则可能是配置错误。检查zkfc守护进程以及NameNode守护进程的日志,以便进一步诊断问题。

10)启动yarn

(1)在node22中执行:

  1. [admin@node22 ~]$ sbin/start-yarn.sh

(2)在node23中执行:

  1. [admin@node23 ~]$ sbin/yarn-daemon.sh start resourcemanager 

(3)查看服务状态

  1. [admin@node22 ~]$ yarn rmadmin -getServiceState rm1
  2. active
  3. [admin@node22 ~]$ yarn rmadmin -getServiceState rm2
  4. standby

4) 验证高可用(略)

6 测试集群

1)查看进程

  1. [admin@node21 ~]$ start-dfs.sh
  2. [admin@node22 ~]$ start-yarn.sh
  3. [admin@node23 ~]$ yarn-daemon.sh start resourcemanager
  1. [admin@node21 ~]$ jps
  2. 11298 NodeManager
  3. 10868 DataNode
  4. 11065 JournalNode
  5. 11210 DFSZKFailoverController
  6. 1276 QuorumPeerMain
  7. 11470 NameNode
  8. 11436 Jps
  9.  
  10. [admin@node22 ~]$ jps
  11. 7168 DataNode
  12. 7476 ResourceManager
  13. 7941 Jps
  14. 7271 JournalNode
  15. 1080 QuorumPeerMain
  16. 7352 DFSZKFailoverController
  17. 7594 NodeManager
  18. 7099 NameNode
  19.  
  20. [admin@node23 ~]$ jps
  21. 3554 ResourceManager
  22. 3204 DataNode
  23. 3301 JournalNode
  24. 3606 Jps
  25. 3384 NodeManager
  26. 1097 QuorumPeerMain

2)任务提交

2.1 上传文件到集群

  1. [admin@node21 ~]$ hadoop fs -mkdir -p /user/admin/input
  2. [admin@node21 ~]$ mkdir -p /opt/wcinput/
  3. [admin@node21 ~]$ vi /opt/wcinput/wc.txt
  4. [admin@node21 ~]$ hadoop fs -put /opt/wcinput/wc.txt /user/admin/input

wc.txt 文本内容为

 wc.txt

2.2 上传文件后查看文件存放在什么位置

  1. 文件存储路径
  2. [admin@node21 subdir0]$ pwd
  3. /opt/module/hadoop-2.7.6/data/ha/tmp/dfs/data/current/BP-1244373306-192.168.100.21-1527653416622/current/finalized/subdir0/subdir0
  4. 查看文件内容
  5. [admin@node21 subdir0]$ cat blk_1073741825
  6. hadoop spark storm
  7. hbase hive sqoop
  8. hadoop flink flume
  9. spark hadoop

2.3 下载文件

  1. [admin@node21 opt]$ hadoop fs -get /user/admin/input/wc.txt

2.4 执行wordcount程序

  1. [admin@node21 ~]$ hadoop jar /opt/module/hadoop-2.7.6/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.6.jar wordcount /user/admin/input /user/admin/output

执行过程

下载查看

  1. [admin@node21 wcoutput]$ hadoop fs -get /user/admin/output/part-r-00000
  2. [admin@node21 wcoutput]$ ll
  3. total 4
  4. -rw-r--r-- 1 admin admin 64 May 30 02:58 part-r-00000
  5. [admin@node21 wcoutput]$ cat part-r-00000
  6. flink 1
  7. flume 1
  8. hadoop 3
  9. hbase 1
  10. hive 1
  11. spark 2
  12. sqoop 1
  13. storm 1

三 配置集群常见错误

1 自动故障转移错误

1.1 两台namenode之间不能通信,kill掉一台Active的namenode节点,另外一台standby不能切换Active

查看namenode日志 或者zkfc日志,nn1 连接 nn2 8020失败

原因分析:若服务器是最小化安装centos时,有可能系统没有fuster程序,那么跳过这个安装步骤直接进行后面的操作时,将有可能出现以下问题:

node21作为主节点时,kill掉node21上的NameNode和ResourceManager进程时,可以实现故障转移,node22将从stanby状态自动变成active状态;但是当node22作为主节点时,若kill掉node22上的进程,node21上的进程状态却还是stanby,并不能实现故障自动转移。原因是我们在 hdfs-site.xml中配置了当集群需要故障自动转移时采用SSH方式进行,而因为缺少fuster程序,将在zkfc的日志文件中发现如下错误

  1. PATH=$PATH:/sbin:/usr/sbin fuser -v -k -n tcp 9000 via ssh: bash: fuser: 未找到命令
  2. Unable to fence service by any configured method
  3. java.lang.RuntimeException: Unable to fence NameNode at node22/192.168.100.22:8020

提示未找到fuster程序,导致无法进行fence,所以可以通过如下命令来安装,Psmisc软件包中包含了fuster程序:

  1. //分别在node21、node22、node23上执行
  2. sudo yum install psmisc

重启Hadoop服务验证成功。

2HDFS创建目录报错

Hadoop2.7.6在安装成功后,start-dfs.sh启动后,在HDFS创建目录报错:

WARN util.NativeCodeLoader: Unable to load native-hadoop library for your platform... using builtin-java classes where applicable

在/etc/profile文件中配置如下环境变量

  1. export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
  2. export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

需要将$HADOOP_HOME/lib/native中的文件copy到$HADOOP_HOME/lib中

CentOS7.5搭建Hadoop2.7.6完全分布式集群的更多相关文章

  1. Hadoop(二)CentOS7.5搭建Hadoop2.7.6完全分布式集群

    一 完全分布式集群(单点) Hadoop官方地址:http://hadoop.apache.org/ 1  准备3台客户机 1.1防火墙,静态IP,主机名 关闭防火墙,设置静态IP,主机名此处略,参考 ...

  2. Centos7.5搭建Hadoop2.8.5完全分布式集群部署

    一.基础环境设置 1. 准备4台客户机(VMware虚拟机) 系统版本:Centos7.5 节点配置: 192.168.208.128 --Master 192.168.208.129 --Slave ...

  3. 搭建Hadoop2.7.1的分布式集群

    Hadoop 2.7.1 (2015-7-6更新),hadoop的环境配置不是特别的复杂,但是确实有很多细节需要注意,不然会造成许多配置错误的情况.尽量保证一次配置正确防止反复修改. 网上教程有很多关 ...

  4. # 从零開始搭建Hadoop2.7.1的分布式集群

    Hadoop 2.7.1 (2015-7-6更新),Hadoop的环境配置不是特别的复杂,可是确实有非常多细节须要注意.不然会造成很多配置错误的情况.尽量保证一次配置正确防止重复改动. 网上教程有非常 ...

  5. Docker中搭建Hadoop-2.6单机伪分布式集群

    1 获取一个简单的Docker系统镜像,并建立一个容器. 1.1 这里我选择下载CentOS镜像 docker pull centos 1.2 通过docker tag命令将下载的CentOS镜像名称 ...

  6. 基于hadoop2.6.0搭建5个节点的分布式集群

    1.前言 我们使用hadoop2.6.0版本配置Hadoop集群,同时配置NameNode+HA.ResourceManager+HA,并使用zookeeper来管理Hadoop集群 2.规划 1.主 ...

  7. 搭建hbase1.2.5完全分布式集群

    简介 有一段时间,没写博客了,因为公司开发分布式调用链追踪系统,用到hbase,在这里记录一下搭建过程 1.集群如下: ip 主机名 角色 192.168.6.130 node1.jacky.com ...

  8. 超详细从零记录Hadoop2.7.3完全分布式集群部署过程

    超详细从零记录Ubuntu16.04.1 3台服务器上Hadoop2.7.3完全分布式集群部署过程.包含,Ubuntu服务器创建.远程工具连接配置.Ubuntu服务器配置.Hadoop文件配置.Had ...

  9. 摘要: CentOS 6.5搭建Redis3.2.8伪分布式集群

    from https://my.oschina.net/ososchina/blog/856678     摘要: CentOS 6.5搭建Redis3.2.8伪分布式集群 前言 最近在服务器上搭建了 ...

随机推荐

  1. LibreOJ #515 贪心只能过样例

    题目链接:https://loj.ac/problem/515 知识点: DP.bitset类 解题思路: DP部分不难想到:从 a 到 b 遍历,然后在已有的状态上加上遍历得到的数字的平方,难点在于 ...

  2. 母牛的故事(hdu2018)——笔记待完善

    思考:这道题考验的是罗辑思维,这个网址http://blog.csdn.net/sxhelijian/article/details/42609353的罗辑思维值得学习 #include<std ...

  3. vue过渡动画样式

    在进入/离开的过渡中,会有 6 个 class 切换. v-enter:定义进入过渡的开始状态.在元素被插入之前生效,在元素被插入之后的下一帧移除. v-enter-active:定义进入过渡生效时的 ...

  4. Golang源码学习:调度逻辑(三)工作线程的执行流程与调度循环

    本文内容主要分为三部分: main goroutine 的调度运行 非 main goroutine 的退出流程 工作线程的执行流程与调度循环. main goroutine 的调度运行 runtim ...

  5. [站点推荐]001.学习新技能的37个最佳网站(The 37 Best Websites To Learn Something New)

    忘了过于褒奖的学校.整天呆在拥挤的教室而效果却差得可怜.这些网站和应用涵盖了科学.艺术和技术的无数话题.它们可以教会你实践练习任何技能,从制作豆 沙到用 node.js 开发 app,而且它们都是免费 ...

  6. pandas的loc与iloc

    1. loc是用标签(也就是行名和列名)来查找,标签默认是数字,但也可以通过index参数指定为字符型等其他的类型. 格式是df.loc[行名,列名],如果列标签没有给出,则默认为查找指定行标签的所有 ...

  7. debug PHP程序(xdebug、IntelliJ IDEA)

    之前写PHP程序的都是echo调试,今天感觉太麻烦了就想起研究一下IntelliJ IDEA如何调试PHP程序. 从网上查找了很多资料,大部分都提到在IDE里开启服务,一下就懵了,怎么启这么多服务呢. ...

  8. ASP.NET中IHttpHandler与IHttpModule的区别(带样例说明)

    IHttpModule相对来说,是一个网页的添加 IHttpHandler相对来说,却是网页的替换 先建一个HandlerDemo的类 using System; using System.Colle ...

  9. Java实现 LeetCode 385 迷你语法分析器

    385. 迷你语法分析器 给定一个用字符串表示的整数的嵌套列表,实现一个解析它的语法分析器. 列表中的每个元素只可能是整数或整数嵌套列表 提示:你可以假定这些字符串都是格式良好的: 字符串非空 字符串 ...

  10. Java实现 LeetCode 117 填充每个节点的下一个右侧节点指针 II(二)

    117. 填充每个节点的下一个右侧节点指针 II 给定一个二叉树 struct Node { int val; Node *left; Node *right; Node *next; } 填充它的每 ...