CDH

来源:互联网 发布:win10网络图标红叉 编辑:程序博客网 时间:2024/06/05 23:50

HDP Ambaria Apache
CDH的管理界面,各个组件的兼容性,版本升级都是非常好的
CDH:cm的管理器+管理组件的各个组件服务,Hadoop
CDH版本的选择:
CDH4.x—>4.8.6
CDH5.x—->5.4.8 5.8.0 5.11.0

CDH安装几种方式解读:
CDH离线方式的部署安装: 最好都是rpm包安装的
rpm包安装的:装当前rpm包所依赖的rpm包的,自动下载的,杜绝了系统环境所缺包的可能性的
Bin包的安装:下一步的下一步的,界面不好的,自动下载的,可能网络中断的
Tar包的安装:所需要的依赖包没有全部的下载下来的,系统环境的各个依赖包的关系没有很好的匹配度的额,集群后面运行的过程可能出现各种各样的问题的

按流量收费的
复制IP,更改IP的数值
hackeruncle
遇到坑了,一定要坚持下去的额,可以跳过的,前前后后的解决它
job调度,性能问题,

Mysql Install&&UnInstall

监控平台
对Mysql数据库进行监控Zabbix的,shell脚本进行监控,ELK进行监控的
ECS机器(instance实例的)

Zabbix监控的Mysql数据库的
需求:Mysql挂了,Mysql shell脚本,预警机制的,5分钟一个粒度,
Linux发现Mysql的内存飙高的时候,持续占用的时候,Linux会kill掉Mysql的
代码层面上控制的
加内存的进行调优的
linux机器 mysql数据库
Mysql没有做主主架构,正常的是主从架构的,shell脚本5分钟后将从的mysql切换成主的Mysql

Mysql存储一些用户数据,稍微不是很重要的数据的,用户量上来的时候,也会拖垮掉Mysql数据库的

Cassandra数据库
运营日志的分析
实时的分析Mysql的log日志和Linux日志,Linux在杀掉mysql服务的时候,是会输出大量的信息的,什么进程会有问题的,用的内存比较大的,大量的警告信息,预输出信息

半自动的运维脚本 运维平台的手工介入上去查下,由于业务的高峰导致的问题,避免数据库挂掉的

SLA的指标的规定的,服务及其宕机时间的 维护时间的,SLA=99.99
AWS 阿里云部署的CDH集群,很多CDH套集群的
4套生产的CDH集群+1套CDH开发环境+1套测试CDH环境

CDH的版本很多的,CDH有预警模块的, 但是一般的管理人员使用默认配置的
当HDFS使用HA的时候,当NameNode的进程挂掉的时候才会发封邮件的,
有HA的时候自动切换的,Standby NameNode可以切换到Active NameNode的,但是在业务高峰期是切换不过去的,数据量是一直写的啊,跟Zookeeper的通信选举不了的啊,切换不过去的啊,再次发一封邮件。
等问题出现了,挂掉了,切换不过去了, 都会发邮件的

NameNode的log日志在挂掉之前会出现大量的warning警告信息的,
对重要的节点或者进程来说,收集warning的信息到预警平台上面来的,对重要的服务进行一些监控的,分析1min中出现warning的次数的,
CDH4.8.6
CDH5.4.0
CDH5.8.0
收集应用日志,日志是Mysql,Linux加上CDH平台的日志收集的,进行分析及时的预警的

代码的应用日志输出到log4j的,生产服务的
log4j实时的分析,导航企业的App在使用的过程中卡顿了,出现Exception异常,企业将手机端的App运行日志会定期发送到公司服务端的
分析App上的问题异常在哪里的
hive的做的
SparkStreaming 5秒收集一次的,

titan数据库
influxdb数据库

架构设计
Flume收集日志
Flume—>HDFS按天,按小时创建目录—->Hive的分区表load进来的,通过shell脚本加载进来的
Flume可以直接到Hive中的分区表中的额,
/2017/09/16/21/
/2017/09/16/22/
shell(crontab/rundeck调度平台)
直接写到hive表中的

Flume收集数据,复制俩份的,一份发送到HDFS上的,一份发到kafka的,Flume的复制策略,一份数据变成俩份数据的
搜索技巧的: sparkStreaming kafka
spark-streaming-kafka-0-8

spark-streaming-kafka-0-8_2.11
SparkStreaming处理完之后要快速的到监控平台上面的,预警作用的,而不是看到邮件的过来,邮件过来的时候就已经晚了,及时的预警,error没有出现之前,机器没有挂掉之前处理掉异常的

ambari 的服务重启的时候不会调用到status方法
数据格式:
info 20170909 10:00:00 xxxx
warn 20170909 10:00:01 memory 5.5GB used
error 20170909 10:00:05 oom

算:最近5秒的出现warn和error的次数达到100,写入到redis,曲线图上去了,发邮件
算:实时统计一小时,抛异常的哪个java类是比较多的,前五个
com.xxx.yyy Exception次数
第一个批次的0-5秒:统计次数5—》redis 第一的统计次数存放在内存的某个地方的,然后和第二批次进行相加起来的,广播变量和累加器
更新的粒度,更新的问题
第二个批次的5-10秒:统计次数3—》5+3

SparkStreaming写入到Redis中的 Echarts3显示的大屏的
后端代码adminLTE+Flask用python去写的
adminLTE Dashboard管理界面的,大屏的,做管理的界面的
做大屏的话肯定不光光是一个HTML界面的,肯定要一个后台的,统一的列表的东西进行管理的,把其中的一界面的url领出来的放在一个HTML上的

报表的响应度和及时度的

redis存储的时候,怎么存储的,update
redis先进后出
管道

hive中的数据如何到关系型数据库中的,通过sqoop的,DataX的数据导入导出的,

Flume采集mysql日志,mysql产生的数据已经在磁盘上的额,Flume是监控Mysql的日志文件的

python:进行数据分析的,机器学习的,pyspark模糊匹配率的 on yarn模式进行的
Spark ML

Kafka生产参数生产调优的点:
producer:数据产生的 Flume
broker:Kafka启动时候进程角色就是broker的,正常的情况下只会调节broker
consumer:数据的消费者 SparkStreaming

不仅仅是要调节broker的,producer和consumer都是要调节的,三个都是要调节的,

Broker Configs:
Producer Configs:
Consumer Configs:
kafka地层的链接信息放在Zookeeper上的,

Broker Configs:
message.max.bytes=2M:the maximum size of message that the server can receive一个信息最大的字节数的,超过就不会进来的,调大是没有影响的,但是调小是会丢数据的额

num.io.threads
num.network.threads
调节参数遵循的原则:
像比如timeout,rpc,heap,handler,flush调优的最基本的点,放大2-3倍的,但是对于HA,Zookeeper的timeout的东西不可以一味地放大的,

replica.fetch.max.bytes=4M The number of bytes of messages to attempt to fetch
replicat.fetch.max.bytes>message.max.bytes

socket.receive.buffer.bytes
zookeeper.connection.timeout.ms=放大一到二倍的

Producer Configs:
acks
buffer.memory
compression.type = snappy
retries
batch.size重中之重的,放大入口的决定因素的,一个批次日志的数据行数的,数据的条数的,多少条的数据量的而不是数据的字节数的,数据的条数的而不是数据一个批次的大小的
正常理解的情况下认为size是字节数的大小的额,

如果batch.size当作字节数设置的话,会非常大的,那么broker这边会是抛异常的,接收不了的,一下子来了很多条数据的

Consumer Configs
socket.timeout.ms
socket.receive.buffer.bytes

fetch.message.max.bytes消费数据变大的

青云平台

控制台
放火墙的规则:默认的22端口是开着的
不用的时候,关掉机器的,删除IP的,按小时收费的额,用多少算多少的,不用的时候就关掉的

关于Yarn的调优:内存和核数

任务的调度来说,是根据核数有关系的,配置了多少个虚拟的核数,多少个虚拟的核数调度多少个task的,并发数的,
yarn.scheduler.minimum-allocation-mb=1GB
yarn.scheduler.maximum-allocation-mb=4GB
yarn.scheduler.increment-allocation-vcores=1
yarn.scheduler.maximum-allocation-vcores=2

所有的机器都是Centos7.3的,VirturalBOX虚拟软件安装的,断电重启之后,导致内核变化了,导致了CDH的agent服务起不来的,报的错误是python的错误,连代码调试都走一遍的,定位在内核数 ,hackeruncle

insert into syncmetadata.bootstrap(database_name,table_name) values (“test”,”china_position”);

Exception in thread “main” org.apache.hadoop.security.AccessControlException:Permission denied :user=root,access=WRITE,inode =”/user”:hdfs:supergroup:drwxr_xr_x
at org.apache.hadoop.hdfsf.server.namenode.DefaultAuthorizationProvider.checkFsPermission(DefaultAuthorizationProvider.java)
直接搜索异常的信息,进行解决的
chown hdfs:hdfs *
mkdir /tmp/china_position
chown -R hdfs:hdfs /tmp/china_position

hadoop.version=2.6.0-cdh5.10.0
scala.version=2.11.8
spark.version=2.2.0.cloudera1
cloudera1和cloudera2是一个坑的
kafka.version=0.10.2-kafka-2.2.0
spark.streaming.kafka.version=2.2.0
mysql.jdbc.version=6.0.6

CDH上的kafka=0.10.0
代码上的kafka=0.10.0
但是会报错Exception in thread “streaming-start” java.lang.NoSuchMethodError:org.apache.kafka.clients.consumer.kafka
Kafka version:0.9.0-kafka-2.0.2版本问题,jar的问题的
什么场景的情况下出现这种情况的?
1.使用CDH自带的spark2服务的时候,会有的,
2.使用Apache spark2.1.1仅仅用于客户端提交的
NoSuchMethodError:jar版本不匹配的 正常的情况下是缺包的
x-0.1.jar 和 x-0.3.jar都存在的时候,由于只有一个高版本中存在最新的方法,加载的时候只加载了低版本的

cd /opt/cloudera/parcels/KAFKA/lib/kafka
cd /opt/cloudera/parcels/SPARK2/lib/spark2/
将kafka-0.9的文件夹移除到/tmp目录下,不需要kafka-0.9的文件夹的
mv kafka-0.9 /tmp/ 移除掉不用的文件夹的,不会影响作业的运行情况的
find / -name 0.9.0-kafka-2.0.2

kafka_2.11-0.10.2-kafka-2.2.0.jar 是由scala2.11的

Linux中尽量使用mv 不使用rm -rf的

spark submit提交jar到yarn集群上,状态一直是ACCEPTED的问题,代码问题中的local[2]没有提交到yarn上面的啊
val ss=SparkSession.builder().appName(“ChinaPosition”).master(“yarn”).getOrCreate()

胖包:所有的依赖jar+代码的jar生成的一个大的jar,所有的jar都打成了一个的可以执行的jar包的,这种jar包是非常大的, 180MB以上的
胖包的好处:不要关心jar的环境跟集群环境的冲突问题的,基本上运行是没有问题的,但是体积大,上传linux慢,提交集群慢,申请资源慢
瘦包:所有的依赖jar包+代码的jar包,所有的依赖包是放在HDFS上的,上传的只是代码的jar包的额,
瘦包:依赖的小包上传到集群上是有问题的,jar的重复冲突,基本运行有点问题的,版本问题,上传快的,

重点:打成了胖包之后,一定要执行的是:将胖包中的引导文件删除掉的,不删掉的话会报错的
zip -d ChinaPosition.jar META-INF/.RSA META-INF/.DSA META-INF/*.SF

java.lang.Exception:Container is not yet running,Current state is LOCALIZING

零数据丢失的方案设计

正常的情况下处理的都是日志的数据
1.App的log日志,是可以丢失的
业务数据写到log中的,算钱的,肯定是不可以丢失的
高可靠性如何做的 平台的监控如何做的 及时的预警的

2.传统型的数据库的数据接入到大数据平台的
关系型数据库无法满足大批量数据的写入的
Oracle Mysql Postgresql SQLServer DB2
Mysql中的数据如何抽取到大数据平台的,保证数据的零丢失的,

实时的数仓:
从Mysql数据库中的数据到HBase的
1.Mysql数据通过sqoop到hive中的,T+1模式,每天晚上采用sqoop脚本进行调度一下的,增量的抽取,hive表中的分区

2.实时数仓
Mysql—>中间件—>kafka—>SparkStreaming—>Phoenix—>HBase
HBase中的表的数据存储都是通过API的,非常的难写的,
调研Phoenix架在HBase上的,通过sql的语法来去操作HBase的数据库的

SparkStreaming对接到Phoenix上的,Phoenix会自动的将数据写到HBase上的

大数据 mysql binlog 解析======》canal maxwell
中间件是如何保证数据的零丢失的额
Kafka是如何保证数据的零丢失的
SparkStreaming是如何保证数据的零丢失的

Exceptin in thread “streaming-start” java.lang.NoSuchMethodError:
xxxx.xxxx.xxxx.com.main
GOOGLE一下: 包的名称+空格+jar
com.xxx.main jar找到类似的jar包的
maven xxxx.xxxx.com.main (maven repository)