数据采集平台项目(一)

1. 用户行为日志

1.1 埋点

  • 代码埋点
  • 可视化埋点
  • 全埋点

1.2 用户行为日志内容

  1. 页面浏览记录:基本信息=用户信息(uuid, 设备ID)、时间信息、地理位置信息、设备信息、应用信息、渠道信息、页面信息
    • 动作记录:基本信息+动作目标信息。
    • 曝光记录:基本信息+曝光对象相关信息,包括对象类型。
  2. 启动记录:基本信息+启动类型+开屏广告信息
  3. 错误记录:应用过程的报错信息

2. 安装搭建虚拟机

2.1 模版虚拟机base

  1. 最小化安装
  2. 必要软件安装
  3. 修改IP为静态
  4. 修改主机名和Hosts文件
  5. 关闭防火墙
  6. 创建一个普通用户, 配置sudo权限
  7. 创建opt目录下两个目录,并修改所属组和所属人
    • module : 安装好的软件
    • software:软件安装包

2.2 克隆三台虚拟机

  1. 修改主机名 sudo vim /etc/hostname
  2. 修改IP地址 sudo vim /etc/sysconfig/network-scripts/ifcfg-ens33
  3. 编写集群分发脚本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路径下即可。

  1. 配置SSH免密登录
    总共需要配置4次,102、103、104的atguigu用户和102的root用户都需要配置。也可以使用分发ssh目录的方式将配置简化为2次,但是有一定的风险,如果破解了hadoop102的密钥,即可远程登录所有主机。
    • hadoop102上生成公钥和私钥ssh-keygen -t rsa
    • 分发公钥和私钥 xsync .ssh/
    • 切换为root用户后配置root用户的免密登录
    • 分发root用户.ssh文件到其他主机
  2. 安装JDK,配置环境变量,在/etc/profile.d/myenv.sh里面配置,使环境变量对登录用户和非登录用户都生效。ssh hadoop103就是非登录用户命令。创建好后,使用source myenv.sh命令使环境变量生效。

3. 安装hadoop

3.1 步骤

  1. 解压压缩包,修改文件名为hadoop
  2. 添加环境变量HADOOP_HOME
  3. 分发环境变量,并source使其生效
  4. 搭建原则:老大尽可能分开,小弟配置尽可能多的资源。
  5. 配置文件:
    • 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: 指定小弟所在的主机,注意不能有空行和空格。
  6. NN所在节点进行格式化 hdfs namenode -format, 只能执行该命令一次。
  7. 在NN节点使用start-dfs.sh来启动Hadoop集群,并使用jpsall脚本查看进程是否正常启动。
  8. 在RM节点使用start-yarn.sh来启动yarn资源调度器。
  9. 启动历史服务器,mapred --daemon start historyserver
  10. 在hadoop102:9870和hadoop103:8088和hadoop102:19888来查看集群,yarn任务调度器和历史服务器是否正常启动。
  11. 编写群起群关脚本hdp.sh

3.2 经验

  1. 存储多目录
  2. 参数调优
    • dfs.namenode.handle.count: 并发上限,默认值为10,并发线程个数计算公式为20*ln(集群机器数量)
    • 集群中内存利用率不高时,可以在yarn调节内存上限。

4. 安装zookeeper

4.1 介绍

给分布式框架提供统一协调服务,主要提供监听功能。使用场景有:

  1. Hadoop的HA模式,多个NN作为临时节点进行监听,进行备份节点的切换。
  2. kafka的配置文件的存储,可以只修改一份文件,其他分布式主机的配置文件会自动同步。

4.2 选举机制和监听器原理

  • 选举机制:
    • 半数机制,超过一般,注意不包括一半时才能选出Leader,因此主机数量一般为奇数个。
    • 自私原则:投票时先投给自己
    • 墙头草原则:数据新旧和myID大小
  • 监听器原理:两个线程,connect用来发送;listen用来监听。

4.3 步骤

  1. 解压后修改文件名为zookeeper
  2. 配置zoo.cfg文件
    • dataDir: 修改为/opt/module/zookeeper/zkData
    • 增加配置参数,第一个端口号用于数据同步,第二个端口号用于选举。
shell 复制代码
server.2=hadoop102:2888:3888
server.3=hadoop103:2888:3888
server.4=hadoop104:2888:3888
  1. 修改hadoop103, hadoop104主机中的myid内容为3和4
  2. 编写群起群关脚本
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
相关推荐
Hsu_kk几秒前
Kafka 安装教程
大数据·分布式·kafka
Hello-Brand10 分钟前
Java核心知识体系10-线程管理
java·高并发·多线程·并发·多线程模型·线程管理
乐悠小码16 分钟前
数据结构------队列(Java语言描述)
java·开发语言·数据结构·链表·队列
史努比.17 分钟前
Pod控制器
java·开发语言
2的n次方_20 分钟前
二维费用背包问题
java·算法·动态规划
皮皮林55120 分钟前
警惕!List.of() vs Arrays.asList():这些隐藏差异可能让你的代码崩溃!
java
pblh12320 分钟前
2023_Spark_实验十五:SparkSQL进阶操作
大数据·分布式·spark
莳光.21 分钟前
122、java的LambdaQueryWapper的条件拼接实现数据sql中and (column1 =1 or column1 is null)
java·mybatis
给我整点护发素22 分钟前
Flink执行sql时报错
大数据·sql·flink
程序猿麦小七25 分钟前
基于springboot的景区网页设计与实现
java·spring boot·后端·旅游·景区