Соединитель Google Cloud для Hadoop не работает с Pig
Я использую Hadoop с HDFS 2.7.1.2.4 и Pig 0.15.0.2.4 (Hortonworks HDP 2.4) и пытаюсь использовать Google Cloud Storage Connector для Spark и Hadoop (bigdata-interop на GitHub). Это работает правильно, когда я пытаюсь, скажем,
hadoop fs -ls gs://bucket-name
Но когда я пытаюсь следующее в Pig (в режиме mapreduce):
data = LOAD 'gs://softline/o365.avro' USING AvroStorage();
data = STORE data INTO 'gs://softline/o366.avro' USING AvroStorage();
Свинья терпит неудачу со следующими ошибками:
org.apache.pig.backend.executionengine.ExecException: ERROR 2118: Wrong FS scheme: hdfs, in path: hdfs://hdp.slweb.ru:8020/user/root, expected scheme: gs
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:279)
at org.apache.hadoop.mapreduce.JobSubmitter.writeNewSplits(JobSubmitter.java:301)
at org.apache.hadoop.mapreduce.JobSubmitter.writeSplits(JobSubmitter.java:318)
at org.apache.hadoop.mapreduce.JobSubmitter.submitJobInternal(JobSubmitter.java:196)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1290)
at org.apache.hadoop.mapreduce.Job$10.run(Job.java:1287)
at java.security.AccessController.doPrivileged(Native Method)
at javax.security.auth.Subject.doAs(Subject.java:422)
at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1657)
at org.apache.hadoop.mapreduce.Job.submit(Job.java:1287)
at org.apache.hadoop.mapreduce.lib.jobcontrol.ControlledJob.submit(ControlledJob.java:335)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:497)
at org.apache.pig.backend.hadoop23.PigJobControl.submit(PigJobControl.java:128)
at org.apache.pig.backend.hadoop23.PigJobControl.run(PigJobControl.java:194)
at java.lang.Thread.run(Thread.java:745)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.MapReduceLauncher$1.run(MapReduceLauncher.java:276)
Caused by: java.lang.IllegalArgumentException: Wrong FS scheme: hdfs, in path: hdfs://hdp.slweb.ru:8020/user/root, expected scheme: gs
at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.checkPath(GoogleHadoopFileSystemBase.java:741)
at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem.checkPath(GoogleHadoopFileSystem.java:90)
at org.apache.hadoop.fs.FileSystem.makeQualified(FileSystem.java:466)
at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.makeQualified(GoogleHadoopFileSystemBase.java:701)
at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystem.getGcsPath(GoogleHadoopFileSystem.java:163)
at com.google.cloud.hadoop.fs.gcs.GoogleHadoopFileSystemBase.setWorkingDirectory(GoogleHadoopFileSystemBase.java:1094)
at org.apache.pig.backend.hadoop.executionengine.mapReduceLayer.PigInputFormat.getSplits(PigInputFormat.java:235)
... 18 more
При необходимости я мог бы опубликовать журналы разъемов GC.
Разве кто-нибудь использовал Pig с этими разъемами? Любая помощь будет точной.
1 ответ
TL;DR явно устанавливает workmapreduce.job.working.dir=/user/root/ при запуске задания pig
Если рабочий каталог не был явно задан во время отправки задания, то Hadoop установит рабочий каталог как рабочий каталог файловой системы по умолчанию. При использовании HDFS в качестве FS по умолчанию рабочий каталог обычно будет выглядеть как "hdfs://namenode:port/user/
Когда вызывается PigInputFormat#getSplits, он выбирает файловую систему, связанную с путем ввода, над которым он работает. В этом случае файловая система является экземпляром GoogleHadoopFileSystem. Затем Pig проверяет путь своего ввода и, если путь нелокальный, вызывает FileSystem#setWorkingDirectory(job.getWorkingDirectory()). Проблема здесь в том, что рабочий каталог задания - это "hdfs://namenode:port/user/