大数据运维问题:
hadoop:
1.集群配置好开启环境jps,但是少一个node?
解决办法:
关闭集群:sbin/stop-all.sh【只在master上操作】
删除/usr/local/src/hadoop-2.6.1/dfs/name 下面文件 【每个节点操作】
删除/usr/local/src/hadoop-2.6.1/dfs/data 下面文件 【每个节点操作】
删除/usr/local/src/hadoop-2.6.1/tmp 下面文件 【每个节点操作】
删除/usr/local/src/hadoop-2.6.1/logs 下面文件 【每个节点操作】
重新格式化 hadoop namenode -format 【只在master上操作】
启动集群:sbin/start-all.sh【只在master上操作】
2.在yarn集群跑spark测试代码看不到结果,hadoop和spark历史进程安装实践.
使用Yarn 作为集群管理器,启动Spark 时,无法再从SparkUI-4040 端口查看相应的信息。只能从Hadoop 的Yarn、历史服务器查看,但是默认是没有开启。
配置历史服务器:
(1). HDFS 配置
确保你的Hadoop 已经完成配置,并且已经能够正常启动。
下面,在已有的Hadoop 配置上,增加配置。
cd $HADOOP_HOME/etc/hadoop mapred-site.xml文件 <!--Spark Yarn--> <property> <name>mapreduce.jobhistory.address</name> <value>master:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>master:19888</value> </property> yarn-site.xml文件 <!--Spark Yarn--> <!-- 是否开启聚合日志 --> <property> <name>yarn.log-aggregation-enable</name> <value>true</value> </property> <!-- 配置日志服务器的地址,work节点使用 --> <property> <name>yarn.log.server.url</name> <value>http://master:19888/jobhistory/logs/</value> </property> <!-- 配置日志过期时间,单位秒 --> <property> <name>yarn.log-aggregation.retain-seconds</name> <value>86400</value> </property>
3.hadoop的文件不能下载以及YARN中Tracking UI不能访问历史日志
解决方法:windows系统不能解析域名所致,把hosts文件hostname复制到windows的hosts中
4.yarn资源被占用
报内存不足
Container [pid=8468,containerID=container_1594198338753_0001_01_000002] is running 318740992B beyond the 'VIRTUAL' memory limit. Current usage: 111.5 MB of 1 GB physical memory used; 2.4 GB of 2.1 GB virtual memory used. Killing container. Dump of the process-tree for container_1594198338753_0001_01_000002 :
解决办法:在 hadoop102 的/opt/module/hadoop-3.1.3/etc/hadoop/yarn-site.xml 文件中增加如下配置,然后分发到 hadoop103、hadoop104 服务器上,并重新启动集群:
<property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是 true --> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>
注意:如果测试过程中,出现异常可以在 yarn-site.xml 中设置虚拟内存检测为 false分发配置并重启集群
<!--是否启动一个线程检查每个任务正使用的虚拟内存量,如果任务超出分配值,则直接将其杀掉,默认是 true --> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property>
Hive:
1.在hive中关于大表执行join时,产生oom的处理建议
Hive中小表与大表关联(join)的性能分析 link→ Hive中小表与大表关联(join)的性能分析_刘健男_新浪博客
2.hive查询显示表头修改:
在hive安装目录下/conf/hive-site.xml配置文件里添加如下:
只添加前面部分,查询会显示tablename.column.name
<property> <name>hive.resultset.use.unique.column.names</name> <value>false</value> </property> <property> <name>hive.cli.print.header</name> <value>true</value> </property>
3.hive数据倾斜
(1)空值产生的数据倾斜
如日志中,常有信息丢失的问题,例如日志中的user_id,如果取其中的user_id和用户表中的user_id关联,就会遇到数据倾斜的问题
-- user_id 为空的不参与关联操作
select * from log a join users b on a.user_idisnotnulland a.user_id = b.user_id union all select * from log a where a.user_id is null
(2)不同的数据类型关联产生数据倾斜
用户表中user_id 字段为 int ,log表中user_id字段类型既有int类型也有string类型。当按照user_id 进行两个表的join操作时,默认的Hash操作进行分配,这样会导致所有String类型的id的记录分配到一个Reducer中
-- 把不同类型的字段同意转换为String类型后 进行关联
select * from users a left outer join logs b on a.user_id = cast(b.user_idas String);
Spark
1.Spark shell启动报错(yarn-client&yarn-cluster):Yarn application has already ended! It might have been killed or unable to launch...
启动日志,错误信息如下:
Yarn application has already ended! It might have been killed or unable to launch application master",这个可是一个异常,打开mr管理页面,http://master:8088/
重点在红框处,2.2g的虚拟内存实际值,超过了2.1g的上限。也就是说虚拟内存超限,contrainer没启动.
解决方案
yarn-site.xml 增加配置:
<!--以下为解决spark-shell 以yarn client模式运行报错问题而增加的配置,估计spark-summit也会有这个问题。2个配置只用配置一个即可解决问题,当然都配置也没问题--> <!--虚拟内存设置是否生效,若实际虚拟内存大于设置值 ,spark 以client模式运行可能会报错,"Yarn application has already ended! It might have been killed or unable to l"--> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> <description>Whether virtual memory limits will be enforced for containers</description> </property> <!--配置虚拟内存/物理内存的值,默认为2.1,物理内存默认应该是1g,所以虚拟内存是2.1g--> <property> <name>yarn.nodemanager.vmem-pmem-ratio</name> <value>4</value> <description>Ratio between virtual memory to physical memory when setting memory limits for containers</description> </property>
修改后,重新启动hadoop,spark-shell. 问题解决
2.spark-submit运行scala代码,出现ClassNotFoundException
首先检查代码jar包路径是否完整,其次在IDEA查看jar包是否存在运行的主类,是则重新打包。
3.spark代码模式与提交命令模式不一样,导致运行出错
注:代码用什么模式,启动命令用什么模式,代码不加local可以用yarn集群模式启动
坑 1 : scala代码为 setMaster(local) 则用local模式启动 ,要用yarn集群模式启动 会出现错误。
代码中:
val userScore = new SparkConf().setMaster("local").setAppName("UserScore")
启动命令:spark-submit --class UserScore sparktest-1.0-SNAPSHOT.jar
坑2: maven install打包jar ,启动--class 后面直接加类名 ,例想启动userwatchlist ,从java目录下开始写,有目录写目录,启动命令直接写 --class base.teacheruserwatchlist + jar包名即可