Вопрос 1. Рекомендуемый способ перемещения данных из локального кластера Hadoop в GCS — использовать Коннектор Google Cloud Storage для Hadoop. Инструкции на этом сайте в основном предназначены для запуска Hadoop на виртуальных машинах Google Compute Engine, но вы также можете загрузить коннектор GCS напрямую, либо gcs-connector-1.2.8-hadoop1.jar, если вы используете Hadoop 1.x или Hadoop 0.20.x, или gcs-connector-1.2.8-hadoop2.jar для Hadoop 2.x или Hadoop 0.23.x.
Просто скопируйте jar-файл в каталог hadoop/lib или $HADOOP_COMMON_LIB_JARS_DIR
в случае Hadoop 2:
cp ~/Downloads/gcs-connector-1.2.8-hadoop1.jar /your/hadoop/dir/lib/
Вам также может понадобиться добавить следующее в ваш файл hadoop/conf/hadoop-env.sh, если вы используете 0.20.x:
export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:/your/hadoop/dir/lib/gcs-connector-1.2.8-hadoop1.jar
Затем вы, вероятно, захотите использовать аутентификацию «ключевого файла» служебной учетной записи, поскольку вы находитесь в локальном кластере Hadoop. Зайдите на свой сайт cloud.google.com/console, найдите APIs & auth
слева, нажмите Credentials
, если у вас еще нет одного щелчка Create new Client ID
, выберите Service account
, прежде чем нажимать Create client id
, а пока для соединителя требуется " Тип пары ключей .p12", поэтому нажмите Generate new P12 key
и следите за загруженным файлом .p12. Может быть удобно переименовать его, прежде чем поместить в каталог, более доступный из Hadoop, например:
cp ~/Downloads/*.p12 /path/to/hadoop/conf/gcskey.p12
Добавьте следующие записи в файл core-site.xml в каталоге конфигурации Hadoop:
<property>
<name>fs.gs.impl</name>
<value>com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem</value>
</property>
<property>
<name>fs.gs.project.id</name>
<value>your-ascii-google-project-id</value>
</property>
<property>
<name>fs.gs.system.bucket</name>
<value>some-bucket-your-project-owns</value>
</property>
<property>
<name>fs.gs.working.dir</name>
<value>/</value>
</property>
<property>
<name>fs.gs.auth.service.account.enable</name>
<value>true</value>
</property>
<property>
<name>fs.gs.auth.service.account.email</name>
<value>[email protected]</value>
</property>
<property>
<name>fs.gs.auth.service.account.keyfile</name>
<value>/path/to/hadoop/conf/gcskey.p12</value>
</property>
Как правило, fs.gs.system.bucket не используется, за исключением некоторых случаев для сопоставленных временных файлов, для этой цели вы можете просто создать новую одноразовую корзину. С этими настройками на главном узле вы уже сможете протестировать hadoop fs -ls gs://the-bucket-you-want to-list
. На этом этапе вы уже можете попытаться вывести все данные из главного узла с помощью простого hadoop fs -cp hdfs://yourhost:yourport/allyourdata gs://your-bucket
.
Если вы хотите ускорить его с помощью distcp Hadoop, синхронизируйте lib/gcs-connector-1.2.8-hadoop1.jar и conf/core-site.xml со всеми вашими узлами Hadoop, и все должно работать должным образом. Обратите внимание, что нет необходимости перезапускать узлы данных или узлы имен.
Вопрос 2. В то время как коннектор GCS для Hadoop может копировать напрямую из HDFS, даже не нуждаясь в дополнительном дисковом буфере, GSUtil не может, поскольку он не может интерпретировать протокол HDFS; он знает только, как работать с реальными файлами локальной файловой системы или, как вы сказали, с файлами GCS/S3.
Вопрос 3. Преимущество использования Java API заключается в гибкости; вы можете выбрать, как обрабатывать ошибки, повторные попытки, размеры буфера и т. д., но это требует больше работы и планирования. Использование gsutil хорошо для быстрых случаев использования, и вы наследуете много обработки ошибок и тестирования от команд Google. Коннектор GCS для Hadoop на самом деле создан непосредственно поверх Java API, и, поскольку он полностью с открытым исходным кодом, вы можете увидеть, какие вещи необходимы для его бесперебойной работы, здесь, в его исходном коде на GitHub: https://github.com/GoogleCloudPlatform/bigdata-interop/blob/master/gcs/src/main/java/com/google/cloud/hadoop/gcsio/GoogleCloudStorageImpl.java
person
Dennis Huo
schedule
16.08.2014