MongoDB:listDatabases failed : not master and slaveOk=false
异常描述
如果在MongoDB的SECONDARY上查询数据时会报如下错误信息:
1 | > show databases; |
如果在MongoDB的SECONDARY上查询数据时会报如下错误信息:
1 | > show databases; |
Java读取Properties文件有两种简单方法,就是使用ClassLoader中的资源读取方法。
使用kafka-console-producer.sh
向远端Kafka写入数据时遇到以下错误:
1 | $ bin/kafka-console-producer.sh --broker-list 172.16.72.202:9092 --topic test |
在没有配置advertised.host.name
的情况下,Kafka并没有广播我们配置的host.name
,而是广播了主机配置的hostname。远端的客户端并没有配置hosts,所以自然是连接不上这个hostname的,所以在远端客户端配置hosts。在客户端/etc/hosts
中添加以下内容后问题解决:
Producer向Kafka写入数据时遇到异常:org.apache.kafka.common.errors.RecordTooLargeException。该异常是因为单条消息大小超过限制导致的。解决方法是将限制参数调大:
(1)server端:server.properties
message.max.bytes
参数默认值为1000012,调整为适合的值,如10485760。
(2)producer端:
设置Producer的参数max.request.size
的值与server端的message.max.bytes
值一致。
MySQL中的数据如下图:
检查HDFS上的目标文件内容可以看出,回车换行符位置的数据被截断了,导致数据列错位。
Sqoop提供了配置参数,在导入时丢弃掉数据的分隔符(\n,\r,\01)。
在远程执行的命令中如果包含特殊字符($)时需要转义,如下:
1 | ssh root@remote_host "ps -ef|grep process_name | grep -v 'grep ' | awk '{print $2}'" |
以上语句的本意是得到进程的ID,但实际输出会是进程的信息。应该使用如下形式:
今天在运行MR程序时遇到以下信息:
1 | 17/03/03 10:09:45 INFO mapreduce.Job: Job job_1488363995041_0002 failed with state KILLED due to: REDUCE capability required is more than the supported max container capability in the cluster. Killing the Job. reduceResourceRequest: <memory:4096, vCores:1> maxContainerCapability:<memory:3096, vCores:8> |
原因是Reduce Task在申请资源时超过了设置的最大可申请内容量。检查yarn-site.xml
中的配置项yarn.scheduler.maximum-allocation-mb
,如下: