Как можно установить соединение с удалённой файловой системой HDFS, используя PySpark?

Подскажите, пожалуйста, у кого есть опыт подключения из PySpark к удалённому HDFS без использования аутентификации Kerberos (так как она не настроена)? HDFS размещён в виртуальной машине с Quickstart Cloudera.
  • 3 января 2025 г. 15:03
Ответы на вопрос 1
Для подключения к удалённой файловой системе HDFS из PySpark без использования аутентификации Kerberos вам нужно выполнить несколько шагов. Ниже приведены основные шаги для настройки подключения:

### Шаг 1: Установка PySpark

Если у вас ещё не установлен PySpark, вы можете установить его с помощью `pip`:

```bash
pip install pyspark
```

### Шаг 2: Настройка параметров подключения

Во время создания `SparkSession` необходимо указать параметры для доступа к HDFS. Основные настройки включают адрес HDFS и порт, которые, как правило, выглядят как `hdfs://<hostname>:<port>`. 

Если вы используете Cloudera QuickStart VM, то HDFS может быть доступен на локальном хосте. Например:

```python
from pyspark.sql import SparkSession

# Создаем SparkSession
spark = SparkSession.builder \
    .appName("HDFS Example") \
    .config("fs.defaultFS", "hdfs://<имя_узла_или_IP>:<порт>") \
    .getOrCreate()
```

### Шаг 3: Работа с файлами в HDFS

После создания `SparkSession` вы можете работать с файлами в HDFS, используя методы DataFrame и RDD. Например, чтобы прочитать файл из HDFS:

```python
# Чтение данных из HDFS в DataFrame
df = spark.read.csv("hdfs://<имя_узла_или_IP>:<порт>/path/to/your/file.csv")

# Показать содержимое DataFrame
df.show()
```

### Примечания:

1. **Безопасность:** Убедитесь, что ваша конфигурация HDFS позволяет доступ без аутентификации. 
2. **Network Configuration:** Убедитесь, что ваша локальная машина может подключиться к виртуальной машине, где развернут HDFS. Возможно, вам нужно будет настроить правила брандмауэра или убедиться в том, что нужные порты открыты.
3. **Настройки Hadoop:** Иногда вам может понадобиться настроить файл `core-site.xml` и другие конфигурационные файлы Hadoop на вашей локальной машине, чтобы PySpark мог правильно интерпретировать окружение HDFS.

### Пример кода

Вот полный пример на Python, показывающий, как установить соединение и выполнить простую операцию чтения:

```python
from pyspark.sql import SparkSession

# Настройки для Spark
hdfs_host = "<имя_узла_или_IP>"
hdfs_port = "<порт>"

# Создание SparkSession
spark = SparkSession.builder \
    .appName("HDFS Example") \
    .config("fs.defaultFS", f"hdfs://{hdfs_host}:{hdfs_port}") \
    .getOrCreate()

# Чтение CSV файла из HDFS
df = spark.read.csv("hdfs://{hdfs_host}:{hdfs_port}/path/to/your/file.csv")

# Показать данные
df.show()

# Закрыть SparkSession
spark.stop()
```

Таким образом, вы сможете наладить соединение с удаленной файловой системой HDFS с использованием PySpark без аутентификации Kerberos.
Похожие вопросы