Я пытаюсь создать файлы в HDFS, используя:
import org.apache.hadoop.conf.Configuration;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.Path;
Для этого я добавляю конфиги вот так:
Configuration configuration = new Configuration();
configuration.set("fs.hdfs.impl",
org.apache.hadoop.hdfs.DistributedFileSystem.class.getName()
);
configuration.set("fs.file.impl",
org.apache.hadoop.fs.LocalFileSystem.class.getName()
);
OutputStream fileout1 = new FileOutputStream("CONF_before.XML");
configuration.writeXml(fileout1);
configuration.addResource(new Path("/etc/hive/conf.cloudera.hive/hdfs-site.xml"));
configuration.addResource(new Path("/etc/hive/conf.cloudera.hive/core-site.xml"));
OutputStream fileout = new FileOutputStream("CONF_after.XML");
configuration.writeXml(fileout);
FileSystem hdfs = FileSystem.get(configuration);
Path out_path = new Path(hdfs.getWorkingDirectory() + "/OD.xml");
OutputStream os = hdfs.create(out_path);
Когда я запускаю этот код, я получаю сообщение об ошибке в OutputStream os = hdfs.create(out_path)
:
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.AccessControlException): SIMPLE authentication is not enabled. Available:[TOKEN,KERBEROS]
, но если добавить core-site.xml
к артефакту проекта и запустить его на сервере, ошибок не будет.
Выходные конфигурации в обоих случаях одинаковы. Соответствующая часть core-site.xml
:
<property>
<name>hadoop.security.authentication</name>
<value>kerberos</value>
</property>
<property>
<name>hadoop.security.authorization</name>
<value>false</value>
</property>
<property>
<name>hadoop.rpc.protection</name>
<value>authentication</value>
</property>
Есть идеи, почему это произошло?
Спасибо!