Предварительные требования
Note
Подключение к Hive в onETL на самом деле является SparkSession с доступом к Hive Thrift Metastore и HDFS/S3. Все перемещения данных осуществляются с использованием Spark. Hive Metastore используется только для хранения метаданных таблиц и разделов.
Этот коннектор НЕ требует наличия Hive сервера. Он также НЕ использует Hive JDBC коннектор.
Совместимость версий
- Версии Hive Metastore:
- Официально заявленные: 0.12 - 3.1.3 (может потребоваться явное добавление соответствующего .jar файла)
- Фактически протестированные: 1.2.100, 2.3.10, 3.1.3
- Версии Spark: 2.3.x - 3.5.x
- Версии Java: 8 - 20
Установка PySpark
Для использования коннектора Hive у вас должен быть установлен PySpark (или добавлен в sys.path) ДО создания экземпляра коннектора.
Подробнее см. инструкцию по установке.
Подключение к Hive Metastore
Note
Если вы используете управляемый кластер Hadoop, пропустите этот шаг, так как все конфигурации Spark уже должны присутствовать на хосте.
Создайте файл $SPARK_CONF_DIR/hive-site.xml с URL-адресом Hive Metastore:
```xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>hive.metastore.uris</name>
<value>thrift://metastore.host.name:9083</value>
</property>
</configuration>
```
Создайте файл $SPARK_CONF_DIR/core-site.xml с расположением хранилища, например, порт HDFS IPC неймноды Hadoop или адрес и учетные данные бакета S3:
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://myhadoopcluster:9820</value>
</property>
</configuration>
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
!-- См. https://hadoop.apache.org/docs/current/hadoop-aws/tools/hadoop-aws/index.html#General_S3A_Client_configuration
<property>
<name>fs.defaultFS</name>
<value>s3a://mys3bucket/</value>
</property>
<property>
<name>fs.s3a.bucket.mybucket.endpoint</name>
<value>http://s3.somain</value>
</property>
<property>
<name>fs.s3a.bucket.mybucket.connection.ssl.enabled</name>
<value>false</value>
</property>
<property>
<name>fs.s3a.bucket.mybucket.path.style.access</name>
<value>true</value>
</property>
<property>
<name>fs.s3a.bucket.mybucket.aws.credentials.provider</name>
<value>org.apache.hadoop.fs.s3a.SimpleAWSCredentialsProvider</value>
</property>
<property>
<name>fs.s3a.bucket.mybucket.access.key</name>
<value>some-user</value>
</property>
<property>
<name>fs.s3a.bucket.mybucket.secret.key</name>
<value>mysecrettoken</value>
</property>
</configuration>
Использование Kerberos
Некоторые управляемые кластеры Hadoop используют аутентификацию Kerberos. В этом случае вы должны вызвать команду kinit ДО запуска сессии Spark для генерации тикета Kerberos. См. Установка Kerberos.
Иногда также требуется передать файл keytab в конфигурацию Spark, позволяя экзекуторам Spark генерировать собственные тикеты Kerberos:
SparkSession.builder
.option("spark.kerberos.access.hadoopFileSystems", "hdfs://namenode1.domain.com:9820,hdfs://namenode2.domain.com:9820")
.option("spark.kerberos.principal", "user")
.option("spark.kerberos.keytab", "/path/to/keytab")
.gerOrCreate()
SparkSession.builder
.option("spark.yarn.access.hadoopFileSystems", "hdfs://namenode1.domain.com:9820,hdfs://namenode2.domain.com:9820")
.option("spark.yarn.principal", "user")
.option("spark.yarn.keytab", "/path/to/keytab")
.gerOrCreate()
Дополнительную информацию см. в документации по безопасности Spark.