1. 用户行为日志
1.1 埋点
- 代码埋点
- 可视化埋点
- 全埋点
1.2 用户行为日志内容
- 页面浏览记录:基本信息=
用户信息(uuid, 设备ID)、时间信息、地理位置信息、设备信息、应用信息、渠道信息、页面信息
。- 动作记录:基本信息+动作目标信息。
- 曝光记录:基本信息+曝光对象相关信息,包括对象类型。
- 启动记录:基本信息+启动类型+开屏广告信息
- 错误记录:应用过程的报错信息
2. 安装搭建虚拟机
2.1 模版虚拟机base
- 最小化安装
- 必要软件安装
- 修改IP为静态
- 修改主机名和Hosts文件
- 关闭防火墙
- 创建一个普通用户, 配置sudo权限
- 创建opt目录下两个目录,并修改所属组和所属人
- module : 安装好的软件
- software:软件安装包
2.2 克隆三台虚拟机
- 修改主机名
sudo vim /etc/hostname
- 修改IP地址
sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
- 编写集群分发脚本xsync, 脚本放置在home/atguigu/bin路径下,之后分发该文件到其他虚拟机。
shell
#!/bin/bash
#1. 判断参数个数
if [ $# -lt 1 ]
then
echo Not Enough Arguement!
exit;
fi
#2. 遍历集群所有机器
for host in hadoop102 hadoop103 hadoop104
do
echo ==================== $host ====================
#3. 遍历所有目录,挨个发送
for file in $@
do
#4. 判断文件是否存在
if [ -e $file ]
then
#5. 获取父目录
pdir=$(cd -P $(dirname $file); pwd)
#6. 获取当前文件的名称
fname=$(basename $file)
ssh $host "mkdir -p $pdir"
rsync -av $pdir/$fname $host:$pdir
else
echo $file does not exists!
fi
done
done
该脚本分发环境变量时会出现问题,出现Permission denied错误。原因是无法发送root用户的文件,如果使用sudo后会出现找不到命令异常。原因是root用户对应的环境变量没有/home/atguigu/bin这个路径。为了解决该问题,需要给root用户也配置xsync的环境变量路径。而/usr/bin路径是root用户和atguigu用户共有的环境变量路径。因此,只需
sudo cp /home/atguigu/bin/xsync /usr/bin
路径下即可。
- 配置SSH免密登录
总共需要配置4次,102、103、104的atguigu用户和102的root用户都需要配置。也可以使用分发ssh目录的方式将配置简化为2次,但是有一定的风险,如果破解了hadoop102的密钥,即可远程登录所有主机。- hadoop102上生成公钥和私钥
ssh-keygen -t rsa
- 分发公钥和私钥 xsync .ssh/
- 切换为root用户后配置root用户的免密登录
- 分发root用户.ssh文件到其他主机
- hadoop102上生成公钥和私钥
- 安装JDK,配置环境变量,在
/etc/profile.d/myenv.sh
里面配置,使环境变量对登录用户和非登录用户都生效。ssh hadoop103就是非登录用户命令。创建好后,使用source myenv.sh命令使环境变量生效。
3. 安装hadoop
3.1 步骤
- 解压压缩包,修改文件名为hadoop
- 添加环境变量HADOOP_HOME
- 分发环境变量,并source使其生效
- 搭建原则:老大尽可能分开,小弟配置尽可能多的资源。
- 配置文件:
- core-site.xml:为hive开放代理权限
- hdfs-site.xml:副本数量改为1
- yarn-site.xml:
- aux-services: 当map任务结束后,使用aux来响应reduce的数据请求,释放map任务的资源。
- 容器内存:最大为4G,数值为4096
- 物理内存和虚拟内存检查,修改为关闭
- 开启日志聚集和设置日志保留时间
- mapred-site.xml:
- 指定MR运行在yarn调度器上
- 配置日志落盘
- workers: 指定小弟所在的主机,注意不能有空行和空格。
- 在
NN所在节点
进行格式化 hdfs namenode -format, 只能执行该命令一次。 - 在NN节点使用start-dfs.sh来启动Hadoop集群,并使用jpsall脚本查看进程是否正常启动。
- 在RM节点使用start-yarn.sh来启动yarn资源调度器。
- 启动历史服务器,
mapred --daemon start historyserver
- 在hadoop102:9870和hadoop103:8088和hadoop102:19888来查看集群,yarn任务调度器和历史服务器是否正常启动。
- 编写群起群关脚本hdp.sh
3.2 经验
- 存储多目录
- 参数调优
- dfs.namenode.handle.count: 并发上限,默认值为10,并发线程个数计算公式为20*ln(集群机器数量)
- 集群中内存利用率不高时,可以在yarn调节内存上限。
4. 安装zookeeper
4.1 介绍
给分布式框架提供统一协调服务,主要提供监听功能。使用场景有:
- Hadoop的HA模式,多个NN作为临时节点进行监听,进行备份节点的切换。
- kafka的配置文件的存储,可以只修改一份文件,其他分布式主机的配置文件会自动同步。
4.2 选举机制和监听器原理
- 选举机制:
- 半数机制,超过一般,注意不包括一半时才能选出Leader,因此主机数量一般为奇数个。
- 自私原则:投票时先投给自己
- 墙头草原则:数据新旧和myID大小
- 监听器原理:两个线程,connect用来发送;listen用来监听。
4.3 步骤
- 解压后修改文件名为zookeeper
- 配置zoo.cfg文件
- dataDir: 修改为/opt/module/zookeeper/zkData
- 增加配置参数,第一个端口号用于数据同步,第二个端口号用于选举。
shell
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
- 修改hadoop103, hadoop104主机中的myid内容为3和4
- 编写群起群关脚本
shell
#!/bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 启动 ------------
ssh $i "/opt/module/zookeeper/bin/zkServer.sh start"
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 停止 ------------
ssh $i "/opt/module/zookeeper/bin/zkServer.sh stop"
done
};;
"status"){
for i in hadoop102 hadoop103 hadoop104
do
echo ---------- zookeeper $i 状态 ------------
ssh $i "/opt/module/zookeeper/bin/zkServer.sh status"
done
};;
esac