Переключатель имени узла - Hadoop Java API с верблюдом, JMS - PullRequest
0 голосов
/ 29 августа 2018

Привет! Я использую верблюда, чтобы получать сообщения из очереди JMS, обрабатывать сообщения, сохранять их в Hadoop с помощью FS Java API, а затем переносить их в другую очередь

В настоящее время мой конкурент JMS равен 20. поэтому за один раз верблюд JMS потребляет 20 сообщений одновременно. Для каждого сообщения я создаю соединение fs и выполняю операцию, которая создает файл и записывает файл.

Вот вопрос

Иногда я записываю содержимое в файл, по какой-то причине мой namenode отключается, в этом случае я хочу переключить свое имя на активный узел имени

Вот журнал, который я получаю

[Верблюжий (верблюд-1) поток № 1 произошел сбой с момента последнего вызова # 169 ClientNamenodeProtocolTranslatorPD.getFileInfo через {name_node_address_allias / ip: порт}

При отладке я показываю, что категория операции WRITE не поддерживается в режиме ожидания

Я хочу в это время переключиться на активный узел имени

Пример Hadoop Java API

package org.myorg;
import org.apache.hadoop.conf.*;
import org.apache.hadoop.security.UserGroupInformation;
import org.apache.hadoop.fs.Path;
import org.apache.hadoop.fs.FileSystem;
import org.apache.hadoop.fs.FileStatus;

public class HdfsTest {
    public static void main(String args[]) {
        conf.addResource("path-of-core-site.xml");
        conf.addResource("path-of-hdfs-site.xml");
        conf.set("fs.defaultFS", "hdfs://cloudera:8020");
        conf.set("hadoop.security.authentication", "kerberos");
        UserGroupInformation.setConfiguration(conf);
        UserGroupInformation.loginUserFromKeytab("hdfs@CLOUDERA", "/etc/hadoop/conf/hdfs.keytab");
        FileSystem fs = FileSystem.get(conf);    
        //logic to create a file and write
        //close the cfile and connection
    }
}
...