Galería de mapas mentales 23 puntos de conocimiento de big data y resumen de la entrevista (1)
Plantilla simple, que incluye conceptos básicos de Java, hadoop, colmena, teoría del almacén de datos, impala, Teoría del lago de datos y otros contenidos.
Editado a las 2024-01-18 15:05:07,Este es un mapa mental sobre una breve historia del tiempo. "Una breve historia del tiempo" es una obra de divulgación científica con una influencia de gran alcance. No sólo presenta los conceptos básicos de cosmología y relatividad, sino que también analiza los agujeros negros y la expansión. del universo. temas científicos de vanguardia como la inflación y la teoría de cuerdas.
¿Cuáles son los métodos de fijación de precios para los subcontratos de proyectos bajo el modelo de contratación general EPC? EPC (Ingeniería, Adquisiciones, Construcción) significa que el contratista general es responsable de todo el proceso de diseño, adquisición, construcción e instalación del proyecto, y es responsable de los servicios de operación de prueba.
Los puntos de conocimiento que los ingenieros de Java deben dominar en cada etapa se presentan en detalle y el conocimiento es completo, espero que pueda ser útil para todos.
Este es un mapa mental sobre una breve historia del tiempo. "Una breve historia del tiempo" es una obra de divulgación científica con una influencia de gran alcance. No sólo presenta los conceptos básicos de cosmología y relatividad, sino que también analiza los agujeros negros y la expansión. del universo. temas científicos de vanguardia como la inflación y la teoría de cuerdas.
¿Cuáles son los métodos de fijación de precios para los subcontratos de proyectos bajo el modelo de contratación general EPC? EPC (Ingeniería, Adquisiciones, Construcción) significa que el contratista general es responsable de todo el proceso de diseño, adquisición, construcción e instalación del proyecto, y es responsable de los servicios de operación de prueba.
Los puntos de conocimiento que los ingenieros de Java deben dominar en cada etapa se presentan en detalle y el conocimiento es completo, espero que pueda ser útil para todos.
Puntos de conocimiento de Big Data y resumen de la entrevista
conceptos básicos de java
Tipos de datos básicos
byte, booleano 1 byte, char, 2 bytes cortos, int, flotante 4 bytes, largo, doble 8 bytes
anormal
arrojable
Error
Errores fatales catastróficos, programas incontrolables, como desbordamiento de pila
Excepción
excepción en tiempo de ejecución
Excepción de puntero nulo, subíndice de matriz fuera de límites
Excepciones en tiempo de compilación (excepciones que no son en tiempo de ejecución)
IOException, ClassNotFoundException
Polimorfismo
estructura de datos
Estructuras de datos comunes (8 tipos)
formación
La consulta y modificación son rápidas, la adición y eliminación son lentas
El intervalo de almacenamiento es continuo, el uso de memoria es importante y la complejidad del espacio es grande.
Ventajas: la lectura y modificación aleatorias son rápidas porque la matriz es continua (fuerte acceso aleatorio y velocidad de búsqueda rápida)
Desventajas: la inserción y eliminación son ineficientes porque después de insertar datos, los datos detrás de esta posición deben moverse en la memoria y el tamaño no es fijo y no se puede expandir fácilmente de forma dinámica.
lista enlazada
Adición y eliminación rápidas, búsqueda lenta
El espacio de almacenamiento es discreto, la memoria ocupada es suelta y la complejidad del espacio es pequeña.
Ventajas: inserción y eliminación rápidas, alta utilización de memoria, sin tamaño fijo, expansión flexible
Desventajas: no se puede buscar aleatoriamente, comenzar desde el primero cada vez, baja eficiencia de consulta
Tabla de picadillo
La adición, eliminación y búsqueda son rápidas, el hash de datos es una pérdida de espacio de almacenamiento
cola
Primero en entrar, primero en salir, la inserción de la cola y la extracción de la parte superior son rápidas, pero otros accesos son lentos.
pila
El primero en entrar, el último en salir, la eliminación e inserción de la parte superior son rápidos, pero el acceso a otros elementos, excepto el elemento superior, es lento.
árbol negro rojo
Tanto las adiciones como las eliminaciones y las búsquedas son rápidas y la estructura del algoritmo es compleja (consulte el árbol binario para obtener más detalles).
Árbol binario
La adición, eliminación y búsqueda son rápidas, pero el algoritmo de eliminación tiene una estructura compleja.
La complejidad del tiempo es O(logn) en el mejor de los casos y O(n) en el peor.
árbol binario especial
árbol binario completo
Si el número de niveles del árbol binario es K y el número de nodos es (2^K-1), es un árbol binario completo (como se muestra en la siguiente figura).
Subtema 1
árbol binario completo
El número de capas del árbol binario es la capa h, el número de nodos (1 ~ h-1) ha alcanzado el máximo y todos los nodos de la capa h están concentrados a la izquierda (como se muestra en la siguiente figura)
árbol de búsqueda binaria
Los valores del subárbol izquierdo son todos más pequeños que el nodo raíz, y los valores del subárbol derecho son todos más pequeños que el nodo raíz. El recorrido en orden debe ordenarse de pequeño a grande (como se muestra en la figura). )
árbol negro rojo
Un árbol binario equilibrado es un árbol vacío o la diferencia de altura entre los subárboles izquierdo y derecho no excede 1, y tanto el subárbol izquierdo como el derecho son árboles binarios equilibrados. El árbol rojo-negro debe ser un árbol de búsqueda binario (como se muestra en la figura). cifra)
Características:
complejidad del tiempo
La peor complejidad temporal de inserción, eliminación e inserción es O (log N)
alturalogN
Los nodos son negros o rojos.
El nodo raíz debe ser negro.
Si un nodo es rojo, sus nodos secundarios deben ser negros.
Para cualquier nodo, la cantidad de nodos negros en el camino hacia el nodo hoja debe ser la misma.
Cada nodo de hoja (el nodo de hoja es el puntero NULL o el nodo NULL al final del árbol) es negro
Árbol binario óptimo (árbol de Huffman)
La longitud del camino ponderado del árbol alcanza el mínimo.
árbol B
El árbol de búsqueda equilibrado de múltiples rutas (más de dos rutas de búsqueda), a diferencia del árbol binario, es un árbol de múltiples vías, O (log n)
árbol B
Es una estructura de datos de árbol autoequilibrada que mantiene el orden de los datos; la complejidad de la búsqueda, el acceso secuencial, la inserción y la eliminación es O (log n) y el árbol B solo almacena datos en nodos hoja, por lo que se eliminan algunos árboles B. Defectos. Los nodos que no son hoja solo almacenan índices, no datos reales. Todos los datos se almacenan en nodos hoja. O (iniciar sesión)
La altura del árbol permite la búsqueda de rango.
¿Por qué Mysql usa números B?
Menos E/S de disco y admite búsqueda de rango
La diferencia entre árbol B y árbol B
1) Todos los datos del árbol B existen en nodos hoja 2) Los nodos de hoja del árbol B tienen punteros bidireccionales para facilitar la búsqueda de rango, y los datos en los nodos de hoja se conectan secuencialmente de pequeño a grande.
mapa de bits
Ahorre espacio de almacenamiento y haga que resulte incómodo describir relaciones de datos complejas
recolectar
Problema de colección transversal
Cuando se utiliza un iterador para recorrer una colección y cambiar los objetos de la colección (agregar, eliminar, modificar), se generará una excepción.
Recopilación
Lista
Lista de arreglo
Características: Los elementos de almacenamiento están en orden, las consultas son rápidas y la adición y eliminación son lentas.
Se implementa la matriz subyacente y la capacidad puede crecer automáticamente. La expansión predeterminada es 1,5 veces la capacidad original.
No es seguro para subprocesos. No se recomienda el subproceso múltiple. Puede utilizar Collections.syncnizedArrayList(List l) para devolver una ArrayList segura para subprocesos.
La capa inferior llama a Arrays.copyof() en grandes cantidades y System.arraycopy() amplía su capacidad.
Vector
La implementación de la matriz subyacente se modifica mediante la palabra clave sincronizada, segura para subprocesos y de baja eficiencia. La capacidad inicial predeterminada es 10 y la capacidad de expansión predeterminada se incrementa 1 veces.
Lista enlazada
Implementación de estructura de lista doblemente enlazada.
La consulta es lenta, la adición y eliminación son rápidas.
Similitudes y diferencias entre LinkedList, ArrayList y Vector:
Colocar
Conjunto ordenado
Conjunto de árboles
La implementación subyacente del árbol rojo-negro, la colección desordenada y la seguridad de los subprocesos.
Conjunto de hash
Subclase: LinkedHashSet
HashSet es implementado por HashMap, por lo que la estructura de datos es una lista enlazada de matriz de árbol rojo-negro, que permite nulos, sin duplicación, desorden y subprocesos múltiples inseguros. Almacena elementos de acuerdo con el algoritmo hash y tiene alta búsqueda, eliminación y. acceda al rendimiento. Utilice Collections.synchronizedHashSet() para devolver un HashSet seguro para subprocesos.
Solo se puede acceder a los elementos a través de iteradores.
cola
Mapa
HashMap
HashMap
La capa inferior de HashMap se implementa mediante matrices, listas vinculadas y árboles rojo-negro.
Cuando el número de objetos en una cadena en la matriz llega a 8, la cadena se convertirá en un árbol rojo-negro. Si el árbol rojo-negro tiene menos de 6 nodos, se convertirá en una lista vinculada.
La capacidad predeterminada inicial de Hash es 16. Cuando los elementos de almacenamiento en HashMap exceden el factor de carga * la capacidad actual, la capacidad se expandirá a 2 veces el tamaño original y luego se volverá a calcular la posición de cada elemento en la matriz.
No es seguro para subprocesos, puedes usar ConcurrentHashMap
Mapa de hash concurrente
jdk1.8
Implementado mediante lista vinculada, matriz de nodos de árbol rojo-negro, cas (bloqueo optimista) sincronizado
Subclase
vinculadoHashMap
Tabla de picadillo
Subclase
Propiedades
Seguridad del hilo
La seguridad de los subprocesos se garantiza bloqueando toda la tabla hash. Este método garantiza la seguridad de los subprocesos, pero la ejecución concurrente es ineficiente.
Mapa ordenado
ÁrbolMapa
Patrones de diseño
Modo singleton, 3 tipos comunes
Modo diferido, instanciado en la primera llamada.
Modo villano, la clase ha sido creada por sí misma cuando se inicializa, es segura para subprocesos
Modo de registro
modo proxy
proxy estático
Subtema 1
proxy dinámico
proxy dinámico jdk
CGlib
Patrón de fábrica
patrón constructor
modo adaptador
patrón iterador
Categorías comunes
Cadena
Representa una cadena
Las clases de cadenas modificadas con final no se pueden heredar y representan secuencias de caracteres inmutables.
El contenido de caracteres del objeto String se almacena en un valor de matriz de caracteres []
Si una constante de cadena se empalma con una constante, estará en el grupo de constantes del área del método, y no habrá constantes con el mismo contenido en el grupo de constantes, si una constante se empalma con cualquier variable; ser almacenado en el montón.
JVM
javac
Un compilador que compila el lenguaje Java en un archivo binario que puede ser reconocido por jvm.
componentes
Partición de memoria JVM
contador de programa
Es un espacio de memoria pequeño y es un indicador del código ejecutado por el hilo actual. Al cambiar el valor del contador, se selecciona la siguiente instrucción de código de bytes que debe ejecutarse para cada hilo. no hay contador de programa entre subprocesos. Impacto La única área donde no ocurrirá OOM; si el subproceso está ejecutando un método java, el contador del programa registra la dirección de la instrucción de código de bytes de la máquina virtual que se ejecuta. esta vacio.
pila de máquina virtual java
Hilo privado, almacena principalmente variables locales, marcos de pila, pilas de operandos, enlaces dinámicos, salidas de métodos y otra información.
pila de métodos nativos
Llamar a la biblioteca de clases del sistema operativo
montón
Uso compartido de subprocesos: básicamente todos los objetos están en el montón de Java, el área principal de recolección de basura.
área del método
El intercambio de subprocesos almacena principalmente información de clases, constantes, variables estáticas y datos de código compilado.
Grupo constante de tiempo de ejecución
Parte del área del método. Almacenamiento de referencias literales y simbólicas.
subprocesos múltiples
programa
Un conjunto de instrucciones escritas en un determinado lenguaje para completar una tarea específica, es decir, un fragmento de código estático, un objeto estático.
proceso
El proceso de ejecutar un programa una vez o el programa que se ejecuta es un proceso dinámico con su propio proceso de creación, existencia y desaparición (ciclo de vida)
Características:
Los programas son estáticos, los procesos son dinámicos.
El proceso es la unidad más pequeña de asignación de recursos. Cuando el sistema se está ejecutando, a cada proceso se le asignará un área de memoria diferente.
hilo
El proceso se subdivide en subprocesos, que son una ruta de ejecución del programa.
Características:
Si un proceso ejecuta varios subprocesos al mismo tiempo, admite subprocesos múltiples.
Los subprocesos sirven como unidades de programación y ejecución. Cada subproceso tiene una pila y un contador de programa (pc) independientes, y la sobrecarga del cambio de subprocesos es pequeña.
Varios subprocesos en un proceso comparten la misma unidad de memoria/espacio de direcciones de memoria -> asignan objetos del mismo montón y pueden acceder a los mismos objetos y variables. Esto hace que la comunicación entre subprocesos sea más sencilla y eficiente. Pero compartir entre múltiples hilos traerá problemas de seguridad.
Paralelismo y concurrencia
paralelo:
Dos o más eventos ocurren simultáneamente
concurrente:
Dos o más eventos ocurren en el mismo intervalo de tiempo.
Creación de hilos
Hilo
Herede la clase Thread y anule la implementación del método de ejecución. El código en el método de ejecución es el cuerpo del subproceso. Al crear una instancia de la subclase que hereda Thread, llame al método de inicio para permitir que el subproceso llame al método de ejecución.
Métodos comunes de subprocesos
(1) void start(): inicia el hilo y ejecuta el método run() del objeto (2) ejecutar (): operaciones realizadas por el hilo cuando se programa (3) Cadena getName(): Devuelve el nombre del hilo (4) void setName (nombre de cadena): establece el nombre del hilo (5) Hilo estático currentThread(): Devuelve el hilo actual. Esto es esto en las subclases de Thread, generalmente utilizadas para el thread principal y las clases de implementación Runnable. (6) rendimiento vacío estático (): el subproceso cede y pausa el subproceso que se está ejecutando actualmente, dando la oportunidad de ejecución a un subproceso con la misma prioridad o mayor. Si no hay ningún subproceso con la misma prioridad en la cola, ignore este método. (7) join (): cuando se llama al método join () de otros subprocesos en un determinado flujo de ejecución del programa, el subproceso que llama se bloqueará hasta que se pueda ejecutar el subproceso de unión agregado por el método join (). también ser ejecutado (8) suspensión vacía estática (milisegundos largos): (tiempo especificado: milisegundos) hace que el subproceso actualmente activo ceda el control de la CPU dentro del período de tiempo especificado, lo que brinda a otros subprocesos la oportunidad de ejecutarse y se vuelve a poner en cola después de que transcurra el tiempo. arriba. Lanza una excepción interrumpida (9) stop(): fuerza el final del ciclo de vida del hilo, no recomendado (10) booleano isAlive (): devuelve booleano para determinar si el hilo todavía está vivo
Tarea prioritaria:
Cuando se crea un hilo, hereda la prioridad del hilo principal.
La prioridad baja solo tiene una baja probabilidad de ser programada y no necesariamente es necesario llamarla después de un hilo de alta prioridad.
1. Nivel de prioridad del hilo PRIORIDAD_MÁXIMA: 10 PRIORIDAD_MINA: 1 NORM_PRIORITY: 5 2. Métodos involucrados getPriority(): Devuelve el valor de prioridad del hilo setPriority (int newPriority): cambia la prioridad del hilo
Estado del hilo Thread.State
Nuevo
listo
correr
bloquear
morir
Ejecutable
1) Defina una subclase e implemente la interfaz Runnable. 2) Vuelva a escribir el método de ejecución en la interfaz Runnable de la subclase. 3) Cree un objeto de hilo a través del constructor que contiene parámetros de la clase Thread. 4) Pase el objeto de subclase de la interfaz Runnable como un parámetro real al constructor de la clase Thread. 5) Llame al método de inicio de la clase Thread: inicie el hilo y llame al método de ejecución de la interfaz de la subclase Runnable.
invocable
invocable se puede ejecutar utilizando ExecutorService o como parámetro de FeatureTask
clase pública MyCallable implementa Callable<T> { @Anular llamada pública T () lanza una excepción { // Definir código que se puede llamar aquí } } MiCallable myCallable = new MyCallable(); EjecutorService ejecutor = Ejecutores.newSingleThreadExecutor(); Futuro<T> futuro = executor.submit(myCallable); T resultado = futuro.get();
Tarea invocable<Proceso> = () -> { //Ejecutar tareas asincrónicas Tiempo de ejecución tiempo de ejecución = Runtime.getRuntime(); Proceso proceso = runtime.exec("/Users/mac/Desktop/qc-java-runtime/src/main/java/com/qc/runtime/shell.sh"); proceso de devolución; }; //Envuelve lo invocable en FutureTask FutureTask<Proceso> futuro = new FutureTask<>(tarea); //Iniciar un nuevo hilo para realizar tareas asincrónicas nuevo hilo(futuro).start(); // Obtener los resultados de la tarea asincrónica Resultado del proceso = futuro.get(); System.out.println(resultado);
Cerrar
Para el trabajo simultáneo, necesita alguna forma de evitar que dos tareas accedan a los mismos recursos (compitiendo efectivamente por recursos compartidos). La forma de evitar este conflicto es bloquear el recurso cuando lo utiliza una tarea. La primera tarea que accede a un recurso debe bloquear el recurso para que otras tareas no puedan acceder a él hasta que se desbloquee, momento en el que otra tarea puede bloquearlo y utilizarlo.
sincronizado
Cualquier objeto se puede utilizar como bloqueo de sincronización. Todos los objetos contienen automáticamente un único candado (monitor). Bloqueo de método sincrónico: método estático (nombre de clase.clase), método no estático (este) Bloque de código sincronizado: especifíquelo usted mismo, a menudo también se especifica como este o nombre de clase.clase
punto muerto
Diferentes subprocesos ocupan los recursos de sincronización que necesitan entre sí y no se dan por vencidos. Todos esperan que la otra parte ceda los recursos que necesitan, formando un punto muerto.
Después de que se produce un punto muerto, no se producirá ninguna excepción ni mensaje, pero todos los subprocesos se bloquearán y no podrán continuar.
liberación de bloqueo
Finaliza la ejecución del método de sincronización y el bloque de código de sincronización del hilo actual.
El hilo actual encuentra una interrupción y un retorno en un bloque de código sincronizado o método sincronizado, lo que finaliza la ejecución continua del bloque de código y el método.
Se produce un error o excepción no controlado en el hilo actual en el bloque de código sincronizado o método sincronizado, lo que resulta en un final anormal.
El hilo actual ejecuta el método wait () del objeto de hilo en el bloque de código de sincronización y el método de sincronización. El hilo actual se detiene y libera el bloqueo.
Protocolo de comunicación de red
Modelo OSI (protocolo)
El modelo era demasiado ideal y no logró promocionarse en Internet.
capas OSI
Capa de aplicación
Capa de presentación
capa de sesión
capa de transporte
Capa de red
Capa de enlace de datos
capa fisica
Modelo TCP/IP (protocolo)
norma internacional de facto
Capas TCP/IP
Capa de aplicación
capa de transporte
Capa de red
capa de enlace de datos físicos
Comparación de dos modelos.
Encapsulación de datos
Desmantelamiento de datos
IP y puerto
Importantes protocolos de capa de transporte de red UDP y TCP
UDP (Protocolo de datagramas de usuario)
1. Encapsule datos, origen y destino en paquetes de datos sin establecer una conexión. 2. El tamaño de cada datagrama está limitado a 64K. 3. Al remitente no le importa si la otra parte está lista o no, y el destinatario no confirma la recepción, por lo que no es confiable. 4. Se puede transmitir y enviar. 5. No es necesario liberar recursos al enviar datos, baja sobrecarga y alta velocidad
TCP (Protocolo de control de transmisión)
1. Antes de utilizar el protocolo TCP, primero se debe establecer una conexión TCP para formar un canal de transmisión de datos. 2. Antes de la transmisión, se utiliza el método de "apretón de manos de tres vías" y la comunicación punto a punto es confiable. 3.Dos procesos de aplicación se comunican mediante el protocolo TCP: cliente y servidor. 4. Se pueden transmitir grandes cantidades de datos durante la conexión. 5. Una vez completada la transmisión, es necesario liberar la conexión establecida, lo cual es ineficiente
Apretón de manos de tres vías (estableciendo conexión)
1. El cliente envía un mensaje de solicitud para establecer una conexión TCP. El mensaje contiene un número de secuencia secuencial, que el extremo emisor genera aleatoriamente y establece el campo SYN (sincronización) en el mensaje en 1, lo que indica que se ha establecido una conexión TCP. necesita ser establecido. (SYN=1, seq=x, x es un valor generado aleatoriamente); 2. El servidor responde al mensaje de solicitud de conexión TCP enviado por el cliente, que contiene el número de secuencia secuencial, que es generado aleatoriamente por el extremo que responde, establece SYN en 1 y genera un campo ACK Se envía el valor del campo ACK. por el cliente Agregue 1 al número de secuencia pasado para responder, de modo que cuando el cliente reciba la información, sepa que su solicitud de establecimiento de TCP ha sido verificada. (SYN = 1, ACK = x 1, seq = y, y es un valor generado aleatoriamente) El ACK más 1 aquí puede entenderse como una confirmación de con quién se establece la conexión; 3. Después de que el cliente reciba la solicitud de verificación de establecimiento de TCP enviada por el servidor, aumentará su número de secuencia en 1, responderá a la solicitud de verificación ACK nuevamente y agregará 1 a la secuencia enviada por el servidor para responder. (SYN=1, ACK=y 1, secuencia=x 1).
Salude cuatro veces (desconecte)
1. El cliente envía un mensaje solicitando desconectar la conexión TCP. El mensaje contiene el número de secuencia secuencial, que el remitente genera aleatoriamente. También establece el campo FIN en el mensaje en 1, lo que indica que la conexión TCP debe desconectarse. desconectado. (FIN = 1, seq = x, x es generado aleatoriamente por el cliente); 2. El servidor responderá al mensaje de solicitud de desconexión TCP enviado por el cliente, que contiene el número de secuencia secuencial, que se genera aleatoriamente al final de la respuesta, y generará un campo ACK. El valor del campo ACK es la secuencia secuencial. número enviado por el cliente Básicamente agregue 1 a la respuesta, para que cuando el cliente reciba la información, sepa que su solicitud de desconexión TCP ha sido verificada. (FIN=1, ACK=x 1, seq=y, y es generado aleatoriamente por el servidor); 3. Después de que el servidor responde a la solicitud de desconexión TCP del cliente, no desconectará inmediatamente la conexión TCP. Una vez que se confirma la transmisión de datos, el servidor primero se asegurará de que todos los datos transmitidos a A se hayan transmitido. del mensaje de respuesta se establecerá en 1 y se generará un número de secuencia aleatorio. (FIN=1, ACK=x 1, seq=z, z es generado aleatoriamente por el servidor); 4. Después de recibir la solicitud de desconexión de TCP del servidor, el cliente responderá a la solicitud de desconexión del servidor, incluido un campo de secuencia generado aleatoriamente y un campo ACK. El campo ACK agregará 1 a la secuencia de la solicitud de desconexión de TCP del servidor, por lo tanto. Complete la respuesta de verificación solicitada por el servidor. (FIN=1, ACK=z 1, seq=h, h es generado aleatoriamente por el cliente) En este punto, se completa el proceso de desconexión de TCP de 4 ondas.
Subtema 3
Toma de red
La combinación de ip y puerto forma un socket.
La esencia de la comunicación de red: comunicación entre sockets.
Clasificación
toma de corriente
Proporcione un servicio de flujo de bytes confiable utilizando TCP
Pasos de programación de sockets basados en TCP
cliente
1. Crear socket: construye un objeto de clase Socket según la dirección IP o el número de puerto del servidor especificado. Si el servidor responde, se establece una línea de comunicación del cliente al servidor. Si la conexión falla, se producirá una excepción. 2. Abra el flujo de entrada / salida conectado al Socket: use el método getInputStream () para obtener el flujo de entrada y use el método getOutputStream () para obtener el flujo de salida para la transmisión de datos. 3. Operaciones de lectura / escritura en el Socket de acuerdo con un determinado protocolo: lea la información ingresada por el servidor en la línea a través del flujo de entrada (pero no puede leer la información ingresada en la línea usted mismo) y escriba la información en el hilo a través del flujo de salida. 4. Cerrar Socket: desconecte el cliente del servidor y suelte la línea
Terminal de servicio
1. Llame a ServerSocket (puerto int): cree un socket del lado del servidor y vincúlelo al puerto especificado. Se utiliza para monitorear las solicitudes de los clientes. 2. Llame a aceptar (): escuche las solicitudes de conexión. Si el cliente solicita una conexión, acepte la conexión y devuelva el objeto del socket de comunicación. 3. Llame a getOutputStream() y getInputStream() del objeto de clase Socket: obtenga el flujo de salida y el flujo de entrada, y comience a enviar y recibir datos de red. 4. Cierre los objetos ServerSocket y Socket: se completa el acceso del cliente y se cierra el socket de comunicación.
conector de datagrama
Uso de UDP para proporcionar servicios de datos de "mejor esfuerzo"
Programación de red basada en UDP
1. Las clases DatagramSocket y DatagramPacket implementan programas de red basados en el protocolo UDP. 2. Los datagramas UDP se envían y reciben a través del socket de datagramas DatagramSocket. El sistema no garantiza que el datagrama UDP pueda entregarse de forma segura al destino ni puede determinar cuándo llegará. 3. El objeto DatagramPacket encapsula un datagrama UDP, y el datagrama contiene la dirección IP y el número de puerto del remitente y la dirección IP y el número de puerto del receptor. 4. Cada datagrama en el protocolo UDP proporciona información de dirección completa, por lo que no es necesario establecer una conexión entre el remitente y el receptor. Como enviar un paquete express.
proceso
1. DatagramSocket y DatagramPacket 2. Establecer el extremo emisor y el extremo receptor. 3. Crear paquete de datos 4. Llame a los métodos de envío y recepción de Socket. 5. Cerrar el enchufe Nota: El extremo emisor y el extremo receptor son dos programas en ejecución independientes.
URL
reflexión
concepto
La reflexión del mecanismo JAVA está en estado de ejecución. Para cualquier clase, puede conocer todas las propiedades y métodos de esta clase. Para cualquier objeto, puede llamar a cualquiera de sus métodos y propiedades y llamar a esta información dinámicamente; El método del objeto se llama mecanismo de reflexión del lenguaje Java.
Obtener una instancia de la clase clase.
1) Premisa: si se conoce la clase específica, se puede obtener a través del atributo de clase de la clase. Este método es el más seguro y confiable, y tiene el mayor rendimiento del programa. Ejemplo: Clase clazz = String.class; 2) Premisa: si se conoce una instancia de una determinada clase, llame al método getClass () de la instancia para obtener el objeto Clase. Ejemplo: Clase clazz = "www.atguigu.com".getClass(); 3) Requisito previo: se conoce el nombre completo de una clase, la clase está en la ruta de clase y se puede recuperar mediante el método estático de la clase Clase. Obtenido usando forName(), se puede lanzar ClassNotFoundException Ejemplo: Clase clazz =Class.forName("java.lang.String"); 4) Otros métodos (no requeridos) ClassLoader cl = this.getClass().getClassLoader(); Class clazz4 = cl.loadClass("Nombre completo de la clase");
Métodos comunes de clase.
Tipos con objetos de clase
(1) clase: Clases externas, miembros (clases internas miembro, clases internas estáticas), clases internas locales, clases internas anónimas (2) interfaz: interfaz (3)[]: matriz (4) enumeración: enumeración (5) anotación: anotación @interface (6) tipo primitivo: tipo de datos básico (7)vacío
ejemplo
Clase c1 = Objeto.clase; Clase c2 = Clase.comparable; Clase c3 = Cadena[].clase; Clase c4 = int[][].class; Clase c5 = ElementType.class; Clase c6 = Anular.clase; Clase c7 = int.clase; Clase c8 = void.clase; Clase c9 = Clase.clase; int[] a = nuevo int[10]; int[] b = nuevo int[100]; Clase c10 = a.getClass(); Clase c11 = b.getClass();
Subtema 11
hadoop
hdfs
ventajas y desventajas de hdfs
ventaja
Tolerancia a fallos (mecanismo de replicación)
Adecuado para procesar grandes datos, puede manejar datos a nivel de petabytes y millones de archivos.
Implementable en máquinas económicas
defecto
No apto para acceso a datos de baja latencia
Es imposible almacenar una gran cantidad de archivos pequeños de manera eficiente. La memoria del nodo de nombre es limitada y si hay demasiados archivos pequeños, el tiempo de direccionamiento será mayor que el tiempo de procesamiento del archivo.
No se admite la escritura simultánea y los archivos se modifican aleatoriamente.
composición de la arquitectura hdfs
nodo de nombre
Administrar el espacio de nombres hdfs
Configurar la política de réplica
Administrar información de mapeo de bloques
Manejar las solicitudes de los clientes
nodo de datos
almacenar bloque de datos
Ejecutar solicitudes de lectura y escritura para bloques de datos.
cliente
División de archivos, divida el archivo en bloques al cargar el archivo
Interactuar con namenode para obtener información de ubicación de archivos
Interactuar con datanode, leer o escribir datos.
El cliente proporciona comandos para administrar HDFS.
El cliente proporciona comandos para acceder a HDFS, como agregar, eliminar y verificar operaciones en HDFS.
nododenombresecundario
Ayudar a nameNode a funcionar, fusionar fsimage y editar archivos, y enviarlos a nameNode
Recuperación asistida de Namenode en situaciones de emergencia
tamaño del bloque de archivos hdfs
hadoop1.x 64M, hadoop2.x/3.x es 128M
El estado óptimo es cuando el tiempo de direccionamiento es el 1% del tiempo de transmisión.
Por qué el tamaño del bloque de archivos HDFS no puede ser ni demasiado grande ni demasiado pequeño
1. Si es demasiado pequeño, aumentará el tiempo de búsqueda.
2. Si el bloque es demasiado grande, el tiempo de transmisión de datos será significativamente mayor que el tiempo para localizar la posición inicial del bloque, lo que hará que el programa procese este bloque de datos muy lentamente.
caparazón
subir
hadoop fs -moveFromLocal archivo local directorio hdfs (corte local y copia a hdfs)
hadoop fs -copyFromLocal archivo local directorio hdfs (copiar localmente a hdfs)
hadoop fs -poner el archivo local en el directorio hdfs (copiarlo localmente y cargarlo en hdfs)
hadoop fs -appendToFile archivo local archivo hdfs (los datos del archivo local se agregan al final del archivo hdfs)
descargar
hadoop fs -copyToLocal directorio local del archivo hdfs (archivo copiado al local)
hadoop fs -obtener directorio local del archivo hdfs (archivo copiado al local)
hdfs operativos
directorio hadoop fs -ls (muestra información en el directorio)
directorio hadoop fs -mkdir (crear directorio)
-chgrp, -chmod, -chown (modificar la propiedad del archivo)
archivo hadoop fs -cat (muestra el contenido del archivo)
directorio de archivos hadoop fs -cp (copie el archivo a otro directorio)
Archivo hadoop fs -tail (muestra 1 kb de datos al final del archivo)
hadoop fs -rm eliminar archivos o carpetas
directorio hadoop fs -rm -r (elimine recursivamente el directorio y el contenido del directorio)
hadoop fs-du
hadoop fs -setrep (Establezca el número de réplicas y regístrelas solo en el nodo de nombre. Si el número de nodos de datos es menor que el número establecido de réplicas, entonces el número de réplicas solo será tanto como nodos de datos)
Operación de la API de HDFS: a través del objeto FileSystem
proceso de lectura y escritura hdfs
Proceso de lectura
Subtema 1
proceso de escritura
Ilustración
Subtema 3
colmena
concepto
Hive es una herramienta de gestión de almacén de datos basada en Hadoop, que asigna datos estructurados en una tabla y proporciona funciones de consulta similares a SQL.
principio
Essence Convertir HQL a tareas mr
metastore
Metadatos: incluido el nombre de la tabla, la base de datos a la que pertenece la tabla (predeterminado predeterminado), el propietario de la tabla, el campo de columna/partición, el tipo de tabla (si es una tabla externa), el directorio donde se encuentran los datos de la tabla, etc.
cliente
Proporcionar interfaz jdbc/ODBC, acceso webUI, acceso a interfaz, etc.
conductor
Analizador SQL
Convierta SQL en un árbol de sintaxis abstracta AST. Este paso generalmente se completa con una herramienta de terceros, como antrl; realice un análisis de sintaxis en SAT para verificar si la semántica de SQL es correcta, si existen tablas y nombres de columnas, etc.
Plan físico del compilador
Convierta AST en un plan de ejecución lógico
Optimizador Optimizador de consultas
Optimice los planes de ejecución lógica
Ejecución
El plan de reescritura lógica se convierte en un plan de ejecución física que se puede ejecutar. Para Hive, se convierte en tareas mr/tez/spark
tipo de datos
Tipos de datos básicos
El tipo String de Hive puede teóricamente almacenar caracteres 2G
Tipo de datos de colección
Declaración de creación de tabla de tipos de datos de colección
crear prueba de tabla ( cadena de nombre, matriz de amigos <cadena>, mapa de niños <cadena, int>, estructura de dirección<calle:cadena, ciudad:cadena> ) campos delimitados en formato de fila terminados en ',' //Delimitador de columna elementos de la colección terminados en '_' //El delimitador de MAP STRUCT y ARRAY (división de datos símbolo) claves de mapa terminadas en ':' //mapa kye y separador de valores líneas terminadas en ' '; //Separador de línea
conversión de tipo
Los tipos de datos atómicos de Hive se convierten implícitamente, similar a la conversión de Java. Por ejemplo, si una expresión usa el tipo INT, TINYINT se convertirá automáticamente al tipo INT, pero Hive no realizará la conversión inversa. Por ejemplo, si una expresión usa el tipo TINYINT, INT no se convertirá automáticamente a TINYINT. escriba y devolverá un error a menos que utilice la operación CAST
Reglas de conversión implícitas
1. Cualquier tipo de entero se puede convertir implícitamente a un tipo más amplio, como TINYINT se puede convertir Reemplazado con INT, INT se puede convertir a BIGINT.
2. Todos los tipos de números enteros, FLOAT y STRING se pueden convertir implícitamente a DOUBLE. (La conversión implícita de String y double puede causar fácilmente sesgos en los datos)
3.TINYINT, SMALLINT e INT se pueden convertir a FLOAT.
4. El tipo BOOLEAN no se puede convertir a ningún otro tipo.
DDL
Crear mesa
CREAR TABLA [EXTERNA] [SI NO EXISTE] nombre_tabla [(col_name tipo_datos [COMMENT col_comment], ...)] [COMENTARIO tabla_comentario] [PARTICIONADO POR (col_name tipo_datos [COMMENT col_comment], ...)] [AGRUPADO POR (nombre_col, nombre_col, ...) [ORDENADO POR (col_name [ASC|DESC], ...)] EN num_buckets CUBOS] [FORMATO DE FILA formato_fila] [ALMACENADO COMO formato_archivo] [UBICACIÓN hdfs_path] [TBLPROPERTIES (nombre_propiedad=valor_propiedad, ...)] [AS select_statement]
explicar
(1) CREATE TABLE crea una tabla con el nombre especificado. Si ya existe una tabla con el mismo nombre, se genera una excepción; el usuario puede usar la opción SI NO EXISTE para ignorar esta excepción. (2) La palabra clave EXTERNAL permite a los usuarios crear una tabla externa. Al crear la tabla, pueden especificar una ruta (UBICACIÓN) a los datos reales. Cuando se elimina la tabla, los metadatos y los datos de la tabla interna se eliminarán juntos. y las tablas externas solo eliminan metadatos, no datos. (3) COMENTARIO: agregue comentarios a tablas y columnas. (4) PARTITIONED BY crea una tabla de particiones (5) CLUSTERED BY crea una tabla de depósitos (6) ORDENADO POR no se usa comúnmente. Se usa para ordenar una o más columnas en el depósito. (7) FORMATO DE FILA DELIMITADO [CAMPOS TERMINADOS POR carácter] [ELEMENTOS DE COLECCIÓN TERMINADO POR char] [TECLAS DE MAPA TERMINADAS POR carácter] [LÍNEAS TERMINADAS POR carácter] | SERDE nombre_serde [CON SERDEPROPERTIES (nombre_propiedad=valor_propiedad, nombre_propiedad=valor_propiedad, ...)] Los usuarios pueden personalizar SerDe o utilizar el SerDe integrado al crear tablas. Si no se especifica FORMATO DE FILA o FORMATO DE FILA DELIMITADO, se utilizará el SerDe integrado. Al crear una tabla, el usuario también debe especificar columnas para la tabla. Al especificar las columnas de la tabla, el usuario también especificará un SerDe personalizado que utiliza SerDe para determinar. Datos de columna específicos de la tabla especificada. SerDe es la abreviatura de Serialize/Deserilize. Hive usa Serde para secuenciar y deserializar objetos de fila. (8) STORED AS especifica el tipo de archivo de almacenamiento más utilizado: SEQUENCEFILE (archivo de secuencia binaria), TEXTFILE (texto), RCFILE (archivo de formato de almacenamiento de columna). Si los datos del archivo son texto sin formato, puede usar STORED AS. ARCHIVO DE TEXTO. Si es necesario comprimir los datos, utilice ALMACENADO COMO SEQUENCEFILE. (9) UBICACIÓN: especifique la ubicación de almacenamiento de la tabla en HDFS. (10) AS: seguido de una declaración de consulta para crear una tabla basada en los resultados de la consulta. (11) LIKE permite a los usuarios copiar la estructura de la tabla existente, pero no los datos.
Tabla de particiones
La esencia de la tabla de particiones es corresponder a una carpeta en HDFS, y la partición en Hive es un subdirectorio.
DML
carga
cargar datos [local] en ruta '/opt/module/datas/student.txt' [sobrescribir] en la tabla estudiante [partición (partcol1=val1,…)];
insertar
inserto básico
insertar en (sobrescribir) tabla...
Inserto de mesa múltiple
de nombre de tabla insertar en la tabla t1 .... seleccionar .... de tableName, insertar en la tabla t2 .... seleccionar .... de tableName
Consultar y crear tablas.
crear bale tableName como seleccionar.....
Cargar datos para crear tabla.
1. Cargar datos a hdfs
2. Cree la tabla y especifique su ubicación en hdfs.
Importar datos a Hive
Nota: Utilice exportar primero para exportar y luego importe los datos.
importar tabla partición estudiante2 (mes = '201709') desde '/usuario/hive/warehouse/export/student';
Truncar elimina datos en la tabla
Solo se pueden eliminar tablas de administración, los datos de tablas externas no se pueden eliminar
Funciones de uso común
máximo
mín.
suma
promedio
contar
clasificar
clasificación global
ordenar por clasificación global, solo hay un reductor, la eficiencia es extremadamente baja cuando la cantidad de datos es grande, pero la eficiencia es alta cuando la cantidad de datos es pequeña
Clasificación de particiones
distribuir por es similar al particionador personalizado en la tarea mr; la regla de distribuir por es que después de la división en módulo del número de reductores según el código hash del campo de partición, los restos con el mismo número ingresarán a la misma partición.
clasificación local
ordenar por es la clasificación interna de cada reductor y está globalmente desordenado. A menudo se usa junto con distribuir por, distribuir por al frente y ordenar por detrás.
agrupar por
Se puede reemplazar cuando distribuir por ordenar por se usa en conjunto y los campos están en el mismo orden ascendente y no se puede especificar la regla de clasificación como ASC o DESC.
partición, cubo
balde
El agrupamiento debe estar habilitado y configurado set hive.enforce.bucketing=true;
Crear tabla de cubos
Insertar datos en una tabla de depósitos es lo mismo que insertar datos en una tabla normal.
Reglas de agrupamiento
El campo de depósito determina en qué depósito se encuentran los datos calculando el módulo del módulo hash dividido por el número de depósitos.
La diferencia entre agrupar y particionar
La partición es para la ruta de almacenamiento de datos, es decir, la carpeta es para los archivos de datos.
Encuesta de muestreo de cubos
gramática
MUESTRA DE TABLA(CUBO x DE y) .
Dividir
subtema
Convertir entre filas y columnas
fila a columna
CONCAT(cadena A/col, cadena B/col…)
CONCAT_WS(separador, cadena1, cadena2,...)
COLLECT_SET(columna)
Función descriptiva
ejemplo
implementación SQL
Columna a fila
Función descriptiva
ejemplo
implementación SQL
función de ventana
ENCIMA()
fila actual
fila actual
n persiguiendo
Avanzar n líneas
n siguiendo
n líneas atrás
ILIMITADO
punto de partida
Percesión ilimitada significa comenzar desde el frente.
siguiente ilimitado significa hasta el punto final detrás
LAG(col,n,valor_predeterminado)
Avanza la enésima línea
cliente potencial(col,n,valor_predeterminado)
enésima fila atrás
NTILE(n)
Distribuya las filas en la partición ordenada a los grupos de datos especificados. Cada grupo está numerado, comenzando desde 1. Para cada fila, NTILE devuelve el número del grupo al que pertenece la fila. Nota: n debe ser de tipo int.
ejemplo
datos
Requisitos e implementación
1. Consultar los clientes y el número total de clientes que compraron en abril de 2017.
2. Verifique los detalles de compra del cliente y el total de compra mensual.
3. En el escenario anterior los costos deberán acumularse según fecha.
4. Consultar el tiempo de la última compra de cada cliente
5. Consultar la información del pedido del 20% anterior.
rango
Si el pedido es el mismo, se repetirá y el número total permanecerá sin cambios.
rango_denso
Si el pedido es el mismo, no habrá duplicación y se reducirá el número total.
numero de fila
se calculará en orden
ejemplo
función
funciones integradas
Función personalizada
udf (función definida por el usuario)
Características: Uno dentro, uno fuera
Pasos de programación
1. Heredar la clase org.apache.hadoop.hive.ql.UDF
2. Es necesario implementar la función de evaluación; la función de evaluación admite la sobrecarga;
3. Cree una función en la ventana de línea de comando de Hive.
1.Subir frasco
agregar jar linux_jar_path
2.Crear función
crear función [temporal] [dbname.]function_name AS class_name;
4. Eliminar la función en la ventana de línea de comando de Hive.
Eliminar la función [temporal] [si existe] [dbname.]function_name;
Nota: UDF debe tener un tipo de retorno y puede devolver nulo, pero el tipo de retorno no puede ser nulo;
udaf (función de agregación definida por el usuario)
Más dentro y uno fuera
función agregada
udtf (Funciones de generación de tablas definidas por el usuario)
Uno dentro, muchos fuera
vista lateral explotar()
Compresión y almacenamiento
Compresión y almacenamiento de uso común de Hive
El formato de archivo parquet se usa comúnmente en Hive; lzo o snappy se usan para la compresión.
compresión
Tabla de formatos de compresión
Comparación del rendimiento de compresión
Configuración de parámetros de compresión
almacenamiento
Formatos de archivo comunes en colmena
archivo de texto, parquet, orco, archivo de secuencia
Clasificación de formato de archivo
Almacenamiento en fila
Características
Al consultar una fila completa de datos que cumple con las condiciones, el almacenamiento de columnas debe ir a cada campo agregado para encontrar el valor correspondiente de cada columna. El almacenamiento de filas solo necesita encontrar uno de los valores, y el resto de los valores. en lugares adyacentes, por lo que las consultas de esta tienda Row son más rápidas.
Archivo de texto
En el formato predeterminado, los datos no se comprimen, lo que genera una gran sobrecarga del disco y una gran sobrecarga de análisis de datos.
secuenciaArchivo
Almacenamiento de columnas
Características
Debido a que los datos de cada campo se agregan y almacenan, cuando la consulta solo requiere unos pocos campos, la cantidad de datos leídos se puede reducir considerablemente, el tipo de datos de cada campo debe ser el mismo y el almacenamiento en columnas se puede diseñar mejor de manera específica; Algoritmo de compresión diseñado.
parquet
orco
composición
Los archivos Orc generalmente constan de una o más franjas. Cada franja es generalmente del tamaño de un bloque HDFS. Cada franja contiene varios registros. Estos registros se almacenan de forma independiente según las columnas.
raya
datos de índice
Subtema 1
datos de fila
pie de página de rayas
Afinación
buscar captura
Significa que en algunos casos, la consulta no necesita pasar por la tarea MR, como seleccionar * de la tabla. En este caso, Hive puede simplemente leer el archivo en el directorio de la tabla y enviarlo a la consola.
recuperar configuración de habilitación de captura
Establezca hive.fetch.task.conversion = más en el archivo hive-default.xml.template
Después de activarlo, la búsqueda global, la búsqueda limitada y la búsqueda de campo no utilizarán la tarea mr.
modo local
Los datos de entrada de Hive son pequeños y el tiempo necesario para activar la tarea de ejecución de la consulta puede ser mucho mayor que el tiempo real de ejecución del trabajo. En este caso, puede activar el modo local para procesar todas las tareas en una sola máquina. El tiempo de ejecución de tareas para conjuntos de datos pequeños se reducirá significativamente
configuración de parámetros
set hive.exec.mode.local.auto=true //Habilitar mr local
Optimización de tablas
Mesa grande, mesa pequeña unir
Colocar tablas pequeñas al frente y tablas grandes detrás puede reducir efectivamente la posibilidad de errores de desbordamiento de memoria. Ahora que se ha optimizado, colocar tablas pequeñas al frente y tablas grandes detrás no tiene ningún efecto.
unión de mapa (una mesa pequeña se une a una mesa grande)
configuración de habilitación de unión al mapa
La unión al mapa está habilitada de forma predeterminada.
establecer hive.auto.convert.join = verdadero;
set hive.mapjoin.smalltable.filesize=25000000;//El tamaño predeterminado de la tabla pequeña es 25M
principio de unión de mapas
unirse a la mesa grande
1. Filtrado de claves vacías
Una gran cantidad de datos anormales con claves vacías ingresan al mismo reductor y su procesamiento es extremadamente lento. A veces incluso desborda la memoria. Puede optar por filtrar las claves vacías primero.
2. Conversión de clave vacía
Una gran cantidad de claves vacías no son datos anormales y deben incluirse en el conjunto de resultados. Luego puede asignar valores a las claves y distribuirlas uniformemente en el reductor.
agrupar por
Habilitar la agregación del lado del mapa
configuración de parámetros
1. Habilite la agregación en el lado del mapa
establecer hive.map.aggr = verdadero
2. Sume la cantidad de elementos en el lado del mapa.
establecer hive.groupby.mapaggr.checkinterval = 100000
3. Realice el equilibrio de carga cuando haya datos sesgados (falso predeterminado)
establecer hive.groupby.skewindata = verdadero
Principio: se iniciarán dos trabajos. El lado del mapa del primer trabajo distribuirá aleatoriamente las claves a los reductores. Cada reductor realizará una operación de agregación internamente y generará los resultados. El segundo trabajo obtendrá los resultados del primer trabajo. lo mismo La clave se envía al mismo reductor para que la agregación complete la operación de agregación final.
contar (distinto)
Los datos pequeños no importan
Gran cantidad de datos
En el caso de un gran volumen de datos, el recuento (distinto) solo ingresará un reductor sin importar cuántos reductores haya, lo que afectará el progreso del trabajo. Puede usar group by para realizar estadísticas de deduplicación.
Producto cartesiano
Intente evitar el producto cartesiano, no agregue condiciones al unirse o tenga condiciones no válidas. Hive solo puede usar un reductor para procesar datos.
Filtrado de filas y columnas
Procesamiento de columnas
En select, tome solo las columnas requeridas y use select * lo menos posible
procesamiento de filas
Si las condiciones de filtro de la tabla secundaria se escriben después de dónde en la asociación, entonces las dos tablas primero se asociarán con la tabla completa y luego filtrarán los datos. Se recomienda realizar primero una subconsulta con condiciones de filtro para la tabla secundaria y. luego realice la asociación.
partición dinámica
Habilitar la configuración de partición dinámica
1. Habilitar la configuración de la función de partición dinámica (habilitada de forma predeterminada)
colmena.exec.dynamic.partition=true
2. Establecido en modo no estricto (el modo de partición dinámica, el valor predeterminado es estricto, lo que significa que al menos una partición debe especificarse como Partición estática, modo no estricto significa que todos los campos de partición pueden utilizar partición dinámica. )
hive.exec.dynamic.partition.mode=no estricto
3. El número máximo de particiones dinámicas que se pueden crear en todos los nodos que ejecutan MR. Predeterminado 1000
hive.exec.max.dynamic.partitions=1000
4. El número máximo de particiones dinámicas que se pueden crear en cada nodo que ejecuta MR. Este parámetro debe basarse en datos reales. datos a configurar. Por ejemplo: los datos de origen contienen datos de un año, es decir, el campo día tiene 365 valores, entonces este parámetro es Debe establecerse en más de 365. Si utiliza el valor predeterminado de 100, se informará un error.
hive.exec.max.dynamic.partitions.pernode=100
5. La cantidad máxima de archivos HDFS que se pueden crear en todo el trabajo MR. Predeterminado 100000
hive.exec.max.created.files=100000
6. Si se debe lanzar una excepción cuando se genera una partición vacía. Generalmente no se requieren configuraciones. Falso predeterminado
colmena.error.on.empty.partition=falso
Dividir
balde
Sesgo de datos
1. Establezca una cantidad razonable de mapas
Ejecución paralela
De forma predeterminada, Hive solo puede ejecutar una etapa a la vez. Sin embargo, un trabajo específico puede contener muchas etapas y es posible que estas etapas no dependan completamente entre sí. Es decir, algunas etapas se pueden realizar en paralelo. El trabajo se puede completar ejecutándolo en paralelo más rápido.
Activar la configuración de parámetros
set hive.exec.parallel=true //Habilitar la ejecución paralela de tareas set hive.exec.parallel.thread.number=16; // El grado máximo de paralelismo permitido para el mismo sql, el valor predeterminado es 8.
Modo estricto
reutilización de jvm
ejecución especulativa
compresión
Teoría del almacén de números
concepto
Es una colección estratégica que proporciona todo tipo de datos de apoyo para el proceso de toma de decisiones en todos los niveles de la empresa.
característica
Un almacén de datos es una recopilación de datos orientados a gráficos maestros, integrados, no volátiles y variables en el tiempo para respaldar la toma de decisiones.
Orientado a temas
Integración
No volátil (no se puede cambiar)
variable en el tiempo
etl
Extraer extra, transformar transferencia, cargar carga
Estratificación del almacén de datos
datos fuente
No hay cambios en los datos en esta capa. Utiliza directamente la estructura de datos y los datos del sistema periférico y no está abierta al público. Es una capa de almacenamiento temporal, que es un área de almacenamiento temporal para que los datos de la interfaz se preparen para el posterior. procesamiento de datos.
base de datos
También conocida como capa de detalle, los datos de la capa DW deben ser datos consistentes, precisos y limpios que hayan sido limpiados (eliminados de impurezas) de los datos del sistema de origen.
Aplicación de datos
Fuentes de datos leídas directamente por aplicaciones de front-end; datos calculados y generados en función de los requisitos de informes y análisis temáticos;
por que capas
espacio para el tiempo
Se utiliza una gran cantidad de preprocesamiento para mejorar la experiencia del usuario (eficiencia) del sistema de aplicación, por lo que habrá una gran cantidad de datos redundantes en el almacén de datos sin capas, si las reglas comerciales del sistema comercial de origen cambian; Afectará todo el proceso de limpieza de datos y el trabajo La cantidad es enorme.
La estratificación simplifica el proceso de limpieza de datos
El proceso de limpieza de datos se puede simplificar mediante la gestión jerárquica de datos, porque dividir el trabajo original de un solo paso en varios pasos equivale a dividir un trabajo complejo en varias tareas simples y convertir una gran caja negra en Se crea una caja blanca y la La lógica de procesamiento de cada capa es relativamente simple y fácil de entender. Esto nos facilita garantizar la exactitud de cada paso. Cuando ocurren errores en los datos, a menudo solo necesitamos ajustar parcialmente un determinado paso.
mercado de datos
Arquitectura del mercado de datos
mercado de datos independiente
Mercado de datos dependiente
Estratificación del almacén de datos
Principio de capas del almacén de datos
1. Para facilitar el análisis de datos, es necesario proteger el negocio complejo subyacente y exponer los datos a la capa de análisis de una manera simple, completa e integrada.
2. Se minimiza el impacto de los cambios comerciales subyacentes y los cambios de demanda de nivel superior en el modelo. El impacto de los cambios del sistema comercial se debilita en la capa de datos básicos. Combinado con el método de construcción de arriba hacia abajo, el impacto de los cambios de demanda en el modelo. El modelo está debilitado.
3. Alta cohesión y acoplamiento flexible, es decir, alta cohesión de datos dentro de un tema o dentro de cada sistema completo, y acoplamiento flexible de datos entre temas o entre sistemas completos.
4. Cree la capa de datos básica del almacén para aislar el trabajo de integración de datos comerciales subyacente del trabajo de desarrollo de aplicaciones de la capa superior, sentando las bases para el desarrollo a gran escala del almacén. La jerarquía del almacén será más clara y los datos expuestos externamente. Estará más unificado.
Estratificación del almacén de datos
ods (almacén de datos operativos)
Accede a los datos originales intactos
DW (almacén de datos)
Capa de detalle de datos DWD (Detalle del almacén de datos)
La granularidad es coherente con la capa ods y proporciona ciertas garantías de calidad de los datos. Lo que debe hacer la capa dwd es la limpieza, integración y estandarización de datos. Se procesarán datos sucios, datos basura, especificaciones inconsistentes, definiciones de estado inconsistentes y especificaciones de nombres inconsistentes. Al mismo tiempo, para mejorar la usabilidad de los datos, se utilizarán algunas técnicas de degradación de dimensiones para degradar las dimensiones a tablas de hechos y reducir la asociación entre tablas de dimensiones y tablas de hechos. En esta capa, algunos datos también se agregarán para reunir datos de la misma área temática en la misma tabla para mejorar la usabilidad de los datos.
Capa intermedia de datos DWM (Data WareHouse Middle)
Sobre la base de la capa DWD, la operación de agregación de indicadores se realiza en las dimensiones centrales comunes para calcular los indicadores estadísticos correspondientes. En los cálculos reales, si los indicadores de cálculo de la tabla amplia se calculan directamente desde la capa DWD u ODS, habrá demasiados cálculos y muy pocas dimensiones. Por lo tanto, el método general es calcular primero varias tablas intermedias pequeñas. la capa dwm y luego júntelas en una sola mesa. Dado que el ancho y los límites del ancho son difíciles de definir, también puede eliminar la capa dwm y dejar solo la capa dws.
Capa de servicio de datos DWS (Data WareHouse Servce)
La granularidad es más gruesa que la capa detallada. Los datos basados en la capa dwd se integran y se resumen en datos de servicio para analizar un área temática determinada, que generalmente es una tabla amplia. La capa dws debe cubrir el 80% de la escena de nutrientes. También conocido como data mart o tabla amplia, se utiliza para consultas comerciales posteriores, análisis olap, distribución de datos, etc.
Capa de aplicación de datos de la aplicación.
Los datos se proporcionan principalmente para productos de datos y análisis de datos. Generalmente se almacenan en ES, PostgreSql, Redis y otros sistemas para su uso en sistemas en línea. También se pueden almacenar en Hive o Druid para análisis y extracción de datos. Por ejemplo, los datos del informe de los que hablamos a menudo se suelen colocar aquí.
capa superficial de dimensión tenue
Si tiene tablas de dimensiones, puede diseñar esta capa por separado.
Datos de alta cardinalidad
Generalmente, es similar a la tabla de datos del usuario y la tabla de datos de la tabla de productos. La cantidad de datos puede ser decenas de millones o cientos de millones.
Datos de circunferencia de base baja
Generalmente, es una tabla de configuración, como el significado chino correspondiente al valor de enumeración o la tabla de dimensiones de fecha. La cantidad de datos puede ser de un solo dígito, cientos, miles o decenas de miles.
Método de modelado del almacén de datos.
modelado dimensional
significado
Cree un modelo basado en las necesidades de las decisiones analizadas, y el modelo de datos construido satisface las necesidades de análisis, enfocándose en resolver el problema de que los usuarios completen el análisis rápidamente y también tiene un buen rendimiento de respuesta para consultas complejas a gran escala.
tabla de hechos
tabla periódica de hechos de instantáneas
tabla de hechos de transacciones
Tabla de hechos instantáneos acumulativos
tabla de hechos sin hechos
tabla de hechos agregados
Fusionar tablas de hechos
tabla de dimensiones
esquema de estrella
Todas las tablas de dimensiones están conectadas a la tabla de hechos y las tablas de dimensiones no están asociadas con otras tablas de dimensiones.
modelo de constelación
Ampliado del esquema en estrella, varias tablas de hechos comparten información de dimensiones
modelo de copo de nieve
La tabla de hechos está asociada con la tabla de dimensiones. La tabla de dimensiones puede tener otras tablas de dimensiones. Hay muchas asociaciones y bajo rendimiento.
Proceso de modelado dimensional
Seleccionar proceso de negocio
Granularidad de la declaración
La misma tabla de hechos debe tener la misma granularidad. No mezcle varias granularidades diferentes en la misma tabla de hechos. Se crean diferentes tablas de hechos para diferentes datos de granularidad. Para datos cuyos requisitos no están claros, establecemos granularidad atómica.
Confirmar dimensiones
Confirmar los hechos
modelado de paradigmas
6 paradigmas de base de datos
Primera forma normal (1NF)
Lo que se enfatiza es la atomicidad de la columna, es decir, la columna no se puede dividir en otras columnas.
Segunda forma normal (2NF)
Para satisfacer la primera forma normal, se deben cumplir dos condiciones: primero, la tabla debe tener una clave primaria; segundo, las columnas no incluidas en la clave primaria deben depender completamente de la clave primaria y no pueden depender solo de parte de la clave primaria. llave.
Tercera forma normal (3NF)
Para satisfacer 2nf, las columnas de clave no primaria deben depender directamente de la clave primaria y no puede haber dependencias transitivas. Es decir, no puede existir: la columna de clave no principal A depende de la columna de clave no principal B y la columna de clave no principal B
Forma normal de Boyce-Codd (BCNF)
Cuarta forma normal (4NF)
Quinta forma normal (5NF)
Pasos de modelado
1. Modelo conceptual
2. Modelo lógico
3.Modelo físico
Ideas de construcción del núcleo del almacén de datos
Desde los niveles de diseño, desarrollo, implementación y aplicación, evitamos la construcción repetida y la construcción de índices redundantes, asegurando así la estandarización y unificación del calibre de los datos y, en última instancia, logrando la asociación de enlace completo de los activos de datos, proporcionando una salida de datos estándar y datos unificados. capa pública
Proceso de construcción del centro de datos.
impala
tipo de datos
comando de shell
Arquitectura
módulo
impala
Recibir la solicitud del cliente, ejecutar la consulta y regresar al punto central de coordinación.
El proceso demonio en el nodo secundario es responsable de mantener la comunicación con el almacén de estado e informar el trabajo.
tienda estatal
Responsable de recopilar información de recursos distribuida en cada proceso de Impalad, el estado de salud de cada nodo y sincronizar la información de los nodos.
Responsable de la coordinación y programación de consultas.
catalogar
Distribuir información de metadatos de la tabla a cada impalada.
Reciba todas las solicitudes de statestore
colmenaMetastore
hdfs
ddl
Impala no admite CON DBPROPERTIES (por ejemplo: agregar información del creador y fecha de creación a la biblioteca)
Eliminar base de datos
soltar base de datos
impala no admite modificar la base de datos
dml
Importación de datos (básicamente lo mismo que Hive), Impala no admite la carga de datos en la ruta de entrada local...
Exportación de datos (impala no admite la sintaxis de inserción y sobrescritura... para exportar datos, puede usar impala -o en su lugar)
Los comandos de exportación e importación no son compatibles
Preguntar
La sintaxis básica es aproximadamente la misma que la de la declaración de consulta de Hive.
impala no admite el cubo
impala no admite agrupar por, ordenar por, distribuir por
Impala no admite las funciones COLLECT_SET(col) y explode(col)
Impala admite funciones de ventanas
función personalizada impala
udf
Almacenamiento y compresión
mejoramiento
1. Intente implementar stateStore y catalog en el mismo servidor tanto como sea posible para garantizar su comunicación.
2. Mejore la eficiencia del trabajo limitando la memoria de impala dameon (predeterminado 256) y la cantidad de subprocesos del almacén de estado
3. Optimización de SQL, llame al plan de ejecución antes de ejecutar SQL
4. Elija el formato de archivo apropiado para el almacenamiento para mejorar la eficiencia de las consultas.
5. Evite generar muchos archivos pequeños (si hay archivos pequeños generados por otros programas, puede usar una tabla intermedia para almacenar los datos del archivo pequeño en la tabla intermedia. Luego inserte los datos de la tabla intermedia en la tabla final mediante inserción. ..seleccionar...)
6. Utilice la tecnología de partición adecuada y calcule según la granularidad de la partición.
7. Utilice estadísticas de cálculo para recopilar información de la tabla. Cuando una tabla de contenido o una partición cambie significativamente, vuelva a calcular la tabla o partición de datos relacionados con las estadísticas. Porque las diferencias en el número de filas y valores distintos pueden hacer que Impala elija un orden de combinación diferente cuando utiliza una consulta en la tabla.
8. Optimización de la red io.
–a. Evite enviar todos los datos al cliente.
–b.Hacer filtrado condicional tanto como sea posible.
–c.
–d. Al generar archivos, evite utilizar resultados embellecidos.
–e. Intente utilizar una actualización de metadatos menos completa
9. Utilice el perfil para generar el plan de información subyacente y optimizar el entorno en consecuencia.
Teoría del lago de datos
Chispa - chispear
Módulo incorporado
núcleo de chispa
Implementé las funciones básicas de Spark, incluidos módulos como programación de tareas, administración de memoria, recuperación de errores e interacción con sistemas de almacenamiento. Spark Core también incluye definiciones de API para Resilient Distributed DataSet (RDD).
chispa sql
Spark es un paquete para manipular datos estructurados y puede admitir HQL
transmisión de chispa
Componente informático de transmisión, la API se corresponde en gran medida con el núcleo Spark
chispa mlib
Proporciona bibliotecas comunes de aprendizaje automático.
chispa graghx
cálculo gráfico
modo operativo
modo local
modo independiente
modo hilo
cliente de hilo
Características:
El controlador se ejecuta en el cliente y es adecuado para la interacción y la depuración.
grupo de hilos
Características
El controlador ejecuta applicationMaster iniciado por ResourceManager y es adecuado para entornos de producción.
núcleo de chispa
rddd
calcular
particiones
particionador
dependencias
operador
operador de conversión
tipo de valor
mapa (función)
mapParticiones(func)
El tipo de función debe ser Iterador[T] => Iterador[U]
mapParticionesConIndice(func)
El tipo de función debe ser (Int, Interator[T]) => Iterator[U]
mapa plano(func)
glom()
Forme cada partición en una matriz y forme un nuevo tipo RDD RDD[Array[T]]
agrupar por()
Subtema 1
Agrupe por el valor de retorno de la función pasada. Coloque los valores correspondientes a la misma clave en un iterador.
filtrar
muestra(conReemplazo, fracción, semilla)
Utilice la semilla aleatoria especificada para muestrear aleatoriamente una fracción de datos. withReplacement indica si los datos extraídos se reemplazan. verdadero significa muestreo con reemplazo, falso significa muestreo sin semilla de reemplazo para especificar la semilla del generador de números aleatorios.
distinto([numTasks]))
Devuelve un nuevo RDD después de deduplicar el RDD de origen. De forma predeterminada, solo funcionan 8 tareas paralelas, pero esto se puede cambiar pasando un parámetro numTasks opcional.
fusionarse (númParticiones)
Reduzca la cantidad de particiones para mejorar la eficiencia de ejecución de conjuntos de datos pequeños después de filtrar conjuntos de datos grandes.
repartición(númParticiones)
Todos los datos se mezclan aleatoriamente a través de la red nuevamente según la cantidad de particiones.
La diferencia entre fusionarse y repartirse
1. fusionar particiones, puede elegir si desea realizar el proceso de reproducción aleatoria. Por combinación aleatoria de parámetros: booleano = falso/verdadero Decidir.
2. La repartición en realidad llama a fusionarse para realizar una mezcla aleatoria.
ordenarPor(func,[ascendente], [numTasks])
Utilice func para procesar los datos primero y ordenarlos según los resultados de la comparación de datos procesados. El orden predeterminado es positivo.
tubería (comando, [envVars])
La canalización, para cada partición, ejecuta un script de shell y devuelve un RDD de salida.
tipo de valor doble
Unión
restar (otro conjunto de datos)
Una función que calcula la diferencia, eliminando los mismos elementos en dos RDD, y quedarán diferentes RDD
intersección (otro conjunto de datos)
Devuelve un nuevo RDD después de intersectar el RDD de origen y el parámetro RDD.
cartesiano (otro conjunto de datos)
Producto cartesiano
zip(otroconjunto de datos)
Combine dos RDD en un RDD en forma de clave/valor. De forma predeterminada, el número de particiones y elementos de los dos RDD es el mismo; de lo contrario, se generará una excepción.
tipo clave/valor
particiónPor(particionador)
Realice la operación de partición en pairRDD. Si la particiónRDD original es coherente con la particiónRDD existente, no se realizará ninguna partición. De lo contrario, se generará ShuffleRDD, lo que generará un proceso de reproducción aleatoria.
reducirByKey(func, [numTasks])
Llamado en un RDD (K, V), devuelve un RDD (K, V), utilizando la función de reducción especificada para agregar los valores de la misma clave. El número de tareas de reducción se puede pasar a través de la segunda opción. parámetros a configurar.
grupoPorClave()
groupByKey también opera en cada clave, pero solo genera una secuencia.
La diferencia entre reduceByKey y groupByKey
1. reduceByKey: agregación basada en clave, hay una operación de combinación (preagregación) antes de la reproducción aleatoria y el resultado de retorno es RDD [k, v]. 2. groupByKey: agrupa por clave y mezcla directamente. 3. Guía de desarrollo: se recomienda reduceByKey en lugar de groupByKey. Pero hay que prestar atención a si afectará la lógica empresarial.
agregadoPorClave
Parámetros: (zeroValue:U,[partitioner: Partitioner]) (seqOp: (U, V) => U,combOp: (U, U) => U)
En el RDD de pares kv, los valores se agrupan y fusionan según la clave. Al fusionar, cada valor y el valor inicial se utilizan como parámetros de la función seq para el cálculo, y el resultado devuelto se utiliza como un nuevo par kv. y luego el resultado se calcula de acuerdo con La clave se fusiona y, finalmente, el valor de cada grupo se pasa a la función de combinación para su cálculo (los dos primeros valores se calculan primero y el resultado devuelto y el siguiente valor se pasan a la función de combinación, etc.), y la clave y el resultado del cálculo son como Se genera un nuevo par de kv.
plegarPorClave
Parámetros: (valor cero: V)(func: (V, V) => V): RDD[(K, V)]
La operación simplificada de agregadoByKey, seqop y combop es la misma
combinarPorClave[C]
Parámetros: (createCombiner: V => C, mergeValue: (C, V) => C, mergeCombiners: (C, C) => C)
Función: fusionar V en un conjunto para el mismo K
Subtema 3
sortByKey([ascendente], [numTasks])
Cuando se llama a un RDD de (K, V), K debe implementar la interfaz Ordenada y devolver un RDD de (K, V) ordenado por clave.
mapaValores
Para tipos de la forma (K, V), solo opere en V
unirse (otro conjunto de datos, [numTasks])
Llamado a RDD de tipo (K, V) y (K, W), devuelve un RDD de (K, (V, W)) en el que todos los elementos correspondientes a la misma clave están emparejados.
cogrupo (otro conjunto de datos, [numTasks])
Llamado a RDD de tipo (K,V) y (K,W), devuelve un RDD de tipo (K,(Iterable<V>,Iterable<W>))
acción
reducir (función)
Agregue todos los elementos en el RDD a través de la función func, primero agregue los datos dentro de la partición y luego agregue los datos entre particiones
recolectar()
En el controlador, devuelve todos los elementos del conjunto de datos como una matriz.
contar()
Devuelve el número de elementos en el RDD.
primero()
Devuelve el primer elemento del RDD.
tomado)
Devuelve una matriz que consta de los primeros n elementos del RDD
tomarOrdenado(n)
Devuelve una matriz que consta de los primeros n elementos ordenados por este RDD
agregar
Parámetros: (zeroValue: U)(seqOp: (U, T) ⇒ U, combOp: (U, U) ⇒ U)
La función agregada agrega los elementos en cada partición a través de seqOp y el valor inicial, y luego usa la función combinada para combinar el resultado de cada partición con el valor inicial (zeroValue). El tipo final devuelto por esta función no necesita ser coherente con el tipo de elemento en el RDD
plegar (núm) (función)
La operación de plegado, la operación simplificada de agregado, seqop y combop son las mismas.
Subtema 9
núcleo de chispa
componentes del núcleo de chispa
conductor
ejecutor
chispa proceso de ejecución general
1) Después de enviar la tarea, primero se iniciará el programa Driver; 2) Luego, el controlador registra la aplicación con el administrador del clúster; 3) Luego, el administrador del clúster asigna e inicia el Ejecutor según el archivo de configuración de esta tarea; 4) El controlador comienza a ejecutar la función principal y la consulta Spark se ejecuta de manera perezosa. Cuando se ejecuta el operador de Acción, comienza el cálculo inverso y las etapas se dividen según amplias dependencias. Luego, cada etapa corresponde a un conjunto de tareas. múltiples tareas en el conjunto de tareas Buscar recursos disponibles Ejecutor para programación; 5) De acuerdo con el principio de localización, la tarea se distribuirá al ejecutor designado para su ejecución. Durante el proceso de ejecución de la tarea, el ejecutor continuará comunicándose con el controlador e informará el estado de ejecución de la tarea.
Modo de implementación
independiente
hilo hadoop
cliente de hilo
grupo de hilos
mesos
k8s
el recuento de palabras
sc.textFile("xx").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ _).saveAsTextFile("xx")
mejoramiento
Sesgo de datos
modelo de memoria
Algoritmos comunes
kafka
Hbase
definición
Hbase es un sistema noSql con alta confiabilidad, alto rendimiento, almacenamiento distribuido escalable, orientado a columnas y almacenamiento en tiempo real.
Características
1. Almacenamiento masivo
Hbase es adecuado para almacenar datos a nivel de PB y los datos a nivel de PC se pueden devolver en decenas a cientos de milisegundos.
2. Almacenamiento de columnas
El almacenamiento HBase solo tiene almacenamiento de familia de columnas, que contiene muchas columnas.
3. Extremadamente fácil de ampliar
La escalabilidad de Hbase se refleja principalmente en dos aspectos: uno es la expansión basada en las capacidades de procesamiento de la capa superior (RegionServer) y el otro es la expansión basada en el almacenamiento (HDFS). Al agregar horizontalmente máquinas RegionSever, se realiza la expansión horizontal para mejorar las capacidades de procesamiento de la capa superior de Hbase y mejorar la capacidad de Hbsae para atender a más regiones.
4. Alta concurrencia
Dado que la mayoría de las arquitecturas actuales que utilizan Hbase utilizan PC económicas, el retraso de una sola IO en realidad no es pequeño, generalmente entre decenas y cientos de ms. La alta concurrencia mencionada aquí significa principalmente que en el caso de la concurrencia, el retraso de IO único de Hbase no disminuye mucho. Capaz de obtener servicios de alta concurrencia y baja latencia.
5. Escaso
Sparse se debe principalmente a la flexibilidad de las columnas de Hbase. En la familia de columnas, puede especificar tantas columnas como desee. Cuando los datos de la columna están vacíos, no ocuparán espacio de almacenamiento.
arquitectura hbase
Diagrama de arquitectura
cliente
Contiene la interfaz para acceder a HBase y también incluye caché para acelerar el acceso a HBase. Por ejemplo, el caché contiene información .META.
cuidador del zoológico
Principalmente responsable de la alta disponibilidad del master, monitoreo del reginserver, ingreso de metadatos y mantenimiento de la configuración del cluster.
ZK garantiza que solo se esté ejecutando un maestro en el clúster. Cuando el maestro falla, se genera un nuevo maestro a través de un mecanismo de competencia.
Supervise el estado del servidor regional a través de zk. Cuando el servidor regional sea anormal, notifique al Maestro la información en línea y fuera de línea del servidor regional en forma de devoluciones de llamada.
Información de entrada unificada para almacenar metadatos a través de zk
hdfs
Proporcionar servicios de almacenamiento de datos subyacentes para HBase
Proporciona servicios de almacenamiento distribuido subyacentes para metadatos y datos de tablas.
Múltiples copias de datos garantizan una alta confiabilidad y disponibilidad
HMaster
Asignar región a RegionServer
Mantener el equilibrio de carga en todo el clúster
Mantener la información de metadatos del clúster
Descubra la región fallida y asigne la región fallida al RegionServer normal
Cuando falla RegionSever, coordina la división del Hlog correspondiente
Servidor HRegin
Maneja principalmente las solicitudes de lectura y escritura de los usuarios.
Gestionar la Región asignada por el maestro
Manejar solicitudes de lectura y escritura de clientes.
Responsable de interactuar con el HDFS subyacente y almacenar datos en HDFS.
Responsable de dividir la Región después de que se haga más grande.
Responsable de fusionar Storefiles
Role
HMaster
1. Monitorear el servidor de región
2. Manejo de la conmutación por error de RegionServer
3. Manejar cambios de metadatos
4. Manejar la asignación o transferencia de regiones
5. Datos de equilibrio de carga durante el tiempo de inactividad
6. Publique su ubicación para los clientes a través de Zookeeper
Servidor de Región
1. Responsable de almacenar los datos reales de HBase.
2. Procesar la Región que le ha sido asignada
3. Vaciar caché a HDFS
4. Mantener blog
5. Realizar compresión
6. Responsable de procesar la fragmentación de la región.
Otros componentes
Registros de escritura anticipada (wal)
Registro de modificación de HBase: al leer y escribir datos en HBase, los datos no se escriben directamente en el disco, sino que se retendrán en la memoria durante un período de tiempo (se pueden establecer umbrales de tiempo y volumen de datos). Sin embargo, guardar datos en la memoria puede tener una mayor probabilidad de causar pérdida de datos. Para resolver este problema, los datos primero se escribirán en un archivo llamado archivo de registro de escritura anticipada y luego se escribirán en la memoria. Entonces, cuando el sistema falla, los datos se pueden reconstruir a través de este archivo de registro.
región
Para fragmentar la tabla HBase, la tabla HBase se dividirá en diferentes regiones según el valor de RowKey y se almacenará en RegionServer. Puede haber varias regiones diferentes en un RegionServer.
almacenar
HFile se almacena en la Tienda y una Tienda corresponde a una familia de columnas en la tabla HBase.
TiendaMem
Como sugiere el nombre, es un almacenamiento de memoria, que se encuentra en la memoria y se utiliza para guardar las operaciones de datos actuales. Por lo tanto, después de guardar los datos en WAL, RegionServer almacenará los pares clave-valor en la memoria.
Archivo H
Este es el archivo físico real que contiene los datos originales en el disco, el archivo de almacenamiento real. StoreFile se almacena en HDFS en forma de Hfile.
Operaciones HBase
Estructura de datos HBase
Clave de fila
Al igual que la base de datos nosql, la clave de fila es la clave principal para acceder a los datos. Hay tres formas de acceder a las filas de HBase
1.Acceso a través de una única clave de fila
2. Pase el rango de clave de fila (regular)
3. Escaneo completo de la tabla
La clave de fila de RowKey (RowKey) puede ser cualquier cadena (la longitud máxima es 64 KB y la longitud en aplicaciones reales es generalmente de 10 a 100 bytes). Dentro de HBASE, RowKey se guarda como una matriz de bytes. Al almacenar, los datos se almacenan en orden lexicográfico (orden de bytes) de RowKey. Al diseñar RowKey, es necesario ordenar completamente las propiedades de almacenamiento y almacenar las filas que con frecuencia se leen juntas. (dependencia de la ubicación)
familia de columnas
Familia de columnas: cada columna de la tabla HBASE pertenece a una determinada familia de columnas. Las familias de columnas son parte del esquema de la tabla (las columnas no) y deben definirse antes de usar la tabla. Los nombres de las columnas tienen el prefijo de la familia de columnas. Por ejemplo, cursos:historia y cursos:matemáticas pertenecen a la familia de columnas de cursos.
celúla
Una unidad identificada de forma única por {rowkey, column Family:columu, version}. Los datos de la celda no tienen tipo y todos se almacenan en forma de código de bytes.
marca de tiempo
En HBase, una unidad de almacenamiento determinada por la clave de fila y la columna se llama celda. Cada celda almacena múltiples versiones de los mismos datos. Las versiones están indexadas por marca de tiempo. El tipo de marca de tiempo es un entero de 64 bits. HBASE puede asignar la marca de tiempo (automáticamente cuando se escriben datos), en cuyo caso la marca de tiempo es la hora actual del sistema con una precisión de milisegundos. El cliente también puede asignar marcas de tiempo explícitamente. Si la aplicación quiere evitar conflictos entre las versiones de los datos, debe generar sus propias marcas de tiempo únicas. En cada celda, las diferentes versiones de los datos se ordenan en orden cronológico inverso, es decir, los datos más recientes aparecen primero. Para evitar la carga de administración (incluido el almacenamiento y la indexación) causada por demasiadas versiones de datos, HBASE proporciona dos métodos de reciclaje de versiones de datos. Una es guardar las últimas n versiones de los datos y la otra es guardar las versiones dentro del último período de tiempo (como los últimos siete días). Los usuarios pueden configurar esto para cada familia de columnas.
Espacios de nombres
estructura del espacio de nombres
Mesa
Tabla, todas las tablas son miembros del espacio de nombres, es decir, la tabla debe pertenecer a un determinado espacio de nombres. Si no se especifica, estará en el espacio de nombres predeterminado.
Grupo RegionServer
Un espacio de nombres contiene el grupo RegionServer predeterminado.
Permiso
Los permisos y espacios de nombres nos permiten definir listas de control de acceso (ACL).
Cuota
Las cuotas pueden imponer la cantidad de regiones que puede contener un espacio de nombres.
Principios de datos de HBase
Principio de lectura de HBase
1) El cliente primero accede al cuidador del zoológico, lee la ubicación de la región de la metatabla y luego lee los datos en la metatabla. El meta también almacena la información de la región de la tabla de usuarios;
2) Encuentre la información de la región correspondiente en la metatabla según el espacio de nombres, el nombre de la tabla y la clave de fila;
3) Encuentre el servidor de región correspondiente a esta región;
4) Encuentre la región correspondiente;
5) Primero busque los datos de MemStore; si no, léalos de BlockCache;
6) Si BlockCache aún no está disponible, léalo desde StoreFile (para mayor eficiencia de lectura);
7) Si los datos se leen desde StoreFile, no se devuelven directamente al cliente, sino que primero se escriben en BlockCache y luego se devuelven al cliente.
Proceso de escritura de HBase
1) El cliente envía una solicitud de escritura a HregionServer;
2) HregionServer escribe datos en HLog (registro de escritura anticipada). Para persistencia y recuperación de datos;
3) HregionServer escribe datos en la memoria (MemStore);
4) Comentarios de que el Cliente ha escrito correctamente.
Proceso de descarga de datos
1) Cuando los datos de MemStore alcanzan el umbral (el valor predeterminado es 128 M, la versión anterior es 64 M), los datos se vacían en el disco duro, los datos en la memoria se eliminan y los datos históricos en el HLog se eliminan;
2) Y almacenar los datos en HDFS;
3) Hacer puntos de marca en HLog.
proceso de fusión de datos
1) Cuando el número de bloques de datos llega a 4, Hmaster activa la operación de fusión y Region carga los bloques de datos localmente para fusionarlos;
2) Cuando los datos combinados superen los 256 M, divídalos y asigne las regiones divididas a diferentes administraciones de HregionServer;
3) Cuando HregionServer deja de funcionar, divida el hlog en HregionServer, luego asígnelo a un HregionServer diferente para cargarlo y modifique .META.;
4) Nota: HLog se sincronizará con HDFS.
Uso integrado de colmena y HBase
Integrado a través de hive-hbase-handler-1.2.2.jar
Cree una tabla de Hive, asóciela con la tabla HBase e inserte datos en la tabla de Hive mientras afecta la tabla HBase.
Se almacenó una tabla hbase_emp_table en HBase y luego se crea una tabla externa en Hive para asociar la tabla hbase_emp_table en HBase, de modo que pueda usar Hive para analizar los datos en la tabla HBase.
Optimización de HBase
Alta disponibilidad (múltiples Hmasters)
En HBase, Hmaster es responsable de monitorear el ciclo de vida de RegionServer y equilibrar la carga de RegionServer, como Si Hmaster cuelga, todo el clúster de HBase caerá en un estado incorrecto y el estado de funcionamiento en este momento no será el mismo. Durará demasiado. Por lo tanto, HBase admite la configuración de alta disponibilidad de Hmaster.
preparticionado
Preparticionamiento manual
crear 'personal1','info','partición1',SPLITS => ['1000','2000','3000','4000']
Representa cinco particiones [min,1000),[1000,2000),[2000,3000),[3000,4000),[4000,max]
Generar prepartición de secuencia hexadecimal
crear 'staff2','info','partition2',{NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
Indica que el hexadecimal se divide en 15 particiones
Partición previa según las reglas establecidas en el archivo.
crear 'staff3','partition3',SPLITS_FILE => 'splits.txt'
El contenido de splits.txt es el siguiente
aaaa bbbb cccc dddd
javaAPI crea una partición
//Personaliza el algoritmo para generar una serie de valores hash Hash y almacenarlos en una matriz bidimensional byte[][] splitKeys = una función de valor hash //Crear instancia de HBaseAdmin HBaseAdmin hAdmin = nuevo HBaseAdmin(HBaseConfiguration.create()); //Crear instancia de HTableDescriptor HTableDescriptor tableDesc = nuevo HTableDescriptor(nombretabla); //Crear una tabla HBase con partición previa a través de una instancia HTableDescriptor y una matriz bidimensional de valores hash hAdmin.createTable(tableDesc, splitKeys);
diseño de clave de fila
Rowkey es el identificador único de un dato. Es necesario diseñar la clave de fila correctamente para que se distribuya uniformemente en la región para evitar la distorsión de los datos.
1. Genere números aleatorios, hashes y valores hash
por ejemplo: la clave de fila original es 1001 y después de SHA1 se convierte en: dd01903921ea24941c26a48f2cec24e0bb0e8cc7 La clave de fila original era 3001 y después de SHA1 se convirtió en: 49042c54de64a1e9bf0b33e00245660ef92dc7bd La clave de fila original era 5001 y después de SHA1 se convirtió en: 7b61dec07e02c188790670af43e717f0f46e8913 Antes de hacer esto, generalmente elegimos extraer muestras del conjunto de datos para determinar qué tipo de clave de fila utilizar como valor crítico de cada partición.
2. Inversión de cuerdas
por ejemplo: 20170524000001 convertido a 10000042507102
3. Concatenación de cadenas
20170524000001_a12e 20170524000001_93i7
Optimización de la memoria
HBase requiere una gran sobrecarga de memoria durante la operación. Después de todo, la tabla se puede almacenar en caché en la memoria. Generalmente, el 70% de toda la memoria disponible se asigna al montón de Java de HBase. Sin embargo, no se recomienda asignar una memoria de montón muy grande, porque si el proceso de GC continúa durante demasiado tiempo, el RegionServer estará en un estado no disponible a largo plazo. Generalmente, 16 ~ 48G de memoria son suficientes. Si la memoria ocupada por el marco es demasiado alta, lo que resulta en una memoria insuficiente del sistema, los servicios del sistema también arrastrarán el marco hasta la muerte.
Optimización básica
1. Permitir agregar contenido a archivos HDFS
hdfs-sitio.xml, hbase-sitio.xml Propiedad: dfs.support.append Explicación: Activar la sincronización de anexos HDFS puede cooperar perfectamente con la sincronización y persistencia de datos de HBase. El valor por defecto es verdadero.
2. Optimice la cantidad máxima de archivos abiertos permitidos por DataNode
hdfs-sitio.xml Propiedad: dfs.datanode.max.transfer.threads Explicación: HBase generalmente opera una gran cantidad de archivos al mismo tiempo, según la cantidad y el tamaño del clúster y las acciones de datos. Establecido en 4096 o superior. Valor predeterminado: 4096
3. Optimice el tiempo de espera de operaciones de datos con alta latencia
hdfs-sitio.xml Propiedad: dfs.image.transfer.timeout Explicación: Si el retraso para una determinada operación de datos es muy alto y el socket necesita esperar más, se recomienda Este valor se establece en un valor mayor (predeterminado 60000 milisegundos) para garantizar que no se agote el tiempo de espera del socket.
4. Optimice la eficiencia de la escritura de datos
sitio-mapred.xml Atributos: mapreduce.map.output.compress mapreduce.map.output.compress.codec Explicación: Habilitar estos dos datos puede mejorar en gran medida la eficiencia de la escritura de archivos y reducir el tiempo de escritura. Cambie el valor del primer atributo a verdadero y cambie el valor del segundo atributo a: org.apache.hadoop.io.compress.GzipCodec u otros métodos de compresión
5. Establezca la cantidad de oyentes RPC
hbase-sitio.xml Propiedad: hbase.regionserver.handler.count Explicación: El valor predeterminado es 30, que se utiliza para especificar la cantidad de oyentes RPC. Se puede ajustar según la cantidad de solicitudes del cliente. Cuando hay muchas solicitudes de lectura y escritura, aumente este valor.
6. Optimice el tamaño del archivo HStore
hbase-sitio.xml Propiedad: hbase.hregion.max.filesize Explicación: El valor predeterminado es 10737418240 (10 GB). Si necesita ejecutar tareas de HBase MR, puede reducir este valor porque una región corresponde a una tarea de mapa. Si una sola región es demasiado grande, el tiempo de ejecución de la tarea de mapa será demasiado. largo. El significado de este valor es que si el tamaño del HFile alcanza este valor, la región se dividirá en dos Hfiles.
7. Optimice la caché del cliente hbase
hbase-sitio.xml Propiedad: hbase.client.write.buffer Explicación: Se utiliza para especificar la caché del cliente HBase. Aumentar este valor puede reducir la cantidad de llamadas RPC, pero consumirá más memoria y viceversa. Generalmente necesitamos establecer un cierto tamaño de caché para reducir la cantidad de RPC.
8. Especifique scan.next para escanear el número de filas obtenidas por HBase
hbase-sitio.xml Propiedad: hbase.client.scanner.caching Explicación: Se utiliza para especificar el número predeterminado de filas obtenidas por el método scan.next. Cuanto mayor sea el valor, mayor será el consumo de memoria.
9.mecanismo dividido, compacto y empotrado
Cuando MemStore alcanza el umbral, los datos de Memstore se descargan en Storefile; el mecanismo compacto fusiona los archivos pequeños descargados en un Storefile grande. dividir significa que cuando la Región alcanza el umbral, la Región demasiado grande se dividirá en dos.
Atributos involucrados: Es decir: 128M es el umbral predeterminado de Memstore hbase.hregion.memstore.flush.tamaño: 134217728 Es decir: la función de este parámetro es vaciar todos los memstores de una única H Region cuando la suma de los tamaños de todos los Memstores en una única H Region excede el valor especificado. El vaciado de RegionServer se procesa de forma asincrónica agregando la solicitud a una cola para simular el modelo de producción y consumo. Entonces hay un problema aquí: cuando la cola no tiene tiempo para consumir y genera una gran acumulación de solicitudes, puede causar un aumento repentino en la memoria y, en el peor de los casos, activar OOM. hbase.regionserver.global.memstore.upperLimit: 0,4 hbase.regionserver.global.memstore.lowerLimit: 0,38 Es decir: cuando la cantidad total de memoria utilizada por MemStore alcanza el valor especificado por hbase.regionserver.global.memstore.upperLimit, se descargarán varios MemStore en el archivo. El orden de descarga de MemStore se ejecuta en orden descendente de tamaño hasta que se complete el proceso. la memoria utilizada por MemStore está vacía. Menos que lowerLimit.
filtro de floración
parpadear
Datosx1
presto
oozie
activos de datos
arranque de primavera
Preguntas de la entrevista para el entrevistador sobre camarones y corazón de cerdo
linux
Auto presentación
1 minuto para presentarte: En mi empresa anterior, construí principalmente la plataforma de datos China Continent Insurance, que accedía principalmente a Xiaomi, JD.com, Che300, los datos de seguros relacionados con el banco y generados internamente por Continent Insurance Company se dividieron en muchos temas, incluidos los temas de pedidos; , Temas de clientes, temas de reclamos, temas vencidos, temas de aprobación y temas de quejas. El negocio que desarrollo incluye temas de pedidos, temas de usuarios y temas vencidos. Lo que hago en el trabajo está relacionado con el modelado de almacenes de datos, el procesamiento de datos y el monitoreo de la calidad de los datos. y cálculos de indicadores de temas. Las principales tecnologías aplicadas incluyen hive, spark, hue, impala, hadoop, infomatical, etc., la plataforma agrega aproximadamente 1 TB de datos cada día.
Introducción de negocios