Привет, Хабр!
Представим некое перепутье, где с одной стороны — мощные возможности PostgreSQL, а с другой — необъятные просторы Hadoop. Выбор кажется сложным, но зачем выбирать одно, если можно соединить их и получить лучшее из обоих?
Объединяя их можно создать мощную систему, способную обрабатывать и анализировать огромные объемы данных.
Установим Hadoop и его компоненты HDFS и Hive
Для работы Hadoop необходимо установить Java. Нужно юзать JDK версии 8 или выше, установим 21 версию:
sudo apt-get update sudo apt-get install openjdk-21-jdk
Hadoop требует SSH для управления удаленными sudo apt-get install ssh
Скачиваем последнюю версию Hadoop с официального сайта Apache и распаковываем ее: Добавляем следующие строки в файл Загружаем изменения: Редактируем конфигурационные файлы в директории Делаем форматирование HDFS и запускаем Hadoop: Проверяем работу Hadoop, открыв веб-интерфейс NameNode по адресу Далее установим Hive Скачиваем и распаковываем Hive: Добавляем следующие строки в файл Загружаем изменения: Создаем директории для Hive в HDFS: Редактируем файл Устанавливаем FDW для Hadoop в PostgreSQL Установим PostgreSQL и необходимые инструменты: Скачивакем и устанавливаем HDFS FDW: Добавляем расширение в PostgreSQL: Теперь система готова к использованию Hadoop и Hive с PostgreSQL через FDW. Создаем серверный объект в PostgreSQL для подключения к Hadoop с помощью команды После создания сервера необходимо создать маппинг пользователя, который указывает учетные данные для подключения к внешнему серверу: Внешние таблицы создаются с помощью команды После настройки сервера, маппинга пользователя и создания внешних таблиц, можно выполнять запросы к внешним данным, как если бы они были локальными таблицами: Этот запрос извлекает данные из таблицы Push-down — это метод оптимизации запросов, при котором часть выполнения запроса передается на удаленный сервер, чтобы сократить объем передаваемых данных и повысить производительность. В Hadoop push-down тоже можно реализовать через FDW. Для включения push-down в PostgreSQL необходимо установить соответствующие параметры в конфигурации FDW. Например, для включения push-down агрегатов: После этого push-down будет работать на все запросы. MapReduce — это модель программирования для обработки и генерации больших наборов данных с параллельным распределением задач. При использовании с Hive, MapReduce позволяет лучше выполнять сложные вычисления. Например. создадим таблицу в Hive: Загрузим некоторые данные в таблицу: Выполним запрос с MapReduce: Также Hive имеет SQL-подобный язык HiveQL для взаимодействия с данными, хранящимися в HDFS. Интеграция PostgreSQL с Hadoop позволяет объединить мощные аналитические функции PostgreSQL с возможностями хранения и обработки данных в Hadoop. Все актуальные методы и инструменты по работе с данными и аналитикой можно освоить на онлайн-курсах OTUS: в каталоге можно посмотреть список всех программ, а в календаре — записаться на открытые уроки.wget https://downloads.apache.org/hadoop/common/hadoop-3.4.0./hadoop-3.4.0.tar.gz tar -xzf hadoop-3.4.0.tar.gz sudo mv hadoop-3.4.0. /usr/local/hadoop~/.bashrc:export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop export YARN_HOME=$HADOOP_HOMEsource ~/.bashrc$HADOOP_HOME/etc/hadoop:
core-site.xml<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
hdfs-site.xml<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:///usr/local/hadoop/data/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///usr/local/hadoop/data/datanode</value> </property> </configuration>
mapred-site.xml<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
yarn-site.xml<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> </configuration>hdfs namenode -format start-dfs.sh start-yarn.shhttp://localhost:9870.wget https://downloads.apache.org/hive/hive-4.0.0/apache-hive-4.0.0-bin.tar.gz tar -xzf apache-hive-4.0.0-bin.tar.gz sudo mv apache-hive-4.0.0-bin /usr/local/hive~/.bashrc:export HIVE_HOME=/usr/local/hive export PATH=$PATH:$HIVE_HOME/bin export HADOOP_HOME=/usr/local/hadoop export PATH=$PATH:$HADOOP_HOME/binsource ~/.bashrchdfs dfs -mkdir /tmp hdfs dfs -mkdir -p /user/hive/warehouse hdfs dfs -chmod g+w /tmp hdfs dfs -chmod g+w /user/hive/warehousehive-site.xml в директории $HIVE_HOME/conf:<configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:derby:;databaseName=metastore_db;create=true</value> <description>JDBC connect string for a JDBC metastore</description> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>org.apache.derby.jdbc.EmbeddedDriver</value> <description>Driver class name for a JDBC metastore</description> </property> <property> <name>hive.metastore.warehouse.dir</name> <value>/user/hive/warehouse</value> <description>location of default database for the warehouse</description> </property> </configuration>sudo apt-get install postgresql postgresql-contribgit clone https://github.com/your-github/hdfs_fdw cd hdfs_fdw make sudo make installCREATE EXTENSION hdfs_fdw;Основные функции
CREATE SERVER. Этот объект инкапсулирует информацию о подключении, которую использует FDW для доступа к внешним данным.CREATE SERVER hdfs_server FOREIGN DATA WRAPPER hdfs_fdw OPTIONS (host '127.0.0.1', port '10000');
hdfs_server — имя сервера, которое будет использоваться в дальнейших операциях.FOREIGN DATA WRAPPER hdfs_fdw — указывает на используемый FDW.OPTIONS — параметры подключения, включая host и port Hive или Spark сервера.CREATE USER MAPPING FOR current_user SERVER hdfs_server OPTIONS (username 'hadoop_user', password 'hadoop_password');
FOR current_user — указывает на текущего пользователя PostgreSQL.OPTIONS — учетные данные для аутентификации на сервере Hadoop.CREATE FOREIGN TABLE, которая определяет структуру таблицы и параметры подключения:CREATE FOREIGN TABLE hdfs_table ( id INT, name TEXT ) SERVER hdfs_server OPTIONS (dbname 'default', table_name 'hdfs_table');
hdfs_table — имя внешней таблицы в PostgreSQL.SERVER hdfs_server — указывает, к какому серверу подключаться.OPTIONS — параметры, включая dbname и table_name, указывающие на базу данных и таблицу в Hive или Spark.SELECT * FROM hdfs_table WHERE id > 10;hdfs_table, хранящейся в Hadoop, с применением фильтрации на стороне PostgreSQL.ALTER SERVER hdfs_server OPTIONS (SET enable_aggregate_pushdown 'true');CREATE TABLE weblogs ( client_ip STRING, request_date STRING, request STRING, response_code STRING, bytes INT ) ROW FORMAT DELIMITED FIELDS TERMINATED BY ' ';LOAD DATA LOCAL INPATH '/path/to/weblogs.txt' INTO TABLE weblogs;SELECT client_ip, COUNT(*) AS request_count FROM weblogs WHERE request_date LIKE '2021%' GROUP BY client_ip ORDER BY request_count DESC;
ссылка на оригинал статьи https://habr.com/ru/articles/817063/
Добавить комментарий