离线数仓
1、Lzo压缩
- (1)将编译好后的hadoop-lzo-0.4.20.jar 放入hadoop-2.7.2/share/hadoop/common/
[atguigu@hadoop103 common]$ pwd /opt/module/hadoop-2.7.2/share/hadoop/common [atguigu@hadoop103 common]$ ls hadoop-lzo-0.4.20.jar
- (2)同步hadoop-lzo-0.4.20.jar到hadoop102、hadoop104
[atguigu@hadoop103 common]$ xsync hadoop-lzo-0.4.20.jar
- (3)mapred-site.xml增加配置支持LZO压缩
- 添加以下内容
<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>
- (4)同步mapred-site.xml到hadoop103、hadoop104
[atguigu@hadoop103 hadoop]$ xsync mapred-site.xml
- (5)启动及查看集群
[atguigu@hadoop103 hadoop-2.7.2]$ hd start
- 或不用启动脚本
[atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-dfs.sh [atguigu@hadoop103 hadoop-2.7.2]$ sbin/start-yarn.sh
- (6)测试
yarn jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount -Dmapreduce.output.fileoutputformat.compress=true -Dmapreduce.output.fileoutputformat.compress.codec=com.hadoop.compression.lzo.LzopCodec /input /output
- (7)为lzo文件创建索引
hadoop jar ./share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /output
2、kafka
2.1、kafka 的安装
- (1)解压安装包
[atguigu@hadoop103 soft]$ tar -zxvf kafka_2.11-0.11.0.0.tgz -C /opt/module/
- (2)修改解压后的文件名称
[atguigu@hadoop103 module]$ mv kafka_2.11-0.11.0.0/ kafka
- (3)修改配置文件
[atguigu@hadoop103 kafka]$ cd config/ [atguigu@hadoop103 config]$ vi server.properties
- 将 broker.id=0 改为 103
- (4)配置环境变量
[atguigu@hadoop103 module]$ sudo vi /etc/profile #KAFKA_HOME export KAFKA_HOME=/opt/module/kafka export PATH=$PATH:$KAFKA_HOME/bin [atguigu@hadoop103 module]$ source /etc/profile
- (5)分发安装包
[atguigu@hadoop103 module]$ xsync kafka/
- 注意:分发之后配置其他机器的环境变量
- (6)分别在hadoop103和hadoop104上修改配置文件/opt/module/kafka/config/server.properties中的broker.id=102、broker.id=104(注:broker.id不得重复)
- (7)创建kafka集群的启动关闭脚本
[atguigu@hadoop103 bin]$ vim kf
- 内容如下
#!/bin/bash #只接受start和stop参数 if(($#!=1)) then echo 请输入start或stop! exit; fi if [ $1 = start ] then xcall kafka-server-start.sh -daemon $KAFKA_HOME/config/server.properties elif [ $1 = stop ] then xcall kafka-server-stop.sh else echo 请输入start或stop! fi
- (8)增加脚本执行权限
[atguigu@hadoop103 bin]$ chmod u+x kf
- (8)kf集群启动脚本
[atguigu@hadoop103 bin]$ kf start
- (9)kf集群停止脚本
[atguigu@hadoop103 bin]$ kf stop
2.2、kafka Manager 的使用
- 运行 kafka-manager
[atguigu@hadoop103 kafka-manager-1.3.3.15]$ bin/kafka-manager
[atguigu@hadoop103 kafka-manager-1.3.3.15]$ bin/kafka-manager > start.log 2>&1 &
(后台运行)- 从第一个中会显示端口号 (9000)
- 于网站中打开 hadoop103:9000
2.3、Kafka Monitor
- 上传jar包KafkaOffsetMonitor-assembly-0.4.6.jar到集群
- 在/opt/module/下创建kafkamonitor
- 将上传的jar包放入刚创建的目录下kafkamonitor文件夹中
- 在/opt/module/kafkamonitor目录下创建启动脚本start.sh,内容如下:
#!/bin/bash java -cp KafkaOffsetMonitor-assembly-0.2.0.jar \ com.quantifind.kafka.offsetapp.OffsetGetterWeb \ --offsetStorage kafka \ --kafkaBrokers hadoop102:9092,hadoop103:9092,hadoop104:9092 \ --kafkaSecurityProtocol PLAINTEXT \ --zk hadoop102:2181,hadoop103:2181,hadoop104:2181 \ --port 8086 \ --refresh 10.seconds \ --retain 2.days \ --dbName offsetapp_kafka &
- 启动KafkaMonitor
[atguigu@hadoop103 kafkamonitor]$ ./start.sh
- 登录页面hadoop103:8086端口查看详情
2.4、kafka tool
- 下载 kafka tool
2.5、 Kafka生产消息
[atguigu@hadoop103 kafka]$ bin/kafka-console-producer.sh \--broker-list hadoop102:9092 --topic topic_start>hello world>atguigu atguigu
2.6、Kafka消费消息
[atguigu@hadoop103 bin]$ kafka-console-consumer.sh
[atguigu@hadoop103 bin]$ kafka-console-consumer.sh --bootstrap-server hadoop102:9092 --topic test1
3、第一层采集通道
3.1、第一层采集脚本source 的选择
读取日志中的数据
- ExecSource:可以执行一个linux命令,例如tail -f 日志文件
注意:不用!不安全,可能丢数据 - SpoolingDirSource:可以读取一个目录中的文本文件!
注意:保证目录中没有重名的文件!保证目录中的文件都是封闭状态,一旦放入目录中,不能再继续写入 - TailDirSource:接近实时的读取指定文件!断电续传功能(目前使用此source)
3.2、KafkaChannel
优点
- 基于kafka的副本功能,提供了高可用性! event被存储在 kafka 中!即便 agent 挂掉或broker挂掉,依然可以让sink从channel中读取数据!
应用场景
- KafkaChannel 和 sink 和 source 一起使用,单纯作为 channel
- KafkaChannel+拦截器+source,只要source 把数据写入到kafka就完成了(目前使用场景)
- kafkachannel+sink,使用flume将kafka中的数据写入到其他的目的地,例如 hdfs!
- 为了在上述场景工作,kafkaChannel可以配置生产者和消费者参数