Desarrollo de canal de plataforma de Big Data

Canal artificial

1. Fondo de canal

1.1 El problema

Los datos de HDFS, MapReduce, HBase te los da tu jefe

Necesita código para manejar una empresa en el trabajo, y el jefe solo mencionará los requisitos. Primero, sabe cómo es el tipo de datos.

Los datos de los pedidos, los datos del usuario y los datos del producto se almacenan en mysql,

Alta eficiencia, porque seleccione * de productos cuyo nombre sea% s%

Los hombres ven un determinado producto más que las mujeres, ¡pero no en la base de datos!

En otras palabras, la base de datos almacenará datos, ¡pero algunas empresas no tienen datos!

¡Así que tenemos que recopilar datos!

1.2 Recopilar datos

Fuentes de datos:

  • expediente
  • base de datos
  • Solo rastreador para datos públicos, es proporcionar uso compartido para que todos puedan usar
  • Cooperación, compra (WeChat + JD) atracción de tráfico, intercambio de datos, desviación

Pregunta 1: ¿Por qué no hay Taobao en WeChat?

Problemas encontrados:

¿Cuántas veces una persona mira un producto ?, ¿cuál
compra
más veces ?
Mire los datos del producto (datos fríos ) cuando la cantidad de datos sea grande, no se colocarán en la base de datos porque deben calcularse

Datos fríos: los datos generalmente no cambian, datos históricos, datos de registro

Tipo de formato

  • coma csv
  • tabla tsv
  • json
  • xml
  • texto
  • Línea
  • De columna
  • compresión

1.3 Soluciones

Conclusión final: es necesario resolver la inconsistencia del formato de datos y la ubicación de almacenamiento.
Esperanza: un componente puede resolver todos los problemas

http://hadoop.apache.org/
http://flume.apache.org/
no en la página de inicio, donado por cloudera

1.4 Problemas existentes

Flujo de procesamiento de big data:

  • recopilación de datos
  • ETL de datos
  • almacenamiento de datos
  • Cálculo y análisis de datos
  • Visualización de datos

Dificultades en la recopilación de datos:

  • Varias fuentes de datos
  • Gran cantidad de datos, cambios rápidos, transmisión de datos
  • Evite los datos duplicados
  • Asegurar la calidad de los datos
  • Rendimiento de la recopilación de datos

nombre:

  • flume OG (generación original) versión anterior a 1.0
  • Después de flume NG (próxima generación) 1.0

2. Introducción a Flume

Ventajas: fiabilidad, horizontalidad.

Pasos generales:

  1. Recopilación de datos de canal
  2. Limpieza, cálculo de MapReduce
  3. Guardar en HBase
  4. Estadísticas y análisis de Hive
  5. Guardar en la tabla de Hive
  6. Exportación de Sqoop
  7. MySQL
  8. Visualización web

2.1 Introducción a Flume

  • Evento: Es la unidad básica de transmisión de datos de Flume, que envía datos desde el origen al destino final en forma de eventos.
  • Cliente: Envuelva un registro original en Eventos y envíelo a una o más entidades
  • Agente: Transferir eventos de un nodo a otro nodo o destino final

El agente incluye fuente, canal, sumidero

  • Fuente: se utiliza para conectarse a la fuente de datos, aceptar el evento o empaquetar los datos recopilados en el evento
  • Canal: Incluyendo eventos de conducción y sondeo de dos tipos.

La fuente debe estar asociada con al menos un canal.
Puede funcionar con cualquier número de fuentes y receptores. Se
utiliza para almacenar en caché los eventos entrantes, conectar la fuente y el receptor, y ejecutarse en la memoria.

  • sumidero: Almacene el evento en el terminal de destino final, como HDFS, HBase

Similar al grupo de búfer de datos JDBC, alto rendimiento sin insertar uno por uno

2.2 Arquitectura de Flume

2.2.1 Un solo agente recopila datos

2.2.2 Recopilación de datos de la serie Multi-Agent

Inserte la descripción de la imagen aquí

2.2.3 Recopilación de datos en serie combinada de agentes múltiples

Inserte la descripción de la imagen aquí

2.2.4 Recopilación de datos de series de fusión de agentes múltiples

Inserte la descripción de la imagen aquí

3. Instalación y configuración del canal

3.1 Cargue el paquete de instalación en CentOS

Descomprima el paquete de instalación en el directorio hadoop

tar -zxvf apache-flume-1.9.0-bin.tar.gz -C /usr/hadoop

3.2 Configurar variables de entorno

vi /etc/profile

Agregue el siguiente código al final, guarde y salga

export FLUME_HOME=/usr/hadoop/apache-flume-1.9.0-bin
export PATH=$FLUME_HOME/bin:$PATH

Configuración efectiva

source /etc/profile

3.3 Entorno de verificación

flume-ng version

Aparecen los siguientes resultados y la configuración es correcta

Flume 1.9.0
Source code repository: https://git-wip-us.apache.org/repos/asf/flume.git
Revision: d4fcab4f501d41597bc616921329a4339f73585e
Compiled by fszabo on Mon Dec 17 20:45:25 CET 2018
From source with checksum 35db629a3bda49d23e9b3690c80737f9

3.4 Configurar archivo Flume

//
reglas de flume en /usr/hadoop/apache-flume-1.9.0-bin :

  1. Especifique el nombre del Agente y los nombres de los distintos componentes del Agente especificado
  2. Especificar fuente
  3. Especificar canal
  4. Fregadero designado
  5. Especificar la relación entre Fuente, Canal y Receptor

https://centos.pkgs.org/

Descargue el paquete de instalación de telnet e instálelo

rpm -ivh your-package  

Cree y modifique archivos de configuración en Flume. Tenga en cuenta que se crea en /hadoop/apache-flume-1.9.0-bin

mkdir agent

Abrir bajo el agente: vi netcat-logger.properties

Añadir:

Configure el nombre del agente, la fuente, el canal y el receptor

# 配置Agent名称、Source、Channel、Sink的名称
a1.sources=r1
a1.channels=c1
a1.sinks=k1

# 配置Channel组件属性c1
a1.channels.c1.type=memory
a1.channels.c1.capacity=1000

# 配置Source组件属性r1
a1.sources.r1.type=netcat
a1.sources.r1.bind=localhost
a1.sources.r1.port=8888

# 配置Sink组件属性k1
a1.sinks.k1.type=logger

#连接关系
a1.sources.r1.channels=c1
a1.sinks.k1.channel=c1

Guardar y Salir

No se preocupe> inicie Agent para recopilar datos

-c conf:指定flume自身配置文件所在目录
-n a1:指定agent的名字
-f agent/netcat-logger.properties:指定采集规则目录
-D:Java配置参数

Ingrese el siguiente comando bajo el agente:

flume-ng agent -c conf -n a1 -f ../agent/netcat-logger.properties -Dflume.root.logger=INFO,console

Inserte la descripción de la imagen aquí

Abra el maestro en una nueva ventana y use el comando telnet; telnet localhost 8888 ingrese "hola"

Inserte la descripción de la imagen aquí

Continuar ingresando evento para generar evento

Inserte la descripción de la imagen aquí

4. Componentes del canal

4.1 Fuente

Las fuentes más utilizadas en Flume incluyen NetCat, Avro, Exec, Spooling Directory, Taildir y las fuentes también se pueden personalizar de acuerdo con las necesidades de los escenarios comerciales. La introducción específica es la siguiente.

4.1.1 Fuente NetCat

NetCat Source puede usar dos protocolos, TCP y UDP. El método de uso es básicamente el mismo. Transmite datos monitoreando la IP y el puerto especificados. Convierte cada línea de datos que monitorea en un Evento y lo escribe en el Canal. (Los parámetros obligatorios están marcados con @, lo mismo a continuación)

canales @ -

type @ -El tipo se especifica como: netcat

bind @ -bind nombre de máquina o dirección IP

puerto @ -número de puerto

max-line-length

Nombre de la propiedad Defecto Descripción
canales @ -
tipo@ - Tipo especificado como: netcat
enlazar@ - Vincular el nombre de la máquina o la dirección IP
Puerto@ - El número de puerto
max-line-length 512 Número máximo de bytes en una línea
Ack-every-event cierto Regrese OK al evento aceptado exitosamente
selector.type replicando Tipo de selector de replicación o multiplexación
selector.* Parámetros relacionados con el selector
interceptores - Lista de interceptores, separados por espacios
interceptores. * Parámetros relacionados con el interceptor

4.1.2 Fuente Avro

Los agentes en diferentes hosts pueden usar fuentes para transmitir datos a través de la red. Generalmente, aceptan datos de clientes Avro o existen en pares con el Avro Sink del agente de nivel superior.

Nombre de la propiedad Defecto Descripción
canales @ -
tipo@ - Tipo especificado como: avro
enlazar@ - Escuchando nombre de host o dirección IP
Puerto@ - El número de puerto
hilos - Número máximo de subprocesos que se pueden utilizar para la transmisión
selector.type
selector.*
interceptores - Lista de interceptores
interceptores. *
tipo de compresión ninguna Se puede configurar en "ninguno" o "desinflar". El tipo de compresión debe coincidir con AvroSource

4.1.3 Fuente ejecutiva

Exec source transmite los datos de resultados ejecutando un comando Unix dado, como cat, tail -F, etc., con un alto rendimiento en tiempo real, pero una vez que el proceso del Agente tiene un problema, puede causar la pérdida de datos.

Nombre de la propiedad Defecto Descripción
canales @ -
tipo@ - El tipo se especifica como: exec
mando@ - Comandos a ejecutar
cáscara - Archivo de script de shell para ejecutar el comando
reiniciar el acelerador 10000 Reiniciar tiempo de espera
reiniciar falso Si la ejecución del comando falla, si reiniciar
logStdErr falso Ya sea para registrar el registro de errores
tamaño del lote 20 El número máximo de registros escritos en el canal en lotes
batchTimeout 3000 Tiempo máximo de espera para datos de escritura por lotes (ms)
selector.type replicando Tipo de selector de replicación o multiplexación
selector.* Otros parámetros del selector
interceptores - Lista de interceptores, separados por múltiples espacios
interceptores. *

4.1.4 Spooling Directory Source

Al monitorear una carpeta para convertir el contenido del nuevo archivo en datos de transmisión de eventos, la característica es que no se perderán datos. Dos puntos a tener en cuenta al usar Spooling Directory Source son:

1. No se pueden realizar cambios en los archivos recién agregados en la carpeta supervisada.

2.新增到监控文件夹的文件名称必须是唯一的。由于是对整个新增文件的监控,Spooling Directory Source的实时性相对较低,不过可以采用对文件高粒度分割达到近似实时。

Property Name Default Description
channels@
type@ 类型指定:spooldir.
spoolDir@ 被监控的文件夹目录
fileSuffix .COMPLETED 完成数据传输的文件后缀标志
deletePolicy never 删除已经完成数据传输的文件时间:never or immediate
fileHeader false 是否在header中添加文件的完整路径信息
fileHeaderKey file 如果header中添加文件的完整路径信息时key的名称
basenameHeader false 是否在header中添加文件的基本名称信息
basenameHeaderKey basename 如果header中添加文件的基本名称信息时key的名称
includePattern ^.*$ 使用正则来匹配新增文件需要被传输数据的文件
ignorePattern ^$ 使用正则来忽略新增的文件
trackerDir .flumespool 存储元数据信息目录
consumeOrder oldest 文件消费顺序:oldest, youngest and random.
maxBackoff 4000 如果channel容量不足,尝试写入的超时时间,如果仍然不能写入,则会抛出ChannelException
batchSize 100 批次处理粒度
inputCharset UTF-8 输入码表格式
decodeErrorPolicy FAIL 遇到不可解码字符后的处理方式:FAIL,REPLACE,IGNORE
selector.type replicating 选择器类型:replicating or multiplexing
selector.* 选择器其他参数
interceptors 拦截器列表,空格分隔
interceptors.*

4.1.5 Taildir Source

可以实时的监控指定一个或多个文件中的新增内容,由于该方式将数据的偏移量保存在一个指定的json文件中,即使在Agent挂掉或被kill也不会有数据的丢失,需要注意的是,该Source不能在Windows上使用。

Property Name Default Description
channels@
type@ 指定类型:TAILDIR.
filegroups@ 文件组的名称,多个空格分隔
filegroups.@ 被监控文件的绝对路径
positionFile ~/.flume/taildir_position.json 存储数据偏移量路径
headers… Header key的名称
byteOffsetHeader false 是否添加字节偏移量到key为‘byteoffset’值中
skipToEnd false 当偏移量不能写入到文件时是否跳到文件结尾
idleTimeout 120000 关闭没有新增内容的文件超时时间(毫秒)
writePosInterval 3000 在positionfile 写入每一个文件lastposition的时间间隔
batchSize 100 批次处理行数
fileHeader false 是否添加header存储文件绝对路径
fileHeaderKey file fileHeader启用时,使用的key

4.2 Channels

官网提供的Channel有多种类型可供选择,这里介绍Memory Channel和File Channel。

4.2.1 Memory Channel

Memory Channel是使用内存来存储Event,使用内存的意味着数据传输速率会很快,但是当Agent挂掉后,存储在Channel中的数据将会丢失。

Property Name Default Description
type@ 类型指定为:memory
capacity 100 存储在channel中的最大容量
transactionCapacity 100 从一个source中去或者给一个sink,每个事务中最大的事件数
keep-alive 3 对于添加或者删除一个事件的超时的秒钟
byteCapacityBufferPercentage 20 定义缓存百分比
byteCapacity see description Channel中允许存储的最大字节总数

4.2.2 File Channel

File Channel使用磁盘来存储Event,速率相对于Memory Channel较慢,但数据不会丢失。

Property Name Default Description
type@ 类型指定:file.
checkpointDir ~/.flume/file-channel/checkpoint checkpoint目录
useDualCheckpoints false 备份checkpoint,为True,backupCheckpointDir必须设置
backupCheckpointDir 备份checkpoint目录
dataDirs ~/.flume/file-channel/data 数据存储所在的目录设置
transactionCapacity 10000 Event存储最大值
checkpointInterval 30000 checkpoint间隔时间
maxFileSize 2146435071 单一日志最大设置字节数
minimumRequiredSpace 524288000 最小的请求闲置空间(以字节为单位)
capacity 1000000 Channel最大容量
keep-alive 3 一个存放操作的等待时间值(秒)
use-log-replay-v1 false Expert: 使用老的回复逻辑
use-fast-replay false Expert: 回复不需要队列
checkpointOnClose true

4.3 Sinks

Flume常用Sinks有Log Sink,HDFS Sink,Avro Sink,Kafka Sink,当然也可以自定义Sink。

4.3.1 Logger Sink

Logger Sink以INFO 级别的日志记录到log日志中,这种方式通常用于测试。

Property Name Default Description
channel@
type@ 类型指定:logger

4.3.2 HDFS Sink

Sink数据到HDFS,目前支持text 和 sequence files两种文件格式,支持压缩,并可以对数据进行分区,分桶存储。

Name Default Description
channel@
type@ 指定类型:hdfs
hdfs.path@ HDFS的路径 hdfs://namenode/flume/webdata/
hdfs.filePrefix FlumeData 保存数据文件的前缀名
hdfs.fileSuffix 保存数据文件的后缀名
hdfs.inUsePrefix 临时写入的文件前缀名
hdfs.inUseSuffix .tmp 临时写入的文件后缀名
hdfs.rollInterval 30 间隔多长将临时文件滚动成最终目标文件,单位:秒, 如果设置成0,则表示不根据时间来滚动文件
hdfs.rollSize 1024 当临时文件达到多少(单位:bytes)时,滚动成目标文件, 如果设置成0,则表示不根据临时文件大小来滚动文件
hdfs.rollCount 10 当 events 数据达到该数量时候,将临时文件滚动成目标文件,如果设置成0,则表示不根据events数据来滚动文件
hdfs.idleTimeout 0 当目前被打开的临时文件在该参数指定的时间(秒)内, 没有任何数据写入,则将该临时文件关闭并重命名成目标文件
hdfs.batchSize 100 每个批次刷新到 HDFS 上的 events 数量
hdfs.codeC 文件压缩格式,包括:gzip, bzip2, lzo, lzop, snappy
hdfs.fileType SequenceFile 文件格式,包括:SequenceFile, DataStream,CompressedStre, 当使用DataStream时候,文件不会被压缩,不需要设置hdfs.codeC; 当使用CompressedStream时候,必须设置一个正确的hdfs.codeC值;
hdfs.maxOpenFiles 5000 最大允许打开的HDFS文件数,当打开的文件数达到该值,最早打开的文件将会被关闭
hdfs.minBlockReplicas HDFS副本数,写入 HDFS 文件块的最小副本数。 该参数会影响文件的滚动配置,一般将该参数配置成1,才可以按照配置正确滚动文件
hdfs.writeFormat Writable 写 sequence 文件的格式。包含:Text, Writable(默认)
hdfs.callTimeout 10000 执行HDFS操作的超时时间(单位:毫秒)
hdfs.threadsPoolSize 10 hdfs sink 启动的操作HDFS的线程数
hdfs.rollTimerPoolSize 1 hdfs sink 启动的根据时间滚动文件的线程数
hdfs.kerberosPrincipal HDFS安全认证kerberos配置
hdfs.kerberosKeytab HDFS安全认证kerberos配置
hdfs.proxyUser 代理用户
hdfs.round false 是否启用时间上的”舍弃”
hdfs.roundValue 1 时间上进行“舍弃”的值
hdfs.roundUnit second 时间上进行”舍弃”的单位,包含:second,minute,hour
hdfs.timeZone Local Time 时区。
hdfs.useLocalTimeStamp false 是否使用当地时间
hdfs.closeTries 0 Number hdfs sink 关闭文件的尝试次数;如果设置为1,当一次关闭文件失败后,hdfs sink将不会再次尝试关闭文件, 这个未关闭的文件将会一直留在那,并且是打开状态; 设置为0,当一次关闭失败后,hdfs sink会继续尝试下一次关闭,直到成功
hdfs.retryInterval 180 hdfs sink 尝试关闭文件的时间间隔, 如果设置为0,表示不尝试,相当于于将hdfs.closeTries设置成1
serializer TEXT 序列化类型
serializer.*

4.3.3 Avro Sink

Nombre de la propiedad Defecto Descripción
canal@ -
tipo@ - Tipo especificado: avro.
nombre de host @ - Nombre de host o IP
Puerto@ - El número de puerto
tamaño del lote 100 Número de eventos por lotes
tiempo de espera de conexión 20000 El tiempo de conexión expiro
pide tiempo fuera 20000 Pide tiempo fuera
tipo de compresión ninguna Tipo de compresión, "ninguna" o "desinflar".
nivel de compresión 6 Nivel de compresión, 0 significa sin compresión, cuanto mayor sea el número 1-9, mayor será la relación de compresión
ssl falso Usar cifrado ssl

4.3.4 Fregadero Kafka

Para transferir datos a Kafka, debe prestar atención a la compatibilidad de la versión Flume y la versión Kafka

Nombre de la propiedad Defecto Descripción
tipo - Tipo especificado: org.apache.flume.sink.kafka.KafkaSink
kafka.bootstrap.servers - Dirección de servicio de Kafka
kafka.topic tema-canal-predeterminado tema kafka
FlumeBatchSize 100 Número de eventos escritos en kafka en lotes

5. Use Flume para monitorear carpetas

5.1 Generar archivos de prueba

Operar en el nodo maestro

mkdir wallasunRui-log
cd wallasunRui-log
vi 1.log

Siéntase libre de agregar contenido al archivo 1.log wallasunRui

cp 1.log 2.log

5.2 Archivo de configuración

Cree el archivo de configuración spooldir-hdfs.properties en la carpeta del agente

#agent名, source、channel、sink的名称
agent1.sources = source1
agent1.channels = channel1
agent1.sinks = sink1

#配置source
agent1.sources.source1.type = spooldir
agent1.sources.source1.spoolDir = /usr/wallasunRui-log
agent1.sources.source1.fileHeader=false

#配置拦截器
agent1.sources.source1.interceptors=i1
agent1.sources.source1.interceptors.i1.type = host
agent1.sources.source1.interceptors.i1.hostHeader = hostname

# 配置sink
agent1.sinks.sink1.type = hdfs
agent1.sinks.sink1.hdfs.path =hdfs://master:8020/flume-log/%y-%m-%d/%H-%M
agent1.sinks.sink1.hdfs.filePrefix = events
#最大同时打开文件的数量
agent1.sinks.sink1.hdfs.maxOpenFiles = 5000
#批次传输的个数
agent1.sinks.sink1.hdfs.batchSize= 100
agent1.sinks.sink1.hdfs.fileType = DataStream
agent1.sinks.sink1.hdfs.writeFormat =Text
#HDFS上的文件达到128M时生成一个文件
agent1.sinks.sink1.hdfs.rollSize = 102400
agent1.sinks.sink1.hdfs.rollCount = 1000000
#HDFS上的文件达到60秒生成一个文件
agent1.sinks.sink1.hdfs.rollInterval = 60
agent1.sinks.sink1.hdfs.useLocalTimeStamp = true

#配置channel
agent1.channels.channel1.type = memory
agent1.channels.channel1.keep-alive=120
agent1.channels.channel1.capacity = 10000
agent1.channels.channel1.transactionCapacity = 100

#组装source、channel、sink
agent1.sources.source1.channels = channel1
agent1.sinks.sink1.channel = channel1

5.3 Ejecutar canal

Copie el archivo de configuración de hadoop en la configuración de flume

cp core-site.xml hdfs-site.xml /usr/hadoop/apache-flume-1.9.0-bin/conf

Ingrese a la carpeta flume / bin

flume-ng agent -c conf -n agent1 -f ../agent/spooldir-hdfs.properties

Parámetros opcionales: deje que la consola muestre datos

-Dflume.root.logger=INFO,console

Ingrese yoseng-log y cambie el nombre del archivo

1.log.COMPLETED  2.log.COMPLETED

Ingrese a la interfaz web para ver el directorio hdfs y ver el archivo de eventos generado

http://192.168.147.10:50070/explorer.html#/flume-log

O ver a través del código

hadoop fs -ls /flume-log/
hdfs dfs -ls /flume-log

5.4 Resumen

  1. spooldir se usa para monitorear carpetas, si se agrega un archivo a la carpeta, será detectado
  2. Cuando el sufijo del nombre de archivo es '.COPLETED', el canal no
  3. El contenido del archivo cambia y no se recopilará

Supongo que te gusta

Origin blog.csdn.net/qq_46009608/article/details/108914063
Recomendado
Clasificación