数仓搭建(一)
一、准备
1.安装hadoop
见完全分布式运行模式
2.在hadoop103的bin目录中添加2个脚本
vim xsync(分发文件用)
vim xcall(在三台虚拟机上都执行同一个指令,并且将情况打印到控制台)
xsync:
!/bin/bash
#验证参数
if(($#!=1))
the
echo 请传入要分发的单个文件!
exit;
fi
#获取分发文件的绝对路径
dirpath=$(cd -P `dirname $1`; pwd)
filename=$(basename $1)
echo "要分发的文件路径是:$dirpath/$filename"
#获取当前的用户名
user=$(whoami)
#分发,前提是集群中的机器都有当前分发文件所在的父目录
for((i=102;i<=104;i++))
do
echo -----------------------hadoop$i---------------------
rsync -rvlt $dirpath/$filename $user@hadoop$i:$dirpath
done
xcall:
#!/bin/bash
#验证参数
if(($#==0))
then
echo 请传入要执行的命令!
exit;
fi
echo "要执行的命令是:$@"
#批量执行
for((i=102;i<=104;i++))
do
echo -----------------------hadoop$i---------------------
ssh hadoop$i $@
done
二、hadoop LZO压缩
1.解压
将编译好后的hadoop-lzo-0.4.20.jar 放入hadoop-3.1.3/share/hadoop/common/
[guochao@hadoop102 common]$ pwd
/opt/module/hadoop-3.1.3/share/hadoop/common
[guochao@hadoop102 common]$ ls
hadoop-lzo-0.4.20.jar
2.同步
[guochao@hadoop102 common]$ xsync hadoop-lzo-0.4.20.jar
3.修改配置
core-site.xml增加配置支持LZO压缩
<configuration>
<property>
<name>io.compression.codecs</name>
<value>
org.apache.hadoop.io.compress.GzipCodec,
org.apache.hadoop.io.compress.DefaultCodec,
org.apache.hadoop.io.compress.BZip2Codec,
org.apache.hadoop.io.compress.SnappyCodec,
com.hadoop.compression.lzo.LzoCodec,
com.hadoop.compression.lzo.LzopCodec
</value>
</property>
<property>
<name>io.compression.codec.lzo.class</name>
<value>com.hadoop.compression.lzo.LzoCodec</value>
</property>
</configuration>
4.同步
[guochao@hadoop102 hadoop]$ xsync core-site.xml
三、Zookeeper安装
1.传输
用 XShell 文件传输工具将 zookeeper-3.4.10导入到 opt 目录下面的 software 文件夹下面
2.解压
解压到/opt/module/
[guochao@hadoop102 software]$ tar -zxvf zookeeper-3.4.10 -C /opt/module/
3.创建datas目录
进入zookeeper中创建目录datas
[guochao@hadoop102 module] cd /opt/module/zookeeper-3.4.10/
[guochao@hadoop102 zookeeper-3.4.10]$mkdir datas
4.改名
进入zookeeper中的conf中将zoo_sample.cfg 改名为 zoo.cfg
[guochao@hadoop102 conf]$ mv zoo_sample.cfg zoo.cfg
5.编辑zoo.cfg
将datadir改为data的地址
/opt/module/zookeeper-3.4.10/datas
在空白处添加
server.102=hadoop102:2888:3888
server.103=hadoop103:2888:3888
server.104=hadoop104:2888:3888
6.创建myid文件
在datas文件中创建myid文件输入102
7.分发
[guochao@hadoop102 conf]$ xsync zoo.cfg
之后在其他虚拟机上更改myid
8.编写zookeeper的启动脚本
在hadoop102的/home/guochao/bin目录下创建脚本
[guochao@hadoop102 bin]$ vim zk.sh
在脚本中编写如下内容
#! /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
#!/bin/bash
if(($#!=1))
then
echo 请输入start或stop或status!
exit;
fi
if [ $1 = start ] || [ $1 = stop ] || [ $1 = status ]
then
xcall zkServer.sh $1
else
echo 请输入start或stop或status!
fi
增加脚本执行权限
[guochao@hadoop102 bin]$ chmod 777 zk.sh
Zookeeper集群启动脚本
[guochao@hadoop102 module]$ zk.sh start
Zookeeper集群停止脚本
[guochao@hadoop102 module]$ zk.sh stop
四、Flume安装
1.解压
2.分发
xsync
五、Kafka安装
1.解压
[guochaao@hadoop102 software]$ tar -zxvf kafka_2.11-0.11.0.2.tgz -C /opt/module/
2.修改配置文件
将delete的注释解开
将log.dirs的地址改为:
/opt/module/kafka/datas
在到下面将zookeeper.connect改为
hadoop102:2181,hadoop103:2181,hadoop104:2181
3.分发
退回module将kafka分发
Zookeeper要在kafka前启动
4.编写启动脚本kf
1)在/home/atguigu/bin目录下创建脚本kf.sh
[guochao@hadoop102 bin]$ vim kf.sh
在脚本中填写如下内容
#! /bin/bash
case $1 in
"start"){
for i in hadoop102 hadoop103 hadoop104
do
echo " --------启动 $i Kafka-------"
# 用于KafkaManager监控
ssh $i "export JMX_PORT=9988 && /opt/module/kafka_2.11-0.11.0.2/bin/kafka-server-start.sh -daemon /opt/module/kafka_2.11-0.11.0.2/config/server.properties "
done
};;
"stop"){
for i in hadoop102 hadoop103 hadoop104
do
echo " --------停止 $i Kafka-------"
ssh $i "/opt/module/kafka_2.11-0.11.0.2/bin/kafka-server-stop.sh stop"
done
};;
esac
2)增加脚本执行权限
[guochao@hadoop102 bin]$ chmod 777 kf.sh
3)kf集群启动脚本
[guochao@hadoop102 module]$ kf.sh start
4)kf集群停止脚本
[guochao@hadoop102 module]$ kf.sh stop
六、拦截器,第一层采集通道
1.创建目录myagents
进入Hadoop102的flume中创建目录myagents
[guochao@hadoop102 apache-flume-1.7.0-bin]$ mkdir myagents
2.在myagents中创建test.conf文件
[guochao@hadoop102 myagents]$ vim test.conf
输入
#a1是agent的名称,a1中定义了一个叫r1的source,如果有多个,使用空格间隔
a1.sources = r1
a1.sinks = k1
a1.channels = c1
#组名名.属性名=属性值
a1.sources.r1.type=TAILDIR
a1.sources.r1.filegroups=f1
#读取/tmp/logs/app-yyyy-mm-dd.log ^代表以xxx开头$代表以什么结尾 .代表匹配任意字符
#+代表匹配任意位置
a1.sources.r1.filegroups.f1=/tmp/logs/^app.+.log$
#JSON文件的保存位置
a1.sources.r1.positionFile=/opt/module/flume/test/log_position.json
#定义拦截器
a1.sources.r1.interceptors = i1
a1.sources.r1.interceptors.i1.type = com.atguigu.dw.flume.MyInterceptor$Builder
#定义sink
a1.sinks.k1.type=logger
#定义chanel
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000
#连接组件 同一个source可以对接多个channel,一个sink只能从一个channel拿数据!
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1
3.分发
[guochao@hadoop102 myagents]$ xsync test.conf
|