一. 故障处理部分

1.1. spark提交任务报错java.lang.NoClassDefFoundError: com/alibaba/fastjson/JSON

报错原因: 在运行环境没有找到fastjson的依赖库
解决方法: 在SPARK_HOME/jars/ 添加fastjson-VERSION.jar包。 例如我的环境下SPARK_HOME是/usr/local/service/spark/。

[hadoop@10 ~]$ ls $SPARK_HOME/jars/fast*
/usr/local/service/spark/jars/fastjson-1.2.12.jar

1.2.  跨HDFS集群、HDFS属主用户不同,传输文件没有权限的问题

这个问题衍生出两件事,把这两件事处理完问题即可解决。

  • 不同集群间解析
  • 不同集群属主

先看一下不同集群间解析。要想跨集群传输文件,首先得确定集群相互"认识",即集群间确定通过ip或者hostname可达。在ip可达的前提下,我们判断集群间是否"认识",则需要检查hdfs-site.xml中dfs.namenode.datanode.registration.ip-hostname-check这项配置。它表示是否将ip反向解析成主机名,默认为true。如果未设置这一项,则需要对/etc/hosts添加主机解析,对于HDFS这种规模性集群来说,这很显然是比较繁琐的。

对于不同集群属主来说,可以通过修改被传文件权限或通过添加用户、附加组使用户获得文件的读取权限。

1.3 HDFS中hdfshosts直接使用ip遇到的问题

故障描述:

  1. 在hdfs web页面显示dn全部dead
  2. strace 追踪dn进程,发现连接nn超时
  3. 查看dn日志报错如下:
18/11/27 22:53:00 ERROR datanode.DataNode: Initialization failed for Block pool BP-958982478-10.0.220.44-1543329751956 (Datanode Uuid null) service to /10.0.220.44:9100 Datanode denied communication with namenode because hostname cannot be resolved (ip=10.0.220.48, hostname=10.0.220.48): DatanodeRegistration(0.0.0.0:50010, datanodeUuid=1e26933b-35a3-4d3f-8c5f-3ab03f10ca62, infoPort=50075, infoSecurePort=0, ipcPort=50020, storageInfo=lv=-56;cid=CID-1f213b85-b28c-4824-a44c-813c95ce7ecc;nsid=1612667934;c=0)at org.apache.hadoop.hdfs.server.blockmanagement.DatanodeManager.registerDatanode(DatanodeManager.java:852)at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.registerDatanode(FSNamesystem.java:4486)at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.registerDatanode(NameNodeRpcServer.java:1286)at org.apache.hadoop.hdfs.protocolPB.DatanodeProtocolServerSideTranslatorPB.registerDatanode(DatanodeProtocolServerSideTranslatorPB.java:96)at org.apache.hadoop.hdfs.protocol.proto.DatanodeProtocolProtos$DatanodeProtocolService$2.callBlockingMethod(DatanodeProtocolProtos.java:28752)at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:616)at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:982)at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2217)at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2213)at java.security.AccessController.doPrivileged(Native Method)at javax.security.auth.Subject.doAs(Subject.java:422)at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1758)at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2213)

问题分析:
首先想到的就是NN与DN通信出现了问题。但是如题所述"直接使用ip",也就是说不在/etc/hosts做任何配置的前提下能正常工作。这时就需要考虑怎样在hdfs的配置里面能够使DN直接通过ip来访问NN,即禁用对DN的ip做反向域名解析。
解决方法:
在NameNode节点 的 hdfs-site.xml添加如下内容

<property><name>dfs.namenode.datanode.registration.ip-hostname-check</name><value>false</value>
</property>

1.4 ambari hive server2启动失败。

报错日志如下

Caused by: java.sql.SQLException: Access denied for user 'hive'@'xx.xx.xx.xx'(using password: YES)at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1078)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4187)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4119)at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:927)at com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1709)at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1252)at com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2488)at com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2521)at com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2306)at com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:839)at com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)at sun.reflect.GeneratedConstructorAccessor17.newInstance(Unknown Source)at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)at java.lang.reflect.Constructor.newInstance(Constructor.java:423)at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)at com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:421)at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:350)at java.sql.DriverManager.getConnection(DriverManager.java:664)at java.sql.DriverManager.getConnection(DriverManager.java:208)at com.jolbox.bonecp.BoneCP.obtainRawInternalConnection(BoneCP.java:361)at com.jolbox.bonecp.BoneCP.<init>(BoneCP.java:416)... 71 more

手动连接mysql依然连接不上,检查发现连接权限不够,重新授权后,启动成功。

二. hadoop集群平滑退役/上线节点(DataName/tasktracker or NodeManager)

在生产环境中可能会遇到退役(下线)服务器需求,对于计算节点来说强制下线节点影响的只是task作业,但是对于HDFS来说,就会出现数据丢失的风险。当然hadoop也提供了平滑下线的机制。

2.1 退役DataNode

2.1.1 在namenode节点hdfs-site.xml中增加配置,PATH路径根据自己实际情况进行修改

<property><name>dfs.hosts.exclude</name><value>/usr/local/service/hadoop/etc/hadoop/hdfsexcludedhosts</value>
</property>

2.1.2 在相关文件中添加需要退役的主机

[hadoop@10 ~]$ cat  /usr/local/service/hadoop/etc/hadoop/hdfsexcludedhosts
10.0.0.1
10.0.0.2

2.1.3 在NameNode 运行以下命令,将经过审核的DataNode更新至NameNode

[hadoop@10 ~]$ hdfs dfsadmin -refreshNodes

2.1.4 查看下线情况

hdfs dfsadmin -report 

Decomissioning标记的即为正在下线的DataNode,hadoop集群会将下线的DataNode数据块复制到其他节点。
复制完成之后会变成Decommission Status : Decommissioned。
2.1.5 下线完成后,清空/usr/local/service/hadoop/etc/hadoop/hdfsexcludedhosts 文件

[hadoop@10 ~]$ > /usr/local/service/hadoop/etc/hadoop/hdfsexcludedhosts

注意: 如果hadoop集群为HA,则需要在2个主控节点做相同操作

2.2 退役NodeManager 节点

2.2.1 在RM(ResourceManager)节点yarn-site.xml中增加配置,PATH路径根据自己实际情况进行修改

<property><name>yarn.resourcemanager.nodes.exclude-path</name><value>/usr/local/service/hadoop/etc/hadoop/yarnexcludedhosts</value>
</property>

2.2.2 在相关文件中添加需要退役的主机

[hadoop@10 ~]$ cat  /usr/local/service/hadoop/etc/hadoop/yarnexcludedhosts
10.0.0.1
10.0.0.2

2.2.3 在RM节点 运行以下命令,将经过审核的NodeManager更新至RM

[hadoop@10 ~]$ yarn rmadmin -refreshNodes

2.2.4 下线完成后,在nodes include文件中去掉下线的机器,并清空exclude 文件

#yarn-site.xml 中nodes include 配置路径,路径根据自己实际情况
<property><name>yarn.resourcemanager.nodes.include-path</name><value>/usr/local/service/hadoop/etc/hadoop/yarnhosts</value>
</property>
[hadoop@10 hadoop]$ > /usr/local/service/hadoop/etc/hadoop/yarnexcludedhosts

注意: 如果hadoop集群为HA,则需要在2个主控节点做相同操作

2.3 上线DataNode节点

2.3.1 修改dfs.hosts对应配置文件,添加需要上线的机器

[hadoop@10 ~]$ cat /usr/local/service/hadoop/etc/hadoop/hdfshosts
10.0.100.53
10.0.100.52

2.3.2 在NameNode节点运行以下命令,将经过审核的datanode更新至namenode

[hadoop@10 ~]$ hdfs dfsadmin -refreshNodes

2.3.3 检查是否上线成功

hdfs dfsadmin -report 

注意: 如果hadoop集群为HA,则需要在2个主控节点做相同操作

2.4 上线NodeManager节点

2.4.1 在nodes include文件中添加需要上线的机器

#yarn-site.xml 中nodes include 配置路径,路径根据自己实际情况
<property><name>yarn.resourcemanager.nodes.include-path</name><value>/usr/local/service/hadoop/etc/hadoop/yarnhosts</value>
</property>
[hadoop@10 ~]$ cat /usr/local/service/hadoop/etc/hadoop/yarnhosts
10.0.100.53
10.0.100.52

2.4.2 在RM节点 运行以下命令,将经过审核的NodeManager更新至RM

[hadoop@10 ~]$ yarn rmadmin -refreshNodes

注意: 如果hadoop集群为HA,则需要在2个主控节点做相同操作


致谢:Hadoop 委任和解除节点

转载于:https://www.cnblogs.com/guoew/p/10391005.html

hadoop运维笔记相关推荐

  1. Hadoop运维记录系列(十二)

    从公司离职有几天了,今天回去看同事,想一起吃饭,没成想摊上大事了.说下午hadoop集群的机房停电了,然后集群就启动不了了,几个人从下午4点多折腾到8点多还没搞定,有几台服务器找不到硬盘,还有内网pi ...

  2. 运维笔记--postgresql占用CPU问题定位

    运维笔记--postgresql占用CPU问题定位 场景描述: 业务系统访问变慢,登陆服务器查看系统负载并不高,然后查看占用CPU较高的进程,发现是连接数据库的几个进程占用系统资源较多. 处理方式: ...

  3. 老男孩的运维笔记文档-高级部分(系统架构师)列表(三)

    ############################################################ # # USER          YYYY-MM-DD – ACTION # ...

  4. [运维笔记] PowerShell (模块).模块的查找、安装、卸载、更新、保存、发布

    [运维笔记] PowerShell (库/模块).库的查找.安装.卸载.更新.保存.发布 作者主页:jcLee95:https://blog.csdn.net/qq_28550263?spm=3001 ...

  5. [运维笔记] PowerShell (模块).模块清单

    [运维笔记] PowerShell (模块).模块清单 作者:jcLee95 目 录 1. 模块清单是什么 2. 如何创建模块清单 3. 模块清单.psd1文件内容解释 4. 某库的模块清单实例 1. ...

  6. 大数据运维工作(Linux,OGG,链路监控,Hadoop运维等)

    大数据运维工程师工作内容 Linux运维手册 1. 启动/关闭集群组件 1.1 负载均衡 1)Nginx 运维命令 Copy to clipboard cd /usr/nginx/sbin #进入 s ...

  7. Nginx基础应用配置小结 - 运维笔记

    Nginx基础应用配置小结 - 运维笔记 在linux系统下使用nginx作为web应用服务,用来提升网站访问速度的经验已五年多了,今天在此对nginx的使用做一简单总结. 一.nginx服务简介 N ...

  8. linux运维笔记:动态网页资源

    linux运维笔记:动态网页资源 1.动态网页资源介绍 所谓的动态网页是与静态网页相对而言,也就是说,动态网页的URL后缀 不是.htm..html..shtml..xml..js..css等静态网页 ...

  9. Nginx重启时提示nginx: [emerg] bind() to 0.0.0.0解决方法 老蒋 发布于 2019-06-03 分类:运维笔记 评论(0) 2000+站长交流QQ群: 59

    c 老蒋 发布于 2019-06-03 分类:运维笔记 评论(0) 2000+站长交流QQ群: 594467847(资源和技术交流) 昨天下午老蒋在一台服务器中折腾迁移数据问题的时候,重启Nginx的 ...

  10. linux运维笔记:DNS解析IP地址的过程(dns解析的原理 )

    linux运维笔记:DNS解析IP地址的过程(dns解析的原理 ) 1.首先:说一下dns解析的流程,大家都知道,计算机之间只能通过ip相互通信,因为ip不好记,于是才使用dns服务器把域名解析为相应 ...

最新文章

  1. C/C++关于scanf_s的一些坑
  2. hbuilderx简单网页代码_Python爬取网页数据
  3. HDFS配置Kerberos
  4. MTK 鼠标在列表界面选不到最后的选项 Patch
  5. 事件处理之一:两种方式:监听器与回调
  6. 【147天】尚学堂高淇Java300集视频精华笔记(108-109)
  7. 管理者必看!深度剖析BI与数据仓库,企业能否成功转型就看它
  8. winsock使用java编写_利用Socket进行Java网络编程(一)
  9. mie散射理论方程_A. Mie米散射理论基础
  10. 国外ARM开发网站列表
  11. 各浏览器中的鼠标滚轮事件处理
  12. tomcat ---- jndi方式配置连接
  13. latex 可视化生成表格代码
  14. 【Java】菜鸟教程Java基础测试刷题笔记
  15. 华为路由器NAT经典配置
  16. ios12卡贴机(有锁)/无锁机 改电信VOLTE //高通基带//教程
  17. LeetCode琅琊榜第九层-加油站问题(图表法)
  18. 【Zotero更改pdf名字】Zotfile设置
  19. php短网址生成代码,一个php短网址的生成代码(仿微博短网址)
  20. 高并发系统设计四(系统怎样做到高可用)

热门文章

  1. php 修改 wordpress,wordpress如何修改php.ini
  2. 华硕主板如何设置开机自启_华硕主板自动开机的设置方法.doc
  3. C++:字符串转换成整数
  4. linux java 多线程_Java多线程:Linux多路复用,Java NIO与Netty简述
  5. 【制表符\t】你不知道的制表符\t的那些事儿~
  6. 2数据库表增加一个字段_详解PostgreSQL用户、数据库及表的管理、操作与授权
  7. VTK(四)---VMTK血管中心线提取
  8. socket长连接server c语言,使用socket建立长连接
  9. python socketio web 端_使用flask-socketIO怎样讲json格式数据从服务器推送到前端?
  10. 自动驾驶1-2 欢迎来到课程 Welcome to the Course