Галерея диаграмм связей 23 пункта знаний о больших данных и резюме интервью (1)
Простой шаблон, включая основы Java, хадуп, улей, теория хранилищ данных, импала, Теория озера данных и другой контент.
Отредактировано в 2024-01-18 15:05:07Знания о больших данных и резюме интервью
основы Java
Основные типы данных
байт, логическое значение 1 байт, символ, короткие 2 байта, int, число с плавающей запятой 4 байта, длинные, двойные 8 байт
аномальный
Бросок
Ошибка
Катастрофические фатальные ошибки, неконтролируемые программы, такие как переполнение стека.
Исключение
исключение времени выполнения
Исключение нулевого указателя, индекс массива выходит за пределы
Исключения времени компиляции (исключения, не связанные с временем выполнения)
IOException, ClassNotFoundException
Полиморфизм
структура данных
Общие структуры данных (8 типов)
множество
Запрос и изменение выполняются быстро, добавление и удаление — медленно.
Интервал хранения непрерывен, использование памяти серьезное, а сложность пространства велика.
Преимущества: Произвольное чтение и модификация выполняются быстро, поскольку массив непрерывен (сильный произвольный доступ и высокая скорость поиска).
Недостатки: вставка и удаление неэффективны, поскольку после вставки данных данные за этой позицией должны быть перемещены в память, а размер не фиксирован и не может быть легко расширен динамически.
связанный список
Быстрое добавление и удаление, медленный поиск
Пространство для хранения является дискретным, занимаемая память свободна, а сложность пространства невелика.
Преимущества: быстрая вставка и удаление, высокая загрузка памяти, отсутствие фиксированного размера, гибкое расширение.
Недостатки: невозможность поиска в случайном порядке, каждый раз начинается с первого, низкая эффективность запроса.
Хеш-таблица
Добавление, удаление и поиск выполняются быстро, хеширование данных — пустая трата места для хранения.
очередь
«Первым пришел — первым вышел», вставка хвоста и удаление верха происходят быстро, но другие виды доступа медленны.
куча
Первый пришел, последний ушел, удаление и вставка верхнего элемента выполняются быстро, но доступ к другим элементам, кроме верхнего, медленный.
красное черное дерево
Добавление, удаление и поиск выполняются быстро, а структура алгоритма сложна (подробности см. в двоичном дереве).
Бинарное дерево
Добавление, удаление и поиск выполняются быстро, но алгоритм удаления имеет сложную структуру.
Временная сложность в лучшем случае составляет O(logn), а в худшем — O(n).
специальное двоичное дерево
полное двоичное дерево
Если количество уровней двоичного дерева равно K, а количество узлов (2^K-1), это полное двоичное дерево (как показано на следующем рисунке).
Подтема 1
полное двоичное дерево
Количество слоев двоичного дерева равно h, количество узлов (1~h-1) достигло максимума, и все узлы слоя h сосредоточены слева (как показано на следующем рисунке).
двоичное дерево поиска
Все значения в левом поддереве меньше корневого узла, а все значения в правом поддереве меньше корневого узла. Обход по порядку должен быть отсортирован от меньшего к большему (как показано на рисунке). )
красное черное дерево
Сбалансированное двоичное дерево — это пустое дерево или разница высот между левым и правым поддеревьями не превышает 1, а левое и правое поддеревья являются сбалансированными двоичными деревьями. Красно-черное дерево должно быть бинарным деревом поиска (как показано на рисунке). фигура)
Функции:
временная сложность
Наихудшая временная сложность вставки, удаления и вставки равна O(log N).
журнал высотыN
Узлы либо черные, либо красные.
Корневой узел должен быть черным
Если узел красный, его дочерние узлы должны быть черными.
Для любого узла количество черных узлов на пути к конечному узлу должно быть одинаковым.
Каждый листовой узел (листовой узел — это NULL-указатель или NULL-узел в конце дерева) черный.
Оптимальное бинарное дерево (дерево Хаффмана)
Взвешенная длина пути дерева достигает минимума
B-дерево
Сбалансированное многопутевое дерево поиска (более двух путей поиска), отличное от двоичного дерева, представляет собой многопутевое дерево, O(log n)
B-дерево
Это самобалансирующаяся древовидная структура данных, которая поддерживает порядок данных; сложность поиска, последовательного доступа, вставки и удаления равна O (log n), а B-дерево хранит данные только в конечных узлах, поэтому некоторые B-деревья исключаются. Дефекты. Нелистовые узлы хранят только индексы, а не фактические данные. Все данные хранятся в конечных узлах. О(нлогн)
Высота дерева поддерживает поиск по диапазону
Почему Mysql использует числа B?
Меньше дискового ввода-вывода и поддержка поиска диапазона
Разница между B-деревом и B-деревом
1) Все данные в B-дереве находятся в листовых узлах. 2) Листовые узлы B-дерева имеют двунаправленные указатели для облегчения поиска по диапазону, а данные на листовых узлах соединяются последовательно от малого к большому.
битовая карта
Сэкономьте место для хранения и сделайте неудобным описание сложных взаимосвязей данных.
собирать
Проблема обхода коллекции
При использовании итератора для обхода коллекции и изменения объектов в коллекции (добавление, удаление, изменение) будет выдано исключение.
Коллекция
Список
ArrayList
Особенности: элементы хранилища в порядке, запросы выполняются быстро, а добавление и удаление — медленно.
Базовый массив реализован, и емкость может увеличиваться автоматически. Расширение по умолчанию составляет 1,5 раза от исходной емкости.
Он не является потокобезопасным. Доступна однопоточная обработка. Не рекомендуется использовать Collections.syncnizedArrayList(List l) для возврата потокобезопасного списка ArrayList.
Нижний уровень вызывает Arrays.copyof() в большом количестве, а System.arraycopy() расширяет его возможности.
Вектор
Базовая реализация массива изменяется с помощью ключевого слова синхронизированный, потокобезопасный и с низкой эффективностью. Начальная емкость по умолчанию равна 10, а емкость расширения по умолчанию увеличивается в 1 раз.
Связанный список
Реализация структуры двусвязного списка.
Запрос выполняется медленно, добавление и удаление выполняются быстро.
Сходства и различия между LinkedList, ArrayList и Vector:
Набор
СортированныйНабор
Набор деревьев
Базовая реализация красно-черного дерева, неупорядоченная коллекция, потокобезопасность.
Хэшсет
Подкласс: LinkedHashSet
HashSet реализован HashMap, поэтому структура данных представляет собой красно-черное дерево со связным списком массива, которое допускает нулевые значения, отсутствие дублирования, беспорядка и небезопасную многопоточность. Он хранит элементы в соответствии с алгоритмом хеширования и имеет высокий уровень поиска, удаления и операций. доступ к производительности. Используйте Collections.synchronizedHashSet() для возврата потокобезопасного HashSet.
Доступ к элементам возможен только через итераторы.
очередь
карта
Хэшмап
Хэшмап
Нижний уровень HashMap реализован с использованием массивов, связанных списков и красно-черных деревьев.
Когда количество объектов в цепочке в массиве достигнет 8, цепочка преобразуется в красно-черное дерево. Если красно-черное дерево имеет менее 6 узлов, оно преобразуется в связанный список.
Начальная емкость Hash по умолчанию равна 16. Когда элементы хранения в HashMap превышают коэффициент загрузки * текущую емкость, емкость будет увеличена в 2 раза по сравнению с исходным размером, а затем положение каждого элемента в массиве будет пересчитано.
Это не потокобезопасно, вы можете использовать ConcurrentHashMap.
ConcurrentHashMap
jdk1.8
Реализовано с использованием связанного списка, красно-черного массива узлов дерева, синхронизации cas (оптимистической блокировки).
Подкласс
linkedHashMap
Хеш-таблица
Подкласс
Характеристики
Безопасность резьбы
Безопасность потоков обеспечивается блокировкой всей хеш-таблицы. Этот метод обеспечивает безопасность потоков, но одновременное выполнение неэффективно.
СортированнаяКарта
ДеревоКарта
Шаблоны проектирования
Режим Singleton, 3 распространенных типа
Ленивый режим, создается при первом вызове
В режиме злодея класс создается сам по себе при инициализации, потокобезопасен.
Режим регистрации
режим прокси
статический прокси
Подтема 1
динамический прокси
динамический прокси JDK
CGlib
Заводской образец
шаблон строителя
режим адаптера
шаблон итератора
Общие категории
Нить
Представляет строку
Строковые классы, измененные с помощью Final, не могут быть унаследованы и представляют собой неизменяемые последовательности символов.
Символьное содержимое объекта String хранится в массиве символов value[]
Если строковая константа склеена с константой, она окажется в пуле констант области метода, и в пуле констант не будет констант с одинаковым содержимым, если константа склеена с какой-либо переменной, так и будет; храниться в куче.
JVM
Явак
Компилятор, который компилирует язык Java в двоичный файл, распознаваемый jvm.
компоненты
раздел памяти JVM
счетчик команд
Это небольшой объем памяти, который является индикатором кода, выполняемого текущим потоком. Путем изменения значения счетчика выбирается следующая инструкция байт-кода, которую необходимо выполнить, каждый поток имеет уникальный программный счетчик; нет счетчика программы между потоками. Влияние; Единственная область, где OOM не произойдет; если поток выполняет метод Java, счетчик программы записывает адрес выполняемой инструкции байт-кода виртуальной машины. Если выполняется локальный метод, счетчик. пусто.
стек виртуальной машины Java
Поток частный, в основном хранит локальные переменные, кадры стека, стеки операндов, динамические ссылки, выходы методов и другую информацию.
собственный стек методов
Вызов библиотеки классов операционной системы
куча
Совместное использование потоков, в основном все объекты находятся в куче Java, основной области для сбора мусора.
область метода
Совместное использование потоков в основном хранит информацию о классах, константы, статические переменные и данные скомпилированного кода.
Пул констант времени выполнения
Часть области метода. Хранение буквальных и символических ссылок
Многопоточность
программа
Набор инструкций, написанных на определенном языке для выполнения определенной задачи, то есть статический фрагмент кода, статический объект.
процесс
Процесс однократного выполнения программы или исполняемая программа — это динамический процесс со своим собственным процессом создания, существования и гибели (жизненного цикла).
Функции:
Программы статичны, процессы динамичны
Процесс — это наименьшая единица распределения ресурсов. Когда система работает, каждому процессу будет выделена отдельная область памяти.
нить
Далее процесс подразделяется на потоки, которые представляют собой путь выполнения программы.
Функции:
Если процесс одновременно выполняет несколько потоков, он поддерживает многопоточность.
Потоки служат единицами планирования и выполнения. Каждый поток имеет независимый стек и счетчик программ (pc), а накладные расходы на переключение потоков невелики.
Несколько потоков в процессе используют одну и ту же единицу памяти/адресное пространство памяти -> они размещают объекты из одной и той же кучи и могут получать доступ к одним и тем же объектам и переменным. Это делает взаимодействие между потоками более простым и эффективным. Но совместное использование нескольких потоков приведет к проблемам безопасности.
Параллелизм и параллелизм
параллель:
Два или более события происходят одновременно
одновременно:
Два или более события происходят в один и тот же интервал времени
Создание темы
Нить
Наследуйте класс Thread и переопределите реализацию метода run. Код в методе run является телом потока. Создавая экземпляр подкласса, который наследует Thread, вызовите метод start, чтобы позволить потоку вызывать метод run.
Общие методы потоков
(1) void start(): запустить поток и выполнить метод run() объекта. (2) run(): операции, выполняемые потоком по расписанию. (3) String getName(): возвращает имя потока. (4) void setName (имя строки): установить имя потока. (5) static Thread currentThread(): возвращает текущий поток. Это в подклассах Thread, обычно используемых для классов реализации основного потока и Runnable. (6) static void yield(): поток уступает место выполняющемуся в данный момент потоку и приостанавливает его, предоставляя возможность выполнения потоку с тем же или более высоким приоритетом. Если в очереди нет потока с таким же приоритетом, игнорируйте этот метод. (7) join(): когда метод join() других потоков вызывается в определенном потоке выполнения программы, вызывающий поток будет заблокирован до тех пор, пока поток соединения, добавленный методом join(), не будет выполнен. также быть казненным (8) static void Sleep (длинные миллис): (указанное время: миллисекунды) приводит к тому, что текущий активный поток отказывается от управления процессором в течение указанного периода времени, давая другим потокам возможность выполниться и создавая повторную очередь по истечении времени. вверх. Выдает InterruptedException (9) stop(): принудительно завершает жизненный цикл потока, не рекомендуется. (10) логическое значение isAlive(): возвращает логическое значение, чтобы определить, активен ли поток.
Приоритет потока:
Когда поток создается, он наследует приоритет родительского потока.
Низкий приоритет имеет низкую вероятность быть запланированным, и его не обязательно нужно вызывать после потока с высоким приоритетом.
1. Уровень приоритета потока MAX_PRIORITY: 10 МИН_ПРИОРИТЕТ: 1 НОРМ_ПРИОРИТЕТ: 5 2. Используемые методы getPriority(): возвращает значение приоритета потока. setPriority(int newPriority): изменить приоритет потока.
Состояние потока Thread.State
Новый
готовый
бегать
блокировать
умереть
работоспособный
1) Определите подкласс и реализуйте интерфейс Runnable. 2) Перепишите метод run в интерфейсе Runnable в подклассе. 3) Создайте объект потока с помощью конструктора класса Thread, содержащего параметры. 4) Передайте объект подкласса интерфейса Runnable в качестве фактического параметра конструктору класса Thread. 5) Вызовите метод start класса Thread: запустите поток и вызовите метод run интерфейса подкласса Runnable.
отзывной
вызываемый может быть выполнен с помощью ExecutorService или в качестве параметра FeatureTask.
публичный класс MyCallable реализует Callable<T> { @Override public T call() выдает исключение { // Определить код, который можно вызвать здесь } } MyCallable myCallable = новый MyCallable(); ИсполнительexecutorService = Executors.newSingleThreadExecutor(); Future<T> будущее = executor.submit(myCallable); Т результат = Future.get();
Задача Callable<Process> = () -> { //Выполнение асинхронных задач Время выполнения = Runtime.getRuntime(); Процесс процесса = runtime.exec("/Users/mac/Desktop/qc-java-runtime/src/main/java/com/qc/runtime/shell.sh"); процесс возврата; }; //Обернуть вызываемый объект в FutureTask FutureTask<Process> будущее = новый FutureTask<>(задача); //Запускаем новый поток для выполнения асинхронных задач новый поток (будущее).start(); // Получаем результаты асинхронной задачи Результат процесса = Future.get(); System.out.println(результат);
Замок
Для одновременной работы вам нужен какой-то способ предотвратить доступ двух задач к одним и тем же ресурсам (эффективно конкурируя за общие ресурсы). Способ предотвратить этот конфликт — заблокировать ресурс, когда он используется задачей. Первая задача, получившая доступ к ресурсу, должна заблокировать ресурс, чтобы другие задачи не могли получить к нему доступ, пока он не будет разблокирован, после чего другая задача может заблокировать и использовать его.
Синхронизировано
В качестве блокировки синхронизации можно использовать любой объект. Все объекты автоматически содержат один замок (монитор). Блокировки для синхронизированных методов: статические методы (имя класса.класс), нестатические методы (это) Синхронизированный блок кода: укажите его самостоятельно, часто его также указывают как this или имя класса.класс
тупик
Разные потоки занимают необходимые друг другу ресурсы синхронизации и не сдаются. Все они ждут, пока другая сторона отдаст нужные им ресурсы, образуя тупик.
После возникновения взаимоблокировки не возникает никаких исключений или запросов, но все потоки блокируются и не могут продолжаться.
разблокировка замка
Выполнение метода синхронизации и блока кода синхронизации текущего потока завершается.
Текущий поток сталкивается с прерыванием и возвратом в синхронизированном блоке кода или синхронизированном методе, что прекращает продолжающееся выполнение блока кода и метода.
В текущем потоке синхронизированного блока кода или синхронизированного метода возникает необработанная ошибка или исключение, что приводит к ненормальному завершению.
Текущий поток выполняет метод wait() объекта потока в блоке кода синхронизации и методе синхронизации. Текущий поток приостанавливает работу и снимает блокировку.
Протокол сетевой связи
Модель OSI (протокол)
Модель слишком идеальна и ее нельзя продвигать в Интернете.
Уровни OSI
Прикладной уровень
Уровень представления
сеансовый уровень
транспортный уровень
Сетевой уровень
канальный уровень
физический слой
Модель TCP/IP (протокол)
де-факто международный стандарт
Уровни TCP/IP
Прикладной уровень
транспортный уровень
Сетевой уровень
физический уровень канала передачи данных
Сравнение двух моделей
Инкапсуляция данных
Демонтаж данных
IP и порт
Важные протоколы сетевого транспортного уровня UDP и TCP
UDP (протокол пользовательских дейтаграмм)
1. Инкапсулируйте данные, источник и пункт назначения в пакеты данных без установления соединения. 2. Размер каждой датаграммы ограничен 64 КБ. 3. Отправителя не волнует, готова другая сторона или нет, а получатель не подтверждает получение, поэтому это ненадежно. 4. Можно транслировать и отправлять 5. Нет необходимости освобождать ресурсы при отправке данных, низкие накладные расходы и высокая скорость.
TCP (протокол управления передачей)
1. Перед использованием протокола TCP необходимо сначала установить TCP-соединение для формирования канала передачи данных. 2. Перед передачей используется метод «трехстороннего рукопожатия», и связь «точка-точка» надежна. 3. Два прикладных процесса взаимодействуют по протоколу TCP: клиент и сервер. 4. Во время соединения могут передаваться большие объемы данных. 5. После завершения передачи установленное соединение необходимо разорвать, что неэффективно.
Трехстороннее рукопожатие (установление соединения)
1. Клиент отправляет сообщение с запросом на установление TCP-соединения. Сообщение содержит порядковый номер, который генерируется случайным образом отправляющей стороной, и устанавливает поле SYN (синхронизация) в сообщении равным 1, что указывает на наличие TCP-соединения. необходимо установить. (SYN=1, seq=x, x — случайно сгенерированное значение); 2. Сервер отвечает на сообщение запроса TCP-соединения, отправленное клиентом, которое содержит порядковый номер seq, который генерируется случайным образом отвечающей стороной, устанавливает SYN в 1 и генерирует поле ACK. Значение поля ACK отправляется. клиентом добавьте 1 к переданному порядковому номеру seq для ответа, чтобы, когда клиент получит информацию, он знал, что его запрос на установление TCP был проверен. (SYN=1, ACK=x 1, seq=y, y — случайно сгенерированное значение). Подтверждение плюс 1 здесь можно понимать как подтверждение того, с кем установлено соединение; 3. После того, как клиент получит запрос на проверку установления TCP, отправленный сервером, он увеличит свой порядковый номер на 1, снова ответит на запрос проверки ACK и добавит 1 к последовательности, отправленной сервером для ответа. (SYN=1, ACK=y 1, seq=x 1).
Помашите четыре раза (отключиться)
1. Клиент отправляет сообщение с запросом на отключение TCP-соединения. Сообщение содержит порядковый номер, который генерируется отправителем случайным образом. Он также устанавливает поле FIN в сообщении равным 1, что указывает на необходимость установления TCP-соединения. отключен. (FIN=1, seq=x, x генерируется клиентом случайным образом); 2. Сервер ответит на сообщение с запросом на отключение TCP, отправленное клиентом, которое содержит порядковый номер последовательности, который случайно генерируется ответной стороной, и сгенерирует поле ACK. Значением поля ACK является последовательность seq. номер, отправленный клиентом. Обычно к ответу добавляется 1, чтобы, когда клиент получит информацию, он знал, что его запрос на отключение TCP был проверен. (FIN=1, ACK=x 1, seq=y, y генерируется сервером случайным образом); 3. После того, как сервер ответит на запрос на отключение TCP клиента, он не будет немедленно отключать TCP-соединение. Сервер сначала проверяет, что все данные, переданные в A, были переданы, прежде чем отключиться. Как только передача данных будет подтверждена, поле FIN. ответного сообщения будет установлен на 1, и будет сгенерирован случайный порядковый номер. (FIN=1, ACK=x 1, seq=z, z генерируется сервером случайным образом); 4. После получения запроса на отключение TCP от сервера клиент ответит на запрос на отключение TCP, включая случайно сгенерированное поле seq и поле ACK. Поле ACK добавит 1 к последовательности запроса на отключение TCP сервера, таким образом. Завершите проверочный ответ, запрошенный сервером. (FIN=1, ACK=z 1, seq=h, h генерируется клиентом случайным образом) На этом этапе 4-волновой процесс отключения TCP завершен.
Подтема 3
Сетевая розетка
Комбинация ip и порта образует сокет
Суть сетевой коммуникации: связь между сокетами
Классификация
потоковый сокет
Обеспечить надежный сервис потоков байтов с использованием TCP
Этапы программирования сокетов на основе TCP
клиент
1. Создать сокет. Создайте объект класса Socket на основе IP-адреса или номера порта указанного сервера. Если сервер отвечает, устанавливается линия связи от клиента к серверу. Если соединение не удалось, произойдет исключение. 2. Откройте поток ввода/вывода, подключенный к Socket: используйте метод getInputStream() для получения входного потока и используйте метод getOutputStream() для получения выходного потока для передачи данных. 3. Операции чтения/записи на Сокете по определенному протоколу: читаем информацию, заложенную сервером в строку, через входной поток (но не можем прочитать информацию, заложенную в строку самостоятельно), и записываем информацию в поток. через выходной поток. 4. Закройте сокет: отключите клиент от сервера и освободите линию.
Сервис-Терминал
1. Вызов ServerSocket(int port): создайте сокет на стороне сервера и привяжите его к указанному порту. Используется для мониторинга клиентских запросов. 2. Вызов Accept(): прослушивание запросов на соединение. Если клиент запрашивает соединение, примите соединение и верните объект сокета связи. 3. Вызовите методы getOutputStream() и getInputStream() объекта класса Socket: получите выходной поток и входной поток и начните отправлять и получать сетевые данные. 4. Закройте объекты ServerSocket и Socket: доступ клиента завершен и сокет связи закрыт.
дейтаграммный сокет
Используйте UDP для предоставления услуг передачи данных «наилучшего качества».
Сетевое программирование на основе UDP
1. Классы DatagramSocket и DatagramPacket реализуют сетевые программы на основе протокола UDP. 2. Датаграммы UDP отправляются и принимаются через сокет датаграммы DatagramSocket. Система не гарантирует, что датаграмма UDP может быть безопасно доставлена к месту назначения, а также не может определить, когда она прибудет. 3. Объект DatagramPacket инкапсулирует дейтаграмму UDP, и эта дейтаграмма содержит IP-адрес и номер порта отправителя, а также IP-адрес и номер порта получателя. 4. Каждая датаграмма в протоколе UDP предоставляет полную информацию об адресе, поэтому нет необходимости устанавливать соединение между отправителем и получателем. Так же, как отправить экспресс-посылку.
процесс
1. DatagramSocket и DatagramPacket. 2. Установите отправляющую и принимающую стороны. 3. Создать пакет данных 4. Вызов методов отправки и получения Socket. 5. Закрыть розетку Примечание. Отправляющая и принимающая стороны — это две независимые работающие программы.
URL-адрес
отражение
концепция
Механизм отражения JAVA находится в рабочем состоянии. Для любого класса вы можете знать все свойства и методы этого класса, для любого объекта вы можете вызывать любые его методы и свойства, а также динамически получать информацию и динамически вызывать функцию; Метод объекта называется механизмом отражения языка Java.
Получить экземпляр класса class
1) Предпосылка: если конкретный класс известен, его можно получить через атрибут класса. Этот метод является самым безопасным и надежным и имеет самую высокую производительность программы. Пример: Класс clazz = String.class; 2) Предпосылка: если экземпляр определенного класса известен, вызовите метод getClass() экземпляра, чтобы получить объект класса. Пример: Class clazz = "www.atguigu.com".getClass(); 3) Предварительное условие: полное имя класса известно, класс находится в пути к классу и может быть получен с помощью статического метода класса Class. Полученное с помощью forName(), исключение ClassNotFoundException может быть выброшено. Пример: Class clazz =Class.forName("java.lang.String"); 4) Другие методы (не обязательно) ClassLoader cl = this.getClass().getClassLoader(); Class clazz4 = cl.loadClass("Полное имя класса");
Общие методы класса class
Типы с объектами класса
(1) класс: Внешние классы, члены (внутренние классы-члены, статические внутренние классы), локальные внутренние классы, анонимные внутренние классы (2) интерфейс: интерфейс (3)[]: массив (4) перечисление: перечисление (5) аннотация: аннотация @interface (6) примитивный тип: базовый тип данных (7)пустота
пример
Класс c1 = Объект.класс; Класс c2 = Сопоставимый.класс; Класс c3 = String[].class; Класс c4 = int[][].class; Класс c5 = ТипЭлемента.класс; Класс c6 = Override.class; Класс c7 = int.class; Класс c8 = void.class; Класс c9 = Класс.класс; int[] a = новый int[10]; int[] b = новый int[100]; Класс c10 = a.getClass(); Класс c11 = b.getClass();
Подтема 11
Хадуп
hdfs
Преимущества и недостатки hdfs
преимущество
Отказоустойчивость (механизм репликации)
Подходит для обработки больших данных, может обрабатывать данные петабайтного уровня и миллионы файлов.
Развертывание на дешевых машинах
недостаток
Не подходит для доступа к данным с малой задержкой.
Невозможно эффективно хранить большое количество маленьких файлов. Память namenode ограничена, и если маленьких файлов слишком много, время адресации будет больше, чем время обработки файла.
Одновременная запись не поддерживается, а файлы изменяются случайным образом.
HDFS архитектурная композиция
именной узел
Управление пространством имен hdfs
Настройка политики реплики
Управление информацией о сопоставлении блоков
Обрабатывать запросы клиентов
узел данных
Блок данных хранилища
Выполнение запросов на чтение и запись блоков данных.
клиент
Разделение файла, разбиение файла на блоки при загрузке файла
Взаимодействуйте с namenode, чтобы получить информацию о местоположении файла.
Взаимодействуйте с datanode, читайте или записывайте данные
клиент предоставляет команды для управления hdfs
Клиент предоставляет команды для доступа к HDFS, такие как операции добавления, удаления и проверки в HDFS.
вторичныйимяузел
Помогите nameNode работать, объединяйте fsimage и редактируйте файлы и отправляйте их в nameNode.
Помощь в восстановлении Namenode в чрезвычайных ситуациях
размер блока файла hdfs
Hadoop1.x — 64 МБ, Hadoop2.x/3.x — 128 МБ.
Оптимальное состояние – когда время адресации составляет 1% от времени передачи.
Почему размер блока файлов HDFS не может быть слишком большим или слишком маленьким
1. Если он слишком мал, время поиска увеличится.
2. Если блок слишком велик, время передачи данных будет значительно больше, чем время нахождения начальной позиции блока, в результате чего программа будет обрабатывать этот блок данных очень медленно.
оболочка
загрузить
Hadoop fs -moveFromLocal локальный каталог файлов hdfs (локальное вырезание и копирование в hdfs)
Hadoop fs -copyFromLocal локальный каталог файлов hdfs (копировать локально в hdfs)
Hadoop fs - поместить локальный файл в каталог hdfs (скопировать локально и загрузить в hdfs)
Hadoop fs -appendToFile локальный файл файл hdfs (данные локального файла добавляются в конец файла hdfs)
скачать
Hadoop fs -copyToLocal локальный каталог файла hdfs (файл скопирован в локальный каталог)
Hadoop fs -get локальный каталог файла hdfs (файл скопирован в локальный каталог)
работающие HDFS
каталог Hadoop fs -ls (отобразить информацию в каталоге)
каталог Hadoop fs -mkdir (создать каталог)
-chgrp, -chmod, -chown (изменить владельца файла)
Hadoop fs -cat файл (показать содержимое файла)
каталог файлов Hadoop fs -cp (скопируйте файл в другой каталог)
Hadoop fs -tail file (отображает 1 КБ данных в конце файла)
Hadoop fs -rm удалить файлы или папки
каталог Hadoop fs -rm -r (рекурсивно удалить каталог и содержимое в нем)
хадоп фс -du
Hadoop fs -setrep (Установите количество реплик и запишите их только в namenode. Если количество datanodes меньше заданного количества реплик, то количество реплик будет равно количеству datanode)
Операция hdfs api: через объект FileSystem
Процесс чтения и записи hdfs
Процесс чтения
Подтема 1
процесс записи
Иллюстрация
Подтема 3
улей
концепция
Hive — это инструмент управления хранилищем данных, основанный на Hadoop, который отображает структурированные данные в таблицу и предоставляет функции запросов, подобные SQL.
принцип
Сущность Конвертировать HQL в задачи г-на
хранилище метаданных
Метаданные: включая имя таблицы, базу данных, которой принадлежит таблица (по умолчанию), владельца таблицы, поле столбца/раздела, тип таблицы (независимо от того, является ли это внешней таблицей), каталог, в котором расположены данные таблицы, и т. д.
клиент
Обеспечить интерфейс jdbc/ODBC, доступ к веб-интерфейсу, доступ к интерфейсу и т. д.
Водитель
ПарсерПарсер SQL
Преобразование sql в абстрактное синтаксическое дерево AST. Этот шаг обычно выполняется с помощью стороннего инструмента, такого как antrl; выполняется синтаксический анализ SAT, чтобы проверить правильность семантики sql, существуют ли имена таблиц и столбцов и т. д.
Физический план компилятора
Преобразование AST в логический план выполнения
Оптимизатор запросов Оптимизатор
Оптимизация логических планов выполнения
Исполнение
Логический план обратной записи преобразуется в план физического выполнения, который можно запустить. Для hive он преобразуется в задачи mr/tez/spark.
тип данных
Основные типы данных
Тип String в hive теоретически может хранить символы 2G.
Тип данных коллекции
Оператор создания таблицы типов данных коллекции
создать таблицу тестов( строка имени, массив друзей<строка>, дочерняя карта<string, int>, структура адреса<улица:строка, город:строка> ) Поля с разделителями формата строки, оканчивающиеся символом ',' //Разграничитель столбца элементы коллекции, оканчивающиеся '_' //Разграничитель MAP STRUCT и ARRAY (разделение данных символ) ключи карты оканчиваются ':' // ключ карты и разделитель значений строки, заканчивающиеся ' ' //Разделитель строк
преобразование типов
Атомарные типы данных Hive преобразуются неявно, аналогично преобразованию в Java. Например, если выражение использует тип INT, TINYINT будет автоматически преобразовано в тип INT, но Hive не выполнит обратное преобразование. Например, если выражение использует тип TINYINT, INT не будет автоматически преобразовано в TINYINT. введите, и он вернет ошибку, если не использовать операцию CAST.
Неявные правила преобразования
1. Любой целочисленный тип можно неявно преобразовать в более широкий тип, например TINYINT. Заменив на INT, INT можно преобразовать в BIGINT.
2. Все целочисленные типы, типы FLOAT и STRING, могут быть неявно преобразованы в DOUBLE. (Неявное преобразование String и double может легко привести к искажению данных)
3.TINYINT, SMALLINT и INT можно преобразовать в FLOAT.
4. Тип BOOLEAN нельзя преобразовать в какой-либо другой тип.
ДДЛ
Создать таблицу
СОЗДАТЬ [ВНЕШНЮЮ] ТАБЛИЦУ [ЕСЛИ НЕ СУЩЕСТВУЕТ] имя_таблицы [(имя_столбца тип_данных [КОММЕНТАРИЙ_комментарий_столбца], ...)] [КОММЕНТАРИЙ таблица_комментарий] [PARTITIONED BY (имя_столбца, тип_данных [COMMENT col_comment], ...)] [CLUSTERED BY (имя_столбца, имя_столбца, ...) [SORTED BY (имя_столбца [ASC|DESC], ...)] НА количество бакетов ВЕДРО] [ФОРМАТ СТРОКИ формат_строки] [СОХРАНЕНО КАК формат_файла] [РАСПОЛОЖЕНИЕ hdfs_path] [TBLPROPERTIES (имя_свойства=значение_свойства, ...)] [AS select_statement]
объяснять
(1) CREATE TABLE создает таблицу с указанным именем. Если таблица с таким именем уже существует, генерируется исключение, пользователь может использовать опцию IF NOT EXISTS, чтобы игнорировать это исключение; (2) Ключевое слово EXTERNAL позволяет пользователям создавать внешнюю таблицу. При создании таблицы они могут указать путь (LOCATION), указывающий на фактические данные. При удалении таблицы метаданные и данные внутренней таблицы будут удалены. вместе, а внешние таблицы удаляют только метаданные, а не данные. (3) КОММЕНТАРИЙ: Добавляйте комментарии к таблицам и столбцам. (4) PARTITIONED BY создает таблицу разделов. (5) CLUSTERED BY создает таблицу сегментов. (6) SORTED BY обычно не используется. Он используется для сортировки одного или нескольких столбцов в сегменте. (7) ФОРМАТ СТРОК, РАЗДЕЛЕННЫЙ [ПОЛЯ, ЗАВЕРШАЮЩИЕСЯ СИМВОЛАМИ] [ЭЛЕМЕНТЫ КОЛЛЕКЦИИ ПРЕКРАЩЕНО символом] [КЛАВИШИ КАРТЫ ЗАВЕРШАЮТСЯ СИМВОЛОМ] [СТРОКИ ЗАВЕРШАЮТСЯ СИМВОЛОМ] SERDE serde_name [С SERDEPROPERTIES (имя_свойства=значение_свойства, имя_свойства=значение_свойства, ...)] Пользователи могут настроить SerDe или использовать встроенный SerDe при создании таблиц. Если ROW FORMAT или ROW FORMAT DELIMITED не указаны, будет использоваться встроенный SerDe. При создании таблицы пользователю также необходимо указать столбцы для таблицы. При указании столбцов таблицы пользователь также указывает пользовательский SerDe, который использует SerDe для определения. Конкретные данные столбца указанной таблицы. SerDe — это сокращение от Serialize/Deserilize. Hive использует Serde для упорядочивания и десериализации объектов строк. (8) STORED AS определяет тип файла хранения. Часто используемые типы файлов хранения: SEQUENCEFILE (файл двоичной последовательности), TEXTFILE (текст), RCFILE (файл формата хранения столбцов). Если данные файла представляют собой обычный текст, вы можете использовать STORED AS. ТЕКСТОВЫЙ ФАЙЛ. Если данные необходимо сжать, используйте STORED AS SEQUENCEFILE. (9) РАСПОЛОЖЕНИЕ: укажите место хранения таблицы в HDFS. (10) AS: за которым следует оператор запроса для создания таблицы на основе результатов запроса. (11) LIKE позволяет пользователям копировать существующую структуру таблицы, но не данные.
Таблица разделов
Суть таблицы разделов — соответствовать папке на HDFS, а раздел в Hive — это подкаталог.
ДМЛ
нагрузка
загрузить данные [локальные] входящий путь '/opt/module/datas/student.txt' [перезаписать] в таблицу Student [раздел (partcol1=val1,…)];
вставлять
основная вставка
вставить в (перезаписать) таблицу...
Вставка нескольких таблиц
из имени таблицы вставить в таблицу t1.... выбрать.... из tableName, вставить в таблицу t2.... выбрать.... из tableName
Запрос и создание таблиц
создать имя таблицы тюков как выбранное.....
Загрузить данные для создания таблицы
1. Загрузите данные в hdfs.
2. Создайте таблицу и укажите ее расположение на hdfs.
Импортируйте данные в Hive
Примечание. Сначала используйте экспорт, чтобы экспортировать, а затем импортировать данные.
импортировать раздел таблицы Student2 (месяц = '201709') из '/user/hive/warehouse/export/student';
Усечение удаляет данные в таблице.
Удалить можно только таблицы управления, данные во внешних таблицах удалить невозможно.
Часто используемые функции
Макс
мин
сумма
среднее
считать
Сортировать
глобальная сортировка
порядок по глобальной сортировке, редуктор только один, эффективность крайне низкая при большом объеме данных, но эффективность высокая при небольшом объеме данных
Сортировка разделов
Распределение по аналогично пользовательскому разделителю в задаче mr, правило распределения по заключается в том, что после деления по модулю числа редукторов на основе хэш-кода поля раздела остатки с одинаковым номером попадут в один и тот же раздел.
локальная сортировка
sort by — это внутренняя сортировка каждого редуктора, глобально неупорядоченная. Она часто используется вместе с распределять по, с распределять по спереди и сортировать по сзади.
кластеризовать по
Его можно заменить, если параметр «Распределить по сортировке» используется вместе и поля расположены в одном и том же порядке по возрастанию. Кластер по не может указать правило сортировки как ASC или DESC.
перегородка, ведро
ведро
Резервирование должно быть включено и настроено. Установите hive.enforce.bucketing=true;
Создать таблицу сегментов
Вставка данных в таблицу сегментов аналогична вставке данных в обычную таблицу.
Правила группирования
Поле сегмента определяет, в каком сегменте находятся данные, путем вычисления модуля хеш-модуля, деленного на количество сегментов.
Разница между группированием и секционированием
Секционирование предназначено для пути хранения данных, то есть группировка предназначена для файлов данных;
Выборочное обследование по сегментам
грамматика
ОБРАЗЕЦ ТАБЛИЦЫ(ВЕДРО x ИЗ y) .
Раздел
подтема
Преобразование между строками и столбцами
строка в столбец
CONCAT(строка A/столбец, строка B/столбец…)
CONCAT_WS(разделитель, строка1, строка2,...)
COLLECT_SET(столбец)
Описание функции
пример
SQL-реализация
Столбец для строки
Описание функции
пример
SQL-реализация
оконная функция
НАД()
текущая строка
текущая строка
п персинг
Идти вперед на n строк
n подписок
n строк назад
НЕОГРАНИЧЕННЫЙ
отправная точка
неограниченный персинг означает начало спереди
неограниченное следование означает до конечной точки позади
LAG(столбец,n,значение_по умолчанию)
Идти на эн-ную строку вперед
ведущий (столбец, n, default_val)
n-я строка с этого момента
НТИЛЬ(n)
Распределите строки в упорядоченном разделе по указанным группам данных. Каждая группа нумеруется, начиная с 1. Для каждой строки NTILE возвращает номер группы, к которой принадлежит строка. Примечание. n должен иметь тип int.
пример
данные
Требования и реализация
1. Опрос клиентов и общее количество клиентов, совершивших покупки в апреле 2017 года.
2. Проверьте детали покупки клиента и сумму ежемесячных покупок.
3. В приведенном выше сценарии затраты необходимо аккумулировать по дате.
4. Запросите время последней покупки каждого клиента.
5. Запросите информацию о заказе за предыдущие 20 % времени.
классифицировать
Если заказ тот же, он будет повторен, а общее количество останется неизменным.
плотный_ранг
Если порядок тот же, дублирования не будет, и общее количество уменьшится.
номер_строки
будет рассчитан по порядку
пример
функция
встроенные функции
Пользовательская функция
udf (пользовательская функция)
Особенности: Один вход, один выход.
Этапы программирования
1. Наследовать класс org.apache.hadoop.hive.ql.UDF.
2. Необходимо реализовать функцию оценки; функция оценки поддерживает перегрузку;
3. Создайте функцию в окне командной строки hive.
1. Загрузите банку
добавить jar linux_jar_path
2. Создать функцию
создать [временную] функцию [dbname.]имя_функции AS имя_класса;
4. Удалите функцию в окне командной строки hive.
Удалить [временную] функцию [если существует] [dbname.]function_name;
Примечание. UDF должен иметь тип возвращаемого значения и может возвращать значение NULL, но тип возвращаемого значения не может быть недействительным;
udaf (пользовательская функция агрегирования)
Больше входов и один выход
агрегатная функция
udtf (пользовательские функции создания таблиц)
Один вход, многие выходы
вид сбоку взорвать()
Сжатие и хранение
Hive обычно использует сжатие и хранение
Формат файла Parquet обычно используется в Hive, а для сжатия используется snappy.
сжатие
Таблица форматов сжатия
Сравнение производительности сжатия
Настройки параметров сжатия
хранилище
Распространенные форматы файлов в hive
текстовый файл, паркет, орк, файл последовательности
Классификация форматов файлов
Хранение строк
Функции
При запросе всей строки данных, соответствующей условиям, хранилище столбцов должно обращаться к каждому агрегированному полю, чтобы найти соответствующее значение каждого столбца. в соседних местах, поэтому запросы к хранилищу строк выполняются быстрее.
текстовый файл
В формате по умолчанию данные не сжимаются, что приводит к большим нагрузкам на диск и синтаксическому анализу данных.
файл последовательности
Хранение столбцов
Функции
Поскольку данные каждого поля агрегируются и сохраняются, когда для запроса требуется только несколько полей, объем считываемых данных может быть значительно уменьшен; тип данных каждого поля должен быть одинаковым, а столбчатое хранилище может быть лучше спроектировано специально. Разработан алгоритм сжатия.
паркет
орк
состав
Файлы Orc обычно состоят из одной или нескольких полос. Каждая полоса обычно имеет размер блока HDFS. Каждая полоса содержит несколько записей. Эти записи хранятся независимо по столбцам.
полоса
индексные данные
Подтема 1
Данные ряда
полосатый нижний колонтитул
Тюнинг
получить захват
Это означает, что в некоторых случаях запросу не требуется проходить задачу MR, например, select * from table. В этом случае hive может просто прочитать файл в каталоге таблицы и вывести его на консоль.
получить настройки включения захвата
Установите hive.fetch.task.conversion = more в файле hive-default.xml.template.
После включения глобальный поиск, ограниченный поиск и поиск по полю не будут использовать задачу mr.
локальный режим
Входные данные Hive невелики, и время, затрачиваемое на запуск задачи выполнения запроса, может значительно превышать фактическое время выполнения задания. В этом случае вы можете включить локальный режим для обработки всех задач на одном компьютере. Время выполнения задачи для небольших наборов данных будет значительно сокращено
настройки параметров
set hive.exec.mode.local.auto=true //Включить локальный г-н;
Оптимизация таблицы
Большой стол, объединение маленьких столов
Размещение маленьких таблиц спереди и больших таблиц сзади может эффективно снизить вероятность ошибок переполнения памяти. Теперь, когда это оптимизировано, размещение маленьких таблиц спереди, а больших таблиц сзади не имеет никакого эффекта.
объединение карты (присоединение маленькой таблицы к большой таблице)
настройки включения присоединения к карте
присоединение к карте включено по умолчанию
установите hive.auto.convert.join = true;
set hive.mapjoin.smalltable.filesize=25000000;//Размер маленькой таблицы по умолчанию составляет 25M
принцип объединения карт
присоединиться к большому столу
1. Фильтрация пустых ключей
Большое количество аномальных данных с пустыми ключами поступает в один и тот же редуктор и обрабатывается очень медленно. Иногда они даже переполняют память. Вы можете сначала отфильтровать пустые ключи.
2. Преобразование пустого ключа
Большое количество пустых ключей не являются аномальными данными и должны быть включены в результирующий набор. Затем вы можете присвоить значения клавишам и равномерно распределить их в редукторе.
группа по
Включить агрегацию на стороне карты
настройки параметров
1. Включите агрегацию на стороне карты.
установите hive.map.aggr = true
2. Агрегируйте количество объектов на стороне карты.
установите hive.groupby.mapaggr.checkinterval = 100000
3. Выполняйте балансировку нагрузки при неравномерности данных (по умолчанию false).
установите hive.groupby.skewindata = true
Принцип: будут запущены два задания. Сторона карты первого задания будет случайным образом распределять ключи по редукторам. Каждый редуктор будет выполнять внутреннюю операцию агрегации и выводить результаты. Второе задание получит результаты первого задания и поместит их. тот же Ключ отправляется в тот же редуктор для агрегации для завершения окончательной операции агрегации.
счет (различный)
Маленькие данные не имеют значения
Большой объем данных
В случае большого объема данных count(distinct) будет вводить только один редуктор, независимо от того, сколько их существует, что влияет на ход выполнения задания. Вы можете использовать группу для выполнения статистики дедупликации;
Декартово произведение
Старайтесь избегать декартова произведения, не добавляйте условия при объединении или не используйте недопустимые условия. Hive может использовать только один редуктор для обработки данных.
Фильтрация строк и столбцов
Обработка столбца
В select берите только необходимые столбцы и используйте select * как можно реже.
обработка строк
Если условия фильтрации вторичной таблицы написаны после того, где в ассоциации, то две таблицы сначала будут связаны со всей таблицей, а затем фильтровать данные. Рекомендуется сначала сделать подзапрос с условиями фильтрации для вторичной таблицы и затем выполнить фильтрацию. затем выполните ассоциацию.
динамическое секционирование
Включить настройки динамического раздела
1. Включить настройки функции динамического разделения (включено по умолчанию)
hive.exec.dynamic.partition=истина
2. Установите нестрогий режим (режим динамического секционирования, по умолчанию строгий, что означает, что хотя бы один раздел должен быть указан как Статическое секционирование, нестрогий режим означает, что всем полям секционирования разрешено использовать динамическое секционирование. )
hive.exec.dynamic.partition.mode=нестрогий
3. Максимальное количество динамических разделов, которые можно создать на всех узлах, выполняющих MR. По умолчанию 1000
hive.exec.max.dynamic.partitions=1000
4. Максимальное количество динамических разделов, которые можно создать на каждом узле, выполняющем MR. Этот параметр должен основываться на фактическом данные для установки. Например: исходные данные содержат данные за один год, то есть поле дня имеет 365 значений, тогда этот параметр Его значение должно быть больше 365. Если вы используете значение по умолчанию 100, будет сообщено об ошибке.
hive.exec.max.dynamic.partitions.pernode=100
5. Максимальное количество файлов HDFS, которое можно создать во всем задании MR. По умолчанию 100000
hive.exec.max.created.files=100000
6. Выдавать ли исключение при создании пустого раздела. Как правило, никаких настроек не требуется. По умолчанию ложь
hive.error.on.empty.partition=false
Раздел
ведро
Перекос данных
1. Установите разумное количество карт.
Параллельное выполнение
По умолчанию hive может выполнять только один этап за раз. Однако конкретное задание может содержать множество этапов, и эти этапы могут не полностью зависеть друг от друга. То есть некоторые этапы могут выполняться параллельно. задание можно завершить, выполняя его параллельно быстрее.
Включите настройку параметров
set hive.exec.parallel=true //Включаем параллельное выполнение задач set hive.exec.parallel.thread.number=16; //Максимальная степень параллелизма, разрешенная для одного и того же SQL, значение по умолчанию — 8.
строгий режим
повторное использование JVM
спекулятивное исполнение
сжатие
Теория числового склада
концепция
Это стратегическая коллекция, обеспечивающая все виды поддержки данных для процесса принятия решений на всех уровнях предприятия.
особенность
Хранилище данных — это интегрированный, энергонезависимый и изменяющийся во времени сбор данных, ориентированный на графы, для поддержки принятия решений.
Тематически ориентированный
Интеграция
Энергонезависимый (не может быть изменен)
изменяющийся во времени
этл
Извлечь лишнее, преобразовать, перенести, загрузить Загрузить
Стратификация хранилища данных
источник данных
В данных на этом уровне нет никаких изменений. Он напрямую использует структуру и данные периферийной системы и не является общедоступным. Это уровень временного хранения, который представляет собой область временного хранения данных интерфейса для подготовки к последующим. обработка данных.
база данных
Данные на уровне DW, также известные как уровень детализации, должны быть согласованными, точными и чистыми данными, которые были очищены (удалены от примесей) из данных исходной системы.
Приложение данных
Источники данных, непосредственно считываемые интерфейсными приложениями, данные рассчитываются и генерируются на основе требований к отчетам и тематическому анализу;
почему многослойность
пространство для времени
Большой объем предварительной обработки используется для улучшения пользовательского опыта (эффективности) прикладной системы, поэтому в хранилище данных будет большой объем избыточных данных без многоуровневой обработки, если бизнес-правила исходной бизнес-системы изменятся; повлияет на весь процесс очистки данных, а объем работы огромен.
Многослойность упрощает процесс очистки данных
Процесс очистки данных можно упростить за счет иерархического управления данными, поскольку разделение исходной одноэтапной работы на несколько этапов эквивалентно разбиению сложной работы на несколько простых задач и превращению большого черного ящика в белый ящик. логика обработки каждого слоя относительно проста и понятна. Это облегчает нам обеспечение правильности каждого шага. Когда в данных возникают ошибки, нам часто нужно лишь частично скорректировать определенный шаг.
витрина данных
Архитектура витрины данных
независимая витрина данных
Зависимая витрина данных
Стратификация хранилища данных
Принцип многоуровневого хранения данных
1. Чтобы облегчить анализ данных, необходимо защитить лежащий в основе сложный бизнес и предоставить данные для уровня анализа простым, полным и интегрированным образом.
2. Влияние основных бизнес-изменений и изменений спроса на модель сведено к минимуму. Влияние изменений бизнес-системы ослабляется на базовом уровне данных. В сочетании с методом построения сверху вниз влияние изменений спроса на модель. модель ослаблена.
3. Высокая связность и слабая связь, то есть высокая связность данных внутри темы или внутри каждой полной системы, а также слабая связанность данных между темами или между полными системами.
4. Создайте базовый уровень данных хранилища, чтобы изолировать базовую работу по интеграции бизнес-данных от работы по разработке приложений верхнего уровня, закладывая основу для крупномасштабного развития хранилища. Иерархия хранилища будет более понятной, а данные будут доступны извне. будет более единым.
Стратификация хранилища данных
ods (хранилище операционных данных)
Доступ к исходным данным без изменений
ХД (Хранилище данных)
Уровень детализации данных DWD (подробности хранилища данных)
Степень детализации соответствует уровню ods и обеспечивает определенные гарантии качества данных. Уровень dwd должен выполнять очистку, интеграцию и стандартизацию данных. Грязные данные, ненужные данные, данные с противоречивыми спецификациями, противоречивыми определениями статуса и противоречивыми спецификациями именования — все это будет обработано. В то же время, чтобы повысить удобство использования данных, будут использоваться некоторые методы деградации измерений для преобразования измерений в таблицы фактов и уменьшения связи между таблицами измерений и таблицами фактов. На этом уровне некоторые данные также будут агрегироваться для объединения данных из одной предметной области в одну таблицу для повышения удобства использования данных.
Средний уровень данных DWM (Data WareHouse Middle)
На основе слоя DWD выполняется операция агрегирования показателей по общим основным измерениям для расчета соответствующих статистических показателей. В реальных расчетах, если показатели расчета широкой таблицы рассчитываются непосредственно на уровне DWD или ODS, возникнут такие проблемы, как слишком много вычислений и слишком мало измерений. Поэтому общий подход заключается в том, чтобы сначала рассчитать несколько небольших промежуточных таблиц. слой dwm, а затем объединил их в одну широкую таблицу. Поскольку ширину и границы ширины определить сложно, вы также можете удалить слой dwm и оставить только слой dws.
Уровень службы данных DWS (Data WareHouse Service)
Детализация более грубая, чем у подробного слоя. Данные на основе слоя dwd интегрируются и суммируются в служебные данные для анализа определенной предметной области, которые обычно представляют собой широкую таблицу. Слой dws должен покрывать 80% сцены с питательными веществами. Также известный как витрина данных или широкая таблица, он используется для последующих бизнес-запросов, анализа ошибок, распределения данных и т. д.
Прикладной уровень данных приложения
Данные в основном предоставляются для продуктов данных и анализа данных. Обычно они хранятся в ES, PostgreSql, Redis и других системах для использования онлайн-системами. Они также могут храниться в Hive или Druid для анализа данных и интеллектуального анализа данных. Например, сюда обычно помещаются данные отчета, о которых мы часто говорим.
поверхностный слой тусклого измерения
Если у вас есть таблицы измерений, вы можете спроектировать этот слой отдельно.
Данные с высокой мощностью
Как правило, это похоже на таблицу пользовательских данных и таблицу данных таблицы продуктов. Объем данных может составлять десятки миллионов или сотни миллионов.
Данные о низком базовом обхвате
Обычно это таблица конфигурации, например, китайское значение, соответствующее значению перечисления, или таблица измерений даты. Объем данных может быть однозначным, сотнями, тысячами или десятками тысяч.
Метод моделирования хранилища данных
пространственное моделирование
значение
Создайте модель, основанную на потребностях анализируемых решений, и построенная модель данных удовлетворяет потребности анализа, фокусируясь на решении проблемы быстрого завершения анализа пользователями, а также имеет хорошую производительность ответа на крупномасштабные сложные запросы.
таблица фактов
таблица фактов периодических снимков
таблица фактов транзакций
Таблица фактов совокупного снимка
таблица фактов без фактов
сводная таблица фактов
Объединение таблиц фактов
таблица размеров
звездная схема
Все таблицы измерений подключены к таблице фактов, а таблицы измерений не связаны с другими таблицами измерений.
модель созвездия
Несколько таблиц фактов, расширенные из звездообразной схемы, совместно используют информацию об измерениях.
модель снежинки
Таблица фактов связана с таблицей измерений. Таблица измерений может иметь другие таблицы измерений. Существует множество ассоциаций и низкая производительность.
Процесс размерного моделирования
Выберите бизнес-процесс
Детализация декларации
Одна и та же таблица фактов должна иметь одинаковую степень детализации. Не смешивайте несколько разных уровней детализации в одной таблице фактов. Для данных с разной степенью детализации создаются разные таблицы фактов. Для данных, требования к которым неясны, мы устанавливаем атомарную степень детализации.
Подтвердите размеры
Подтвердите факты
парадигмальное моделирование
6 парадигм базы данных
Первая нормальная форма (1НФ)
Подчеркивается атомарность столбца, то есть столбец нельзя разделить на другие столбцы.
Вторая нормальная форма (2НФ)
Чтобы удовлетворить первую нормальную форму, должны быть выполнены два условия: во-первых, таблица должна иметь первичный ключ; во-вторых, столбцы, не включенные в первичный ключ, должны полностью зависеть от первичного ключа и не могут зависеть только от части первичного ключа; ключ.
Третья нормальная форма (3NF)
Чтобы соответствовать требованиям 2nf, столбцы, не являющиеся первичными ключами, должны напрямую зависеть от первичного ключа, и не может быть транзитивных зависимостей. То есть он не может существовать: столбец непервичного ключа A зависит от столбца непервичного ключа B, а столбец непервичного ключа B
Нормальная форма Бойса-Кодда (BCNF)
Четвертая нормальная форма (4NF)
Пятая нормальная форма (5NF)
Этапы моделирования
1. Концептуальная модель
2. Логическая модель
3. Физическая модель
Основные идеи построения хранилища данных
На уровне проектирования, разработки, развертывания и применения мы избегаем повторного построения и построения избыточных индексов, тем самым обеспечивая стандартизацию и унификацию калибра данных и, в конечном итоге, реализуя полносвязную ассоциацию активов данных, обеспечивая стандартный вывод данных и унифицированные данные. общедоступный уровень
Процесс строительства дата-центра
импала
тип данных
команда оболочки
Архитектура
модуль
импалад
Получите запрос клиента, выполните запрос и вернитесь в центральный пункт координации.
Процесс-демон на дочернем узле отвечает за поддержание связи с хранилищем состояний и отчетность о работе.
государственный магазин
Отвечает за сбор информации о ресурсах, распределенных в каждом процессе impalad, состоянии работоспособности каждого узла и синхронизации информации об узлах.
Отвечает за координацию и планирование запросов.
каталог
Распределить информацию метаданных таблицы по каждому импаладу.
Получать все запросы из хранилища состояний
улейMetastore
hdfs
ДДЛ
Impala не поддерживает команду С DBPROPERTIES (например: добавление в библиотеку информации об авторе и даты создания).
Удалить базу данных
удалить базу данных
Импала не поддерживает изменение базы данных
дмл
Импорт данных (в основном такой же, как и улей), Impala не поддерживает локальный входящий путь загрузки данных...
Экспорт данных (impala не поддерживает синтаксис вставки перезаписи... для экспорта данных, вместо этого вы можете использовать impala -o)
Команды экспорта и импорта не поддерживаются.
Запросить
Основной синтаксис примерно такой же, как и у оператора запроса hive.
Импала не поддерживает группировку
Impala не поддерживает кластеризацию, сортировку, распределение
Impala не поддерживает функции COLLECT_SET(col) и взрыв(col).
Impala поддерживает оконные функции
пользовательская функция Импалы
udf
Хранение и сжатие
оптимизация
1. Постарайтесь максимально развернуть stateStore и каталог на одном сервере, чтобы обеспечить их связь.
2. Повышение эффективности работы за счет ограничения памяти Impala dameon (по умолчанию 256) и количества потоков хранилища состояний.
3. Оптимизация SQL: вызовите план выполнения перед выполнением SQL.
4. Выберите подходящий формат файла для хранения, чтобы повысить эффективность запросов.
5. Избегайте создания большого количества маленьких файлов (если есть небольшие файлы, созданные другими программами, вы можете использовать промежуточную таблицу для хранения данных небольшого файла в промежуточной таблице. Затем вставьте данные из промежуточной таблицы в конечную таблицу с помощью вставки. ..выбирать...)
6. Используйте соответствующую технологию разделения и рассчитывайте в соответствии с степенью детализации разделения.
7. Используйте статистику вычислений для сбора информации о таблице. Если таблица содержимого или раздел существенно изменяются, пересчитайте таблицу или раздел статистических данных. Поскольку различия в количестве строк и различных значениях могут привести к тому, что Impala выберет другой порядок соединения при использовании запроса к таблице.
8. Оптимизация сетевого ввода-вывода
–a Избегайте отправки всех данных клиенту.
–b Максимально используйте условную фильтрацию.
–c. Используйте ограничение.
–d При выводе файлов избегайте использования улучшенного вывода.
–e Попробуйте использовать менее полное обновление метаданных.
9. Используйте профиль для вывода основного информационного плана и соответствующей оптимизации среды.
Теория озера данных
искра
Встроенный модуль
искровое ядро
Реализованы основные функции Spark, включая такие модули, как планирование задач, управление памятью, восстановление ошибок и взаимодействие с системами хранения. Spark Core также включает определения API для отказоустойчивого распределенного набора данных (RDD).
Искра SQL
Spark — это пакет для управления структурированными данными, поддерживающий HQL.
Искра потоковая
Компонент потоковых вычислений, API очень соответствует искровому ядру.
искра mlib
Предоставляет общие библиотеки машинного обучения.
Искра Грахкс
расчет графика
рабочий режим
локальный режим
автономный режим
режим пряжи
пряжи-клиент
Функции:
Драйвер запускается на клиенте и подходит для взаимодействия и отладки.
кластер пряжи
Функции
Драйвер запускает applicationMaster, запущенный с помощью ResourceManager, и подходит для производственных сред.
искровое ядро
сдд
вычислить
перегородки
разделитель
зависимости
оператор
оператор преобразования
тип значения
карта (функция)
MapPartitions (функция)
Тип функции func должен быть Iterator[T] => Iterator[U]
MapPartitionsWithIndex (функция)
Тип функции func должен быть (Int, Interator[T]) => Iterator[U]
плоская карта (функция)
глом()
Сформируйте каждый раздел в массив и сформируйте новый тип RDD RDD[Array[T]]
группа по()
Подтема 1
Группировка по возвращаемому значению переданной функции. Поместите в итератор значения, соответствующие одному и тому же ключу.
фильтр
образец(с заменой, дробью, семенем)
Произвести выборку части данных с указанным случайным начальным числом. withReplacement указывает, заменяются ли извлеченные данные. true означает выборку с заменой, false означает, что выборка без замены используется для указания начального числа генератора случайных чисел.
различные([numTasks]))
Возвращает новый RDD после дедупликации исходного RDD. По умолчанию работают только 8 параллельных задач, но это можно изменить, передав необязательный параметр numTasks.
объединиться (numPartitions)
Уменьшите количество секций, чтобы повысить эффективность выполнения небольших наборов данных после фильтрации больших наборов данных.
перераспределение (numPartitions)
Все данные снова случайным образом перемещаются по сети в зависимости от количества разделов.
Разница между объединением и перераспределением
1. объединить перераспределения, вы можете выбрать, выполнять ли процесс перемешивания. По перетасовке параметров: Boolean = false/true Решать.
2. Перераспределение фактически вызывает объединение для выполнения перемешивания.
sortBy(func,[по возрастанию], [numTasks])
Используйте func для первой обработки данных и сортировки в соответствии с результатами сравнения обработанных данных. По умолчанию используется положительный порядок.
труба (команда, [envVars])
Конвейер для каждого раздела выполняет сценарий оболочки и возвращает RDD вывода.
Тип двойного значения
союз
вычесть (другой набор данных)
Функция, вычисляющая разницу, удаляя в двух СДР одни и те же элементы, а разные СДР останутся
пересечение (другойнабор данных)
Возвращает новый СДР после пересечения исходного СДР и параметра СДР.
декартово (другойнабор данных)
Декартово произведение
zip (другой набор данных)
Объедините два RDD в один RDD в форме «ключ/значение». По умолчанию количество разделов и элементов двух RDD одинаковое, в противном случае будет выдано исключение.
тип ключа/значения
разделBy (разделитель)
Выполните операцию разделения на паруRDD. Если исходный partionRDD соответствует существующему partionRDD, разделение не будет выполнено. В противном случае будет создано ShuffleRDD, что приведет к перетасовке.
уменьшитьByKey(функция, [numTasks])
Вызывается на (K, V) RDD, возвращает (K, V) RDD, используя указанную функцию сокращения для агрегирования значений одного и того же ключа. Количество задач сокращения может быть передано через второй необязательный параметр. параметры для установки.
группапо ключу()
groupByKey также работает с каждым ключом, но генерирует только одну последовательность.
Разница между сокращениемByKey и groupByKey
1. уменьшитьByKey: агрегация на основе ключа, перед перемешиванием выполняется операция объединения (предварительная агрегация), а возвращаемый результат — RDD[k,v]. 2. groupByKey: группировка по ключу и непосредственное перемешивание. 3. Рекомендации по разработке: вместо groupByKey рекомендуется использовать команду уменьшитьByKey. Но нужно обратить внимание на то, повлияет ли это на бизнес-логику.
агрегат по ключу
Параметры: (zeroValue:U,[разделитель: Разделитель]) (seqOp: (U, V) => U,combOp: (U, U) => U)
В RDD пар kv значения группируются и объединяются по ключу. При слиянии каждое значение и начальное значение используются в качестве параметров функции seq для расчета, а возвращаемый результат используется как новая пара kv. а затем результат вычисляется в соответствии с Ключ объединяется, и, наконец, значение каждой группы передается в функцию объединения для расчета (первые два значения вычисляются первыми, а возвращаемый результат и следующее значение передаются в функция объединения и т. д.), а ключ и результат расчета такие: Выводится новая пара кв.
FoldByKey
Параметры: (zeroValue: V)(func: (V, V) => V): RDD[(K, V)]
Упрощенная работа сагрегатаByKey, seqop иcombop аналогичны
объединитьByKey[C]
Параметры: (createCombiner: V => C, mergeValue: (C, V) => C, mergeCombiners: (C, C) => C)
Функция: объединить V в набор для одного и того же K.
Подтема 3
sortByKey([по возрастанию], [numTasks])
При вызове RDD (K, V) K должен реализовать интерфейс Ordered и возвращать RDD (K, V), отсортированный по ключу.
картаЗначения
Для типов формы (K, V) работать только с V
присоединиться (другой набор данных, [numTasks])
Вызванный для СДР типа (K, V) и (K, W), он возвращает СДР типа (K, (V, W)), в котором все элементы, соответствующие одному и тому же ключу, объединены в пары.
Когруппа (otherDataset, [numTasks])
Вызывается для RDD типа (K,V) и (K,W), возвращает RDD типа (K,(Iterable<V>,Iterable<W>))
действие
уменьшить (функция)
Объедините все элементы в RDD с помощью функции func, сначала агрегируйте данные внутри раздела, а затем агрегируйте данные между разделами.
собирать()
В драйвере верните все элементы набора данных в виде массива.
считать()
Возвращает количество элементов в RDD
первый()
Возвращает первый элемент в RDD
взятый)
Возвращает массив, состоящий из первых n элементов RDD.
takeOrdered(n)
Возвращает массив, состоящий из первых n элементов, отсортированных по этому RDD.
совокупность
Параметры: (zeroValue: U)(seqOp: (U, T) ⇒ U, combOp: (U, U) ⇒ U)
Агрегатная функция объединяет элементы в каждом разделе с помощью seqOp и начального значения, а затем использует функцию объединения для объединения результата каждого раздела с начальным значением (zeroValue). Окончательный тип, возвращаемый этой функцией, не обязательно должен соответствовать типу элемента в RDD.
сгиб(число)(функция)
Операции складывания, упрощенные операции агрегата, секоп и комбинирования одинаковы.
Подтема 9
искровое ядро
компоненты искрового сердечника
Водитель
душеприказчик
общий запущенный процесс искры
1) После отправки задачи в первую очередь будет запущена программа Драйвер; 2) Затем драйвер регистрирует приложение в диспетчере кластера; 3) Затем менеджер кластера выделяет и запускает Исполнитель в соответствии с файлом конфигурации этой задачи; 4) Драйвер начинает выполнять основную функцию, а Spark-запрос выполняется лениво. При выполнении оператора Action начинается обратный расчет, и этапы делятся по широким зависимостям. Затем каждый этап соответствует TaskSet, и так далее. несколько задач в наборе задач. Поиск доступных ресурсов. Исполнитель для планирования. 5) По принципу локализации Задание будет передано для выполнения назначенному Исполнителю. В процессе выполнения задания Исполнитель будет продолжать общаться с Водителем и сообщать о статусе выполнения задания.
Режим развертывания
автономный
пряжа Hadoop
пряжи-клиент
кластер пряжи
мезос
к8с
количество слов
sc.textFile("xx").flatMap(_.split(" ")).map((_,1)).reduceByKey(_ _).saveAsTextFile("xx")
оптимизация
Перекос данных
модель памяти
Общие алгоритмы
Кафка
Hbase
определение
Hbase — это система noSql с высокой надежностью, высокой производительностью, столбцовым, масштабируемым распределенным хранилищем и хранилищем реального времени.
Функции
1. Накопитель большой емкости
Hbase подходит для хранения данных уровня PB, а данные уровня ПК могут быть возвращены в течение десятков и сотен миллисекунд.
2. Хранение столбцов
В хранилище HBase имеется только хранилище семейств столбцов, содержащее множество столбцов.
3. Чрезвычайно легко расширить
Масштабируемость Hbase в основном отражается в двух аспектах: один — это расширение на основе возможностей обработки верхнего уровня (RegionServer), а другой — расширение на основе хранилища (HDFS). Путем горизонтального добавления компьютеров RegionSever выполняется горизонтальное расширение, чтобы улучшить возможности обработки верхнего уровня Hbase и улучшить способность Hbsae обслуживать больше регионов.
4. Высокая степень параллелизма
Поскольку в большинстве современных архитектур, использующих Hbase, используются дешевые ПК, задержка одного ввода-вывода на самом деле немалая, обычно от десятков до сотен мс. Упомянутый здесь высокий уровень параллелизма в основном означает, что в случае параллелизма задержка одиночного ввода-вывода Hbase не сильно снижается. Возможность получения услуг с высоким уровнем параллелизма и низкой задержкой.
5. Редкий
Разреженность предназначена главным образом для гибкости столбцов Hbase. В семействе столбцов вы можете указать столько столбцов, сколько захотите. Когда данные столбца пусты, они не будут занимать место для хранения.
Базовая архитектура
Схема архитектуры
клиент
Содержит интерфейс для доступа к HBase, а также включает кеш для ускорения доступа к HBase. Например, кеш содержит информацию .META.
работник зоопарка
В основном отвечает за высокую доступность главного сервера, мониторинг сервера регистрации, ввод метаданных и поддержание конфигурации кластера.
ZK используется для обеспечения того, чтобы в кластере работал только один мастер. При сбое мастера создается новый мастер с помощью механизма конкуренции.
Контролируйте состояние региона-сервера через zk. Когда регион-сервер работает ненормально, уведомляйте Мастера об онлайн- и офлайн-информации региона-сервера в виде обратных вызовов.
Единая запись информации для хранения метаданных через zk
hdfs
Предоставление базовых услуг хранения данных для HBase.
Предоставляет базовые службы распределенного хранения метаданных и табличных данных.
Множественные копии данных обеспечивают высокую надежность и доступность.
ХМастер
Назначить регион RegionServer
Поддерживать балансировку нагрузки в кластере
Поддерживать информацию о метаданных кластера
Обнаружьте неисправный регион и назначьте неисправный регион обычному серверу региона.
В случае сбоя RegionSever скоординируйте разделение соответствующего Hlog.
ХРегинСервер
В основном обрабатывает запросы пользователей на чтение и запись.
Управление регионом, выделенным мастером
Обработка запросов на чтение и запись от клиентов
Отвечает за взаимодействие с базовой HDFS и хранение данных в HDFS.
Ответственный за разделение региона после того, как он станет больше.
Отвечает за объединение файлов магазина.
Роль
ХМастер
1. Мониторинг РегионСервера
2. Обработка отказа RegionServer
3. Обрабатывать изменения метаданных
4. Обработка выделения или переноса региона
5. Данные балансировки нагрузки во время простоя
6. Публикуйте свое местоположение клиентам через Zookeeper
РегионСервер
1. Отвечает за хранение фактических данных HBase.
2. Обработать назначенный ему регион
3. Сбросить кеш в HDFS
4. Ведение журнала
5. Выполнить сжатие
6. Отвечает за обработку фрагментации региона
Другие компоненты
Журналы упреждающей записи (wal)
Запись модификации HBase, при чтении и записи данных в HBase данные не записываются непосредственно на диск, они сохраняются в памяти в течение определенного периода времени (можно установить пороги времени и объема данных). Однако сохранение данных в памяти может привести к потере данных с большей вероятностью. Чтобы решить эту проблему, данные сначала будут записаны в файл с именем «файл журнала упреждающей записи», а затем записаны в память. Поэтому в случае сбоя системы данные можно восстановить с помощью этого файла журнала.
область
Для сегментирования таблицы HBase таблица HBase будет разделена на разные регионы на основе значения RowKey и сохранена в RegionServer. В RegionServer может быть несколько разных регионов.
магазин
HFile хранится в Store, а одно Store соответствует семейству столбцов в таблице HBase.
MemStore
Как следует из названия, это хранилище памяти, которое находится в оперативной памяти и используется для сохранения текущих операций с данными. Поэтому после сохранения данных в WAL RegionServer сохранит пары ключ-значение в памяти.
HFile
Это реальный физический файл, в котором хранятся исходные данные на диске, фактический файл хранилища. StoreFile хранится в HDFS в форме Hfile.
HBase-операции
Структура данных HBase
РоуКей
Как и база данных nosql, rowkey является первичным ключом для доступа к данным. Существует три способа доступа к строкам HBase.
1.Доступ через одну клавишу строки
2. Передайте диапазон клавиш строки (обычный)
3. Полное сканирование таблицы
Ключ строки RowKey (RowKey) может представлять собой любую строку (максимальная длина — 64 КБ, а в реальных приложениях длина обычно составляет 10–100 байт). Внутри HBASE RowKey сохраняется как массив байтов. При хранении данные сохраняются в лексикографическом порядке (порядке байтов) RowKey. При разработке RowKey необходимо полностью отсортировать свойства хранилища и хранить строки, которые часто читаются вместе. (зависимость от местоположения)
семейство столбцов
Семейство столбцов. Каждый столбец в таблице HBASE принадлежит определенному семейству столбцов. Семейства столбцов являются частью схемы таблицы (столбцы — нет) и должны быть определены перед использованием таблицы. Имена столбцов начинаются с префикса семейства столбцов. Например, курсы:история и курсы:математика принадлежат к семейству столбцов курсы.
клетка
Единица, однозначно идентифицируемая {rowkey, columns Family:columu, version}. Данные в ячейке не имеют типа и хранятся в форме байт-кода.
отметка времени
В HBase единица хранения, определяемая ключом строки и столбцом, называется ячейкой. В каждой ячейке хранится несколько версий одних и тех же данных. Версии индексируются по временной метке. Тип метки времени — 64-битное целое число. Временная метка может быть назначена HBASE (автоматически при записи данных), и в этом случае временная метка представляет собой текущее системное время с точностью до миллисекунд. Временная метка также может быть назначена клиентом явно. Если приложение хочет избежать конфликтов версий данных, оно должно генерировать свои собственные уникальные временные метки. В каждой ячейке разные версии данных сортируются в обратном хронологическом порядке, то есть первыми перечисляются самые последние данные. Чтобы избежать бремени управления (включая хранение и индексирование), вызванного слишком большим количеством версий данных, HBASE предоставляет два метода повторного использования версий данных. Один из них — сохранить последние n версий данных, а другой — сохранить версии за самый последний период времени (например, за последние семь дней). Пользователи могут установить это для каждого семейства столбцов.
Пространства имен
структура пространства имен
Стол
Table, все таблицы являются членами пространства имен, то есть таблица должна принадлежать определенному пространству имен. Если не указано, она будет находиться в пространстве имен по умолчанию.
Группа РегионСервер
Пространство имен содержит группу RegionServer по умолчанию.
Разрешение
Разрешения и пространства имен позволяют нам определять списки управления доступом (ACL).
Квота
Квоты могут определять количество регионов, которые может содержать пространство имен.
Принципы данных HBase
Принцип чтения HBase
1) Клиент сначала обращается к Zookeeper, считывает местоположение региона из метатаблицы, а затем считывает данные в метатаблице. Мета также хранит информацию о регионе пользовательской таблицы;
2) Найдите соответствующую информацию о регионе в метатаблице на основе пространства имен, имени таблицы и ключа строки;
3) Найдите регион-сервер, соответствующий этому региону;
4) Найдите соответствующий регион;
5) Сначала находим данные из MemStore, если нет, то читаем их из BlockCache;
6) Если BlockCache пока недоступен, то читаем его из StoreFile (ради эффективности чтения);
7) Если данные читаются из StoreFile, они не возвращаются напрямую клиенту, а сначала записываются в BlockCache, а затем возвращаются клиенту.
Процесс написания HBase
1) Клиент отправляет запрос на запись в HregionServer;
2) HregionServer записывает данные в HLog (журнал опережающей записи). Для сохранения и восстановления данных;
3) HregionServer записывает данные в память (MemStore);
4) Отзыв о том, что Клиенту написан успешно.
Процесс очистки данных
1) Когда данные MemStore достигают порогового значения (по умолчанию — 128 МБ, старая версия — 64 МБ), данные сбрасываются на жесткий диск, данные в памяти удаляются, а исторические данные в HLog удаляются;
2) И хранить данные в HDFS;
3) Сделать отметки в HLog.
процесс объединения данных
1) Когда количество блоков данных достигает 4, Hmaster запускает операцию слияния, а Region загружает блоки данных локально для слияния;
2) Если объем объединенных данных превышает 256 МБ, разделите их и назначьте разделенные регионы различным управлениям HregionServer;
3) Когда HregionServer выйдет из строя, разделите журнал на HregionServer, затем назначьте его другому HregionServer для загрузки и измените .META.;
4) Примечание. HLog будет синхронизирован с HDFS.
Интегрированное использование hive и HBase
Интегрировано через hive-hbase-handler-1.2.2.jar
Создайте таблицу Hive, свяжите ее с таблицей HBase и вставьте данные в таблицу Hive, влияя при этом на таблицу HBase.
Таблица hbase_emp_table сохранена в HBase, а затем в Hive создается внешняя таблица, чтобы связать таблицу hbase_emp_table в HBase, чтобы она могла использовать Hive для анализа данных в таблице HBase.
Оптимизация HBase
Высокая доступность (несколько Hmasters)
В HBase Hmaster отвечает за мониторинг жизненного цикла RegionServer и балансировку нагрузки RegionServer, например Если Hmaster зависнет, весь кластер HBase перейдет в неработоспособное состояние, и рабочий статус в это время не будет прежним. Продлится слишком долго. Таким образом, HBase поддерживает конфигурацию Hmaster с высокой доступностью.
предварительно разделенный
Предварительное разделение вручную
создать 'staff1','info','partition1',SPLITS => ['1000','2000','3000','4000']
Представляет пять разделов [мин,1000),[1000,2000),[2000,3000),[3000,4000),[4000,макс]
Создать предварительное разделение шестнадцатеричной последовательности
создать 'staff2','info','partition2',{NUMREGIONS => 15, SPLITALGO => 'HexStringSplit'}
Указывает, что шестнадцатеричный формат разделен на 15 разделов.
Предварительный раздел по правилам, заданным в файле
создать 'staff3','partition3',SPLITS_FILE => 'splits.txt'
Содержимое файла Splits.txt следующее:
аааа бббб cccc дддд
JavaAPI создает раздел
//Настраиваем алгоритм для генерации серии хэш-значений и сохранения их в двумерном массиве byte[][] SplitKeys = функция хэш-значения //Создаем экземпляр HBaseAdmin HBaseAdmin hAdmin = новый HBaseAdmin(HBaseConfiguration.create()); //Создаем экземпляр HTableDescriptor HTableDescriptor tableDesc = новый HTableDescriptor(tableName); //Создаем таблицу HBase с предварительным секционированием с помощью экземпляра HTableDescriptor и двумерного массива хэш-значений hAdmin.createTable(tableDesc, SplitKeys);
СтрокаКлючДизайн
Ключ строки — это уникальный идентификатор фрагмента данных. Необходимо правильно спроектировать ключ строки, чтобы он был равномерно распределен в регионе, чтобы предотвратить неравномерность данных.
1. Генерация случайных чисел, хешей и хеш-значений.
например: исходный rowKey равен 1001, а после SHA1 он становится: dd01903921ea24941c26a48f2cec24e0bb0e8cc7 Исходный rowKey был 3001, а после SHA1 он стал: 49042c54de64a1e9bf0b33e00245660ef92dc7bd. Исходный rowKey был 5001, а после SHA1 он стал: 7b61dec07e02c188790670af43e717f0f46e8913. Прежде чем сделать это, мы обычно извлекаем образцы из набора данных, чтобы определить, какой тип rowKey хешировать в качестве критического значения каждого раздела.
2. Перестановка строк
например: 20170524000001 преобразуется в 10000042507102
3. Конкатенация строк
20170524000001_a12e 20170524000001_93i7
Оптимизация памяти
HBase требует больших затрат памяти во время работы. В конце концов, таблица может быть кэширована в памяти. Обычно 70% всей доступной памяти выделяется под кучу Java HBase. Однако не рекомендуется выделять очень большую память в куче, поскольку если процесс GC будет продолжаться слишком долго, то RegionServer будет находиться в долговременном недоступном состоянии. Обычно памяти 16–48 ГБ будет достаточно. Если объем памяти, занимаемой платформой, слишком велик, что приводит к нехватке системной памяти, платформа также будет уничтожена системными службами.
Базовая оптимизация
1. Разрешить добавление контента в файлы HDFS.
hdfs-site.xml, hbase-site.xml Свойство: dfs.support.append Объяснение: включение синхронизации добавления HDFS может прекрасно сочетаться с синхронизацией и сохранением данных HBase. Значение по умолчанию верно.
2. Оптимизируйте максимальное количество открытых файлов, разрешенное DataNode.
hdfs-site.xml Свойство: dfs.datanode.max.transfer.threads Объяснение: HBase обычно обрабатывает большое количество файлов одновременно. В зависимости от количества и масштаба кластера и действий с данными. Установите значение 4096 или выше. Значение по умолчанию: 4096.
3. Оптимизируйте время ожидания операций с данными с высокой задержкой.
hdfs-site.xml Свойство: dfs.image.transfer.timeout Объяснение: Если задержка для определенной операции с данными очень велика и сокету приходится ждать дольше, рекомендуется Для этого значения установлено большее значение (по умолчанию 60 000 миллисекунд), чтобы гарантировать, что сокет не истекает по тайм-ауту.
4. Оптимизация эффективности записи данных
сопоставленный-site.xml Атрибуты: mapreduce.map.output.compress mapreduce.map.output.compress.codec Объяснение: Включение этих двух данных может значительно повысить эффективность записи файлов и сократить время записи. Измените значение первого атрибута на true и измените значение второго атрибута на: org.apache.hadoop.io.compress.GzipCodec или другие методы сжатия.
5. Установите количество прослушивателей RPC.
hbase-site.xml Свойство: hbase.regionserver.handler.count Объяснение: Значение по умолчанию — 30, которое используется для указания количества прослушивателей RPC. Его можно настроить в соответствии с количеством запросов клиентов. При наличии большого количества запросов на чтение и запись увеличьте это значение.
6. Оптимизируйте размер файла HStore.
hbase-site.xml Свойство: hbase.hregion.max.filesize Объяснение: Значение по умолчанию — 10737418240 (10 ГБ). Если вам нужно запускать задачи HBase MR, вы можете уменьшить это значение, поскольку один регион соответствует задаче карты. Если один регион слишком велик, время выполнения задачи карты будет слишком большим. длинный. Смысл этого значения в том, что если размер HFile достигнет этого значения, регион будет разделен на два Hfile.
7. Оптимизация кэша клиента hbase
hbase-site.xml Свойство: hbase.client.write.buffer Объяснение: Используется для указания кэша клиента HBase. Увеличение этого значения может уменьшить количество вызовов RPC, но потребует больше памяти, и наоборот. Обычно нам нужно установить определенный размер кэша, чтобы уменьшить количество RPC.
8. Укажите scan.next для сканирования количества строк, полученных HBase.
hbase-site.xml Свойство: hbase.client.scanner.caching Объяснение: Используется для указания количества строк по умолчанию, полученных методом scan.next. Чем больше значение, тем больше потребление памяти.
9.смывной, компактный, раздельный механизм
Когда MemStore достигает порога, данные из Memstore сбрасываются в Storefile, компактный механизм объединяет очищенные небольшие файлы в большой Storefile; разделение означает, что когда регион достигнет порога, слишком большой регион будет разделен на два.
Задействованные атрибуты: То есть: 128M — это порог Memstore по умолчанию. hbase.hregion.memstore.flush.size: 134217728 То есть: функция этого параметра заключается в очистке всех мемсторов HRegion, когда сумма размеров всех Memstores в одном HRegion превышает указанное значение. Сброс RegionServer обрабатывается асинхронно путем добавления запроса в очередь для имитации модели производства и потребления. Тогда здесь есть проблема. Когда очередь не успевает потреблять и генерирует большой объем невыполненных запросов, это может вызвать внезапное увеличение памяти и, в худшем случае, вызвать OOM. hbase.regionserver.global.memstore.upperLimit: 0,4 hbase.regionserver.global.memstore.lowerLimit: 0,38 То есть: когда общий объем памяти, используемый MemStore, достигает значения, указанного в hbase.regionserver.global.memstore.upperLimit, несколько MemStore будут сброшены в файл. Порядок очистки MemStore выполняется в порядке убывания размера до тех пор, пока не будет использована память. по MemStore сбрасывается меньше нижнего лимита.
фильтр Блума
мигать
Данныеx1
престо
Узи
активы данных
пружинный сапог
Вопросы для интервью с креветками и свиным сердцем
Линукс
Самопрезентация
1 минута, чтобы представиться: В моей предыдущей компании я в основном создавал платформу данных China Continent Insurance, которая в основном имела доступ к страховым данным Xiaomi, JD.com, Che300, внутренним страховым компаниям Continent Insurance и банковским данным. Хранилище данных было разделено на множество тем, включая темы заказов; , темы клиентов, темы претензий, темы просрочек, темы одобрения и темы жалоб; бизнес, который я развиваю, включает темы заказов, темы пользователей и темы просрочек. То, что я делаю на работе, связано с моделированием хранилища данных, обработкой данных, мониторингом качества данных. и расчеты тематических индикаторов. ;Основные применяемые технологии включают hive, Spark, Hue, Impala, Hadoop, Infomatical и т. д. Платформа добавляет около 1 ТБ данных каждый день.
Введение в бизнес