Hadoop经验之谈
1. LZO压缩
需要编译hadoop,手动为LZO压缩文件创建索引,没有索引,则LZO文件的切片只有一个, 128MB一个切片
2. 基准测试
HDFS读写性能测试
3. 参数调优
HDFS参数调优
1. dfs.namenode.handler.count=20*log2(集群规模)
用来处理不同 DataNode 的并发心跳
YARN参数调优
1. yarn.nodemanager.resource.memory-mb
YARN 可使用的物理内存总量 默认 8G
2. yarn.scheduler.maximum-allocation-mb
单个任务可申请的最多物 理内存量,默认是 8192MB
shell 脚本
#! /bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh start"
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh stop"
done
};;
"status"){
for i in hadoop102 hadoop103 hadoop104
do
ssh $i "/opt/module/zookeeper-3.4.10/bin/zkServer.sh status"
done
};;
esac
flume收集日志 --- 用户行为数据和启动日志
1. 在 master 和 slave1上开启 flume
2. log文件在 /usr/local/src/sub/logcollect/logs
3. 使用TairDir source flume1.7支持断点续传的功能,多目录
4. 采用kafka channel 这个就省去了sink
5. 对日志文件进行简单的ETL处理和区分
5.1 ETL拦截器
获取事件的 body 信息
根据 埋点的数据 包含的信息来区分 是 "启动日志"还是"事件日志"
5.1 类型区分拦截器
获取 事件的 body 和 header信息
根据 埋点的数据 包含的信息来区分 是 "启动日志"还是"事件日志"
给对应的日志 在header加上标识 topic
6. channel 选择器
根据事件的 header 的标识 将 "启动日志"还是"事件日志" 打到不同的 kafka topic
7. 开启flume 脚本 到 kafka channel 的脚本
7.1f1.sh
7.2
case $1 in
"start"){
for i in master slave1
do
echo " --------启动 $i 采集 flume-------"
ssh $i "nohup /usr/local/src/apache-flume-1.7.0-bin/bin/flume-ng agent --name a1 --conf-file /usr/local/src/apache-flume-1.7.0-bin/job/dir-log-flume-kafka.conf -Dflume.root.logger=INFO,LOGFILE > /usr/local/src/apache-flume-1.7.0-bin/job/logs/test 2>&1 &"
done
};;
"stop"){
for i in master slave1
do
echo " --------停止 $i 采集 flume-------"
ssh $i "ps -ef | grep dir-log-flume-kafka.conf | grep -v grep|awk '{print \$2}' | xargs kill"
done
};;
esac
7.3 解释命令行
ps -ef | grep SecondaryNameNode
ps -ef | grep SecondaryNameNode | grep -v grep
ps -ef | grep SecondaryNameNode | grep -v grep | awk '{print $2}'
ps -ef | grep SecondaryNameNode | grep -v grep | awk '{print $2}' | xargs kill
1. 查看主题: kafka-topics.sh --zookeeper master:2181 --list
2. 消费数据:kafka-console-consumer.sh --bootstrap-server master:9092 --from-beginning --topic topic_start
3. kafka 压力测试
自带测试
4. 配置多少台kafka
kafka机器数 = 2 * (峰值生成速度*副本数/100) + 1
f2.sh
flume 配置文件 slave2
/usr/local/src/apache-flume-1.7.0-bin/job/kafka-flume-hdfs.conf
注意:flume 消费kafka 写到 HDFS 的时候,默认是读一条数据写一个文件,这样就会参数大量的小文件
需要配置滚动时间
要变成Lzo压缩
flume内存优化
"-XMs4096m -Xmx4096 -Dcom.sum.managment,jmxremote"
source
taildir 多目录、断点续传 1.7版本后
数据重复 修改源码,修改成事务,或者下级去重
taildir 不支持递归遍历读取文件 默认不支持,修改源码
channle
file 可靠性高、效率底 100万 event
memory 可靠性底、效率高 100 event
kafka 可靠性高、效率高、旦下一级必须是kafka
sink
hdfs sink 需要注意小文件
时间 1小时 滚动一次 或者到达128m
文件名.lzo.tmp => 文件名.lzo
put 事务和 take 事务
"拦截器"
ETL拦截器
event events
body 就是日志数据
分类拦截器
根据 body 分类,再到 header 做标记
"选择器"
根据event 上做的标记 发送到不同的kafka topic
"监控器"
Ganglia