Подключите Apache Drill к Google Cloud

Как подключить облачные корзины Google к Apache Drill. Я хочу подключить Apache Drill к корзинам облачного хранилища Google и получить данные из файловых файлов, хранящихся в этих корзинах.

Я могу указать идентификатор доступа и ключ в файле core-site.xml, чтобы подключиться к AWS. Есть ли аналогичный способ подключения Drill к облаку Google.


person Pawan    schedule 11.01.2017    source источник


Ответы (2)


Я нашел ответ здесь полезным: Apache Drill с использованием Google Cloud Storage

В Google Cloud Dataproc вы можете настроить его с помощью действия инициализации, как в ответе выше. Существует также полный вариант, который вы можете использовать, который создает GCS плагин для вас, по умолчанию указывающий на эфемерное ведро, созданное с вашим кластером dataproc.

Если вы не используете Cloud Dataproc, вы можете сделать следующее в уже установленном кластере Drill.

Получите откуда-нибудь коннектор GCS и поместите его в каталог сторонних jar-файлов Drill. . Настройка GCS подробно описана по ссылке выше. В dataproc jar коннектора находится в /usr/lib/hadoop, поэтому описанное выше действие инициализации делает следующее:

# Link GCS connector to drill jars
ln -sf /usr/lib/hadoop/lib/gcs-connector-1.6.0-hadoop2.jar $DRILL_HOME/jars/3rdparty

Вам также необходимо настроить файл core-site.xml и сделать его доступным для Drill. Это необходимо для того, чтобы Drill знал, как подключиться к GCS.

# Symlink core-site.xml to $DRILL_HOME/conf
ln -sf /etc/hadoop/conf/core-site.xml $DRILL_HOME/conf

Запустите или перезапустите буровые долота по мере необходимости.

После запуска Drill вы можете создать новый плагин, который указывает на корзину GCS. Сначала запишите файл JSON, содержащий конфигурацию плагина:

export DATAPROC_BUCKET=gs://your-bucket-name
cat > /tmp/gcs_plugin.json <<EOF
{
    "config": {
        "connection": "$DATAPROC_BUCKET",
        "enabled": true,
        "formats": {
            "avro": {
                "type": "avro"
            },
            "csv": {
                "delimiter": ",",
                "extensions": [
                    "csv"
                ],
                "type": "text"
            },
            "csvh": {
                "delimiter": ",",
                "extensions": [
                    "csvh"
                ],
                "extractHeader": true,
                "type": "text"
            },
            "json": {
                "extensions": [
                    "json"
                ],
                "type": "json"
            },
            "parquet": {
                "type": "parquet"
            },
            "psv": {
                "delimiter": "|",
                "extensions": [
                    "tbl"
                ],
                "type": "text"
            },
            "sequencefile": {
                "extensions": [
                    "seq"
                ],
                "type": "sequencefile"
            },
            "tsv": {
                "delimiter": "\t",
                "extensions": [
                    "tsv"
                ],
                "type": "text"
            }
        },
        "type": "file",
        "workspaces": {
            "root": {
                "defaultInputFormat": null,
                "location": "/",
                "writable": false
            },
            "tmp": {
                "defaultInputFormat": null,
                "location": "/tmp",
                "writable": true
            }
        }
    },
    "name": "gs"
}
EOF

Затем отправьте новый плагин на любое сверло (я предполагаю, что вы используете его на одном из сверл):

curl -d@/tmp/gcs_plugin.json \
  -H "Content-Type: application/json" \
  -X POST http://localhost:8047/storage/gs.json

Я считаю, что вам нужно повторить эту процедуру, изменив имя («gs» выше), если вы хотите, чтобы Drill запрашивал несколько сегментов.

Затем вы можете запустить sqlline и проверить, можете ли вы запрашивать файлы в этом сегменте.

person Vince Gonzalez    schedule 13.03.2017

Я знаю, что этот вопрос довольно старый, но все же вот способ сделать это без использования Dataproc.

Добавьте файл JAR из соединителей GCP в каталог jars/3rdparty. Добавьте следующее в файл site-core.xml в каталоге conf (измените значения в верхнем регистре, такие как YOUR_PROJECT_ID, на свои собственные данные):

<property>
    <name>fs.gs.project.id</name>
    <value>YOUR_PROJECT_ID</value>
    <description>
      Optional. Google Cloud Project ID with access to GCS buckets.
      Required only for list buckets and create bucket operations.
    </description>
  </property>
  <property>
    <name>fs.gs.auth.service.account.private.key.id</name>
    <value>YOUR_PRIVATE_KEY_ID</value>
  </property>
    <property>
        <name>fs.gs.auth.service.account.private.key</name>
        <value>-----BEGIN PRIVATE KEY-----\nYOUR_PRIVATE_KEY\n-----END PRIVATE KEY-----\n</value>
    </property>
  <property>
    <name>fs.gs.auth.service.account.email</name>
    <value>YOUR_SERVICE_ACCOUNT_EMAIL/value>
    <description>
      The email address is associated with the service account used for GCS
      access when fs.gs.auth.service.account.enable is true. Required
      when authentication key specified in the Configuration file (Method 1)
      or a PKCS12 certificate (Method 3) is being used.
    </description>
  </property>
  <property>
    <name>fs.gs.working.dir</name>
    <value>/</value>
    <description>
      The directory relative gs: uris resolve in inside of the default bucket.
    </description>
  </property>
   <property>
    <name>fs.gs.implicit.dir.repair.enable</name>
    <value>true</value>
    <description>
      Whether or not to create objects for the parent directories of objects
      with / in their path e.g. creating gs://bucket/foo/ upon deleting or
      renaming gs://bucket/foo/bar.
    </description>
  </property>
   <property>
    <name>fs.gs.glob.flatlist.enable</name>
    <value>true</value>
    <description>
      Whether or not to prepopulate potential glob matches in a single list
      request to minimize calls to GCS in nested glob cases.
    </description>
  </property>
   <property>
    <name>fs.gs.copy.with.rewrite.enable</name>
    <value>true</value>
    <description>
      Whether or not to perform copy operation using Rewrite requests. Allows
      to copy files between different locations and storage classes.
    </description>
  </property>

Запустите Apache Drill.

Добавьте пользовательское хранилище в Drill.

Вы можете идти.

Решение находится здесь , где я подробно расскажу о том, что мы делаем с исследованием данных с помощью Apache Drill.

person user1369384    schedule 18.03.2020
comment
Этот ответ и связанная статья в блоге сработали для меня без необходимости использования DataProc. Единственное предостережение в моем случае заключалось в том, что когда я пытался указать адрес электронной почты учетной записи службы, а также идентификатор и значение закрытого ключа, как показано выше, я получал следующую ошибку: Error: SYSTEM ERROR: IOException: Invalid PKCS8 data. Однако при копировании файла JSON, предоставленного GCP, в мой экземпляр Drill и указание вместо этого fs.gs.auth.service.account.json.keyfile согласно ссылке в блоге на формат, указанный в репозитории соединителя Hadoop, отлично сработало. - person dev8675309; 31.03.2020