虚拟机群上搭建大数据框架

本文详细介绍了在虚拟机群上搭建大数据框架的过程,包括安装LZO、Zookeeper、Flume、Kafka、MySQL、sqoop、Hive,并进行参数调优和集群管理。涵盖了从环境准备、日志生成、时间同步到各组件的安装配置和数据同步策略。
摘要由CSDN通过智能技术生成

概况

技术选型

在这里插入图片描述
在这里插入图片描述图片来自尚硅谷。

服务器规划

服务名称 子服务 hadoop102 hadoop103 hadoop104
HDFS NameNode +
HDFS DataNode + + +
HDFS SecondaryNameNode +
Yarn NodeManager + + +
Yarn ResourceManager +
Zookeeper Zookeeper Server + + +
Flume(日志) Flume + +
Kafka Kafka + + +
Flume(消费) Flume +
Hive Hive +
MySQL MySQL +
Sqoop Sqoop +
Presto Coordinator +
Presto Worker + +
Azkaban Azkaban WebServer +
Azkaban AzkabanExecutorServer +
Druid Druid + + +
Kylin +
HBase HMaster +
HBase HRegionServer + + +
Superset +
Atlas +
Solr Jar +
Griffin +

准备工作

先搭建好集群,确保hadoop各个模块可以启动。

安装LZO

下载包hadoop-lzo-0.4.20.jar,放在/opt/module/hadoop-2.8.2/share/hadoop/common目录下,然后用脚本分发到103、104 。

[root@hadoop102 common]# xsync hadoop-lzo-0.4.20.jar

core-site.xml 增加配置支持 LZO 压缩

[root@hadoop103 hadoop-2.8.2]# cd etc/hadoop/
[root@hadoop103 hadoop]# vim core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<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>

分发

[root@hadoop102 hadoop]# xsync core-site.xml

真正使用时还需要对上传文件创建索引

[root@hadoop102 module]# hadoop jar /opt/module/hadoop-2.8.2/share/hadoop/common/hadoop-lzo-0.4.20.jar com.hadoop.compression.lzo.DistributedLzoIndexer /input/filename.lzo

其中,/input是hdfs中文件所在目录。

参数调优

NameNode 有一个工作线程池,用来处理不同 DataNode 的并发心跳以及客户端并发 的元数据操作。 对于大集群或者有大量客户端的集群来说,通常需要增大参数。

dfs.namenode.handler.count 的默认值10,当参数值为20*math.log(n)时最优,n是机器的台数。

修改hdfs-site.xml

<property>
    <name>dfs.namenode.handler.count</name> 
    <value>21</value> 
</property>

安装Zookeeper

详见Zookeeper,这里主要介绍Zookeeper的集群启动脚本,脚本一般存放在102的/root/bin目录下。

脚本如下

#! /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

之后给与权限

[root@hadoop102 bin]# chmod 777 zk.sh

日志生成

将日志包log-collector-1.0-SNAPSHOT-jar-with-dependencies.jar拷贝到102和103上。

执行java命令,打印日志到指定文件

[root@hadoop104 module]# java -classpath log-collector-1.0-SNAPSHOT-jar-with-dependencies.jar com.atguigu.appclient.AppMain >/opt/module/test.log

也可以不输出

[root@hadoop102 module]# java -classpath log-collector-1.0-SNAPSHOT-jar-with-dependencies.jar com.atguigu.appclient.AppMain 1>/dev/null 2>/dev/null 

这里/dev/null是黑洞,所有进入的内容都会消失。

  • 标准输入 0:从键盘获得输入 /proc/self/fd/0

  • 标准输出 1:输出到屏幕(即控制台) /proc/self/fd/1

  • 错误输出 2:输出到屏幕(即控制台) /proc/self/fd/2

最后,在/tmp/log目录下可以看到日志。

下面写日志集群脚本lg.sh,脚本在/root/bin目录下

for i in hadoop102 hadoop103
do
	echo ---------------$i生成日志---------------
	ssh $i "java -classpath /opt/module/log-collector-1.0-SNAPSHOT-jar-with-dependencies.jar com.atguigu.appclient.AppMain $1 $2 >/dev/null 2>&1 &"
done

授权

[root@hadoop102 bin]# chmod 777 lg.sh

时间同步

时间同步脚本dt.sh

#! /bin/bash

for i in hadoop102 hadoop103 hadoop104
do
	echo ---------------$i同步时间---------------
	ssh $i "sudo date -s $1"
done

授权

[root@hadoop102 bin]# chmod 777 dt.sh

Linux环境变量

Linux有两种Shell,登录式和非登录式(SSH连接)。登录式会自动加载/etc/profile,非登录式会自动加载~/.bashrc

/etc/profile里面的环境变量是对系统内所有用户有效,~/.bashrc只对某一特定用户有效。

所以,要把/etc/profile的环境变量追加到~/.bashrc确保SSH访问时不会出错。

[root@hadoop102 ~]# cat /etc/profile >> ~/.bashrc
[root@hadoop103 ~]# cat /etc/profile >> ~/.bashrc
[root@hadoop104 ~]# cat /etc/profile >> ~/.bashrc

状态查询脚本

统一查询状态

#! /bin/bash

for i in hadoop102 hadoop103 hadoop104
do
	echo ---------------$i状态查询---------------
	ssh $i "$*"
done

安装Flume(日志)

采集日志的Flume安装在102、103上,104后面安装消费Flume。

安装包解压缩后,修改flume-env.sh.template文件名称为flume-env.sh,文件路径在/opt/module/flume-1.7.0/conf下

[root@hadoop102 conf]# mv flume-env.sh.template flume-env.sh

然后修改flume-env.sh文件的JAVA_HOME。

再同步分发到103、104(这里也要,后面104也要上flume),这样就安装完成。

Flume有两个组件Source、Channel

  • Source:包括Taildir Source、Exec Source、Spooling Source,这里使用Taildir Source,Taildir Source可以断点续传、多目录。
  • Channel:这里采用Kafka Channel,省去了Sink,提高了效率。

下面是具体配置,配置目录在/opt/module/flume-1.7.0/conf,新建file-flume-kafka.conf文件,名字可以自定义(见名知意即可)。

a1.sources=r1	#组件定义
a1.channels=c1 c2
#configure source
a1.sources.r1.type = TAILDIR	#taildir方式读数据
a1.sources.r1.positionFile = /opt/module/flume-1.7.0/test/log_position.json	#记录日志读取位置
a1.sources.r1.filegroups = f1
a1.sources.r1.filegroups.f1 = /tmp/logs/app.+	#读取日志位置
a1.sources.r1.fileHeader = true
a1.sources.r1.channels = c1 c2
#interceptor
a1.sources.r1.interceptors = i1 i2
a1.sources.r1.interceptors.i1.type = com.hxr.flume.interceptor.LogETLInterceptor$Builder	#ETL拦截器
a1.sources.r1.interceptors.i2.type = com.hxr.flume.interceptor.LogTypeInterceptor$Builder	#日志类型拦截器
a1.sources.r1.selector.type=multiplexing	#根据日志类型分数据
a1.sources.r1.selector.header=topic
a1.sources.r1.selector.mapping.topic_start=c1
a1.sources.r1.selector.mapping.topic_event=c2
#configure channel
a1.channels.c1.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c1.kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092,hadoop104:9092
a1.channels.c1.kafka.topic = topic_start	#start类型的发往c1
a1.channels.c1.parseAsFlumeEvent=false
a1.channels.c1.kafka.consumer.group.id = flume-consumer
a1.channels.c2.type = org.apache.flume.channel.kafka.KafkaChannel
a1.channels.c2.kafka.bootstrap.servers = hadoop102:9092,hadoop103:9092,hadoop104:9092
a1.channels.c2.kafka.topic = topic_event	#event类型的发往c2
a1.channels.c2.parseAsFlumeEvent=false
a1.channels.c2.kafka.consumer.group.id = flume-consumer

将配置分发到103、104上。

下面接着实现拦截器,拦截器打包后放在/flume-1.7.0/lib目录下,然后分发到103、104。

在102、103上打开Flume

[root@hadoop102 flume-1.7.0]# bin/flume-ng agent --name a1 --conf-file conf/file-flume-kafka.conf &
[root@hadoop103 flume-1.7.0]# bin/flume-ng agent --name a1 --conf-file conf/file-flume-kafka.conf &

为了快速启动多台服务器,可以使用脚本

#! /bin/bash

case $1 in
"start"){
   
	for i in hadoop102 hadoop103
	do
		echo ---------------启动$i采集flume---------------
		ssh $i "nohup /opt/module/flume-1.7.0/bin/flume-ng agent --name a1 --conf-file /opt/module/flume-1.7.0/conf/file-flume-kafka.conf 
		 -Dflume.root.logger=
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值