Size: a a a

2019 October 18

A

Alex in Data Engineers
java.class.path это переменная {{CLASSPATH}} присланная клиентом
источник

A

Alex in Data Engineers
А твоём случае бут приложением
источник

A

Alex in Data Engineers
источник

A

Alex in Data Engineers
И дальше по тексту, все тул ранены, спарк сабмиты и тд делают примерно эти же шаги
источник

N

Nikita Blagodarnyy in Data Engineers
Alex
java.class.path это переменная {{CLASSPATH}} присланная клиентом
То есть бут приложение, запущенное от имени пользователя hadoop, взяло переменную окружения $CLASSPATH пользователя hadoop и передала его в YARN, верно?
источник

A

Alex in Data Engineers
Не совсем :)
Оно взяло конфиг файл, вычитала там

String[] paths = conf.getStrings(
       YarnConfiguration.YARN_APPLICATION_CLASSPATH, YarnConfiguration.DEFAULT_YARN_CROSS_PLATFORM_APPLICATION_CLASSPATH);

Так как первую маловероятно что ты сетал, то взяла дефолт

Залила jar свой

Сформировала {{CLASSPATH}}   переменную и просетапила это в джоб конфиг

Дальше ноде менеджер вычитал эту переменную
Сделал замены
Просетал все в java.class.path

Попытался запустить
источник

A

Alex in Data Engineers
Да, сори,
$CLASSPATH да
$HADOOP_CLASSPATH нет
источник

A

Alex in Data Engineers
Когда ты формируешь {{CLASSPATH}}  то можно там через разделитель добавить и ${HADOOP_CLASSPATH} прямо так строкой

Но гарантий что он будет просетан на ноде нету
источник

N

Nikita Blagodarnyy in Data Engineers
Alex
Не совсем :)
Оно взяло конфиг файл, вычитала там

String[] paths = conf.getStrings(
       YarnConfiguration.YARN_APPLICATION_CLASSPATH, YarnConfiguration.DEFAULT_YARN_CROSS_PLATFORM_APPLICATION_CLASSPATH);

Так как первую маловероятно что ты сетал, то взяла дефолт

Залила jar свой

Сформировала {{CLASSPATH}}   переменную и просетапила это в джоб конфиг

Дальше ноде менеджер вычитал эту переменную
Сделал замены
Просетал все в java.class.path

Попытался запустить
Но в yarn-site.xml(и в остальных *-site.xml) не встречается вообще слово classpath. Откуда взялся дефолт?
источник

A

Alex in Data Engineers
YarnConfiguration.YARN_APPLICATION_CLASSPATH

YarnConfiguration.DEFAULT_YARN_CROSS_PLATFORM_APPLICATION_CLASSPATH
источник

A

Alex in Data Engineers
Куда ведут данные переменные?
источник

N

Nikita Blagodarnyy in Data Engineers
YarnConfiguration.YARN_APPLICATION_CLASSPATH=yarn.application.classpath
YarnConfiguration.
DEFAULT_YARN_CROSS_PLATFORM_APPLICATION_CLASSPATH=[{{HADOOP_CONF_DIR}}, {{HADOOP_COMMON_HOME}}/share/hadoop/common/*, {{HADOOP_COMMON_HOME}}/share/hadoop/common/lib/*, {{HADOOP_HDFS_HOME}}/share/hadoop/hdfs/*, {{HADOOP_HDFS_HOME}}/share/hadoop/hdfs/lib/*, {{HADOOP_YARN_HOME}}/share/hadoop/yarn/*, {{HADOOP_YARN_HOME}}/share/hadoop/yarn/lib/*]
источник

A

Alex in Data Engineers
Ну вот :) они потом тебе и разыменовываются в ту портянку
источник

A

Alex in Data Engineers
Ещё можно сказать что у тебя норм проставлены все параметры окружения, видишь как они передаются

Так как неизвестна что за система на ноде, а в Windows и Linux разный формат то {{variable}}
источник

N

Nikita Blagodarnyy in Data Engineers
На сервере, где исполняется, Ubuntu 18
источник

A

Alex in Data Engineers
нет, я про то что {{variable}}

в линукс это ${variable}
в виндовс %variable%

вот хадуп ввел свой формат еще =)
источник

AE

Alexey Evdokimov in Data Engineers
handlebars какой-нибудь поди используется для парсинга и подстановки
источник

DZ

Dmitry Zuev in Data Engineers
Alex
нет, я про то что {{variable}}

в линукс это ${variable}
в виндовс %variable%

вот хадуп ввел свой формат еще =)
Jj
источник

DZ

Dmitry Zuev in Data Engineers
Jingja
источник

A

Alex in Data Engineers
org.apache.hadoop.conf.Configuration conf = HBaseConfiguration.create();
conf.addResource(new Path("./resources/hbase-site.xml"));
conf.addResource(new Path("./resources/hdfs-site.xml"));
conf.addResource(new Path("./resources/yarn-site.xml"));
conf.addResource(new Path("./resources/mapred-site.xml"));
conf.addResource(new Path("./resources/core-site.xml"));

// тут добавь вывод что ты получил в paths
String[] paths = conf.getStrings(
       YarnConfiguration.YARN_APPLICATION_CLASSPATH, YarnConfiguration.DEFAULT_YARN_CROSS_PLATFORM_APPLICATION_CLASSPATH);

// так же можно добавить в paths свои пути к hbase на файловой системе  на нодах и сделать
conf.setStrings(YarnConfiguration.YARN_APPLICATION_CLASSPATH, newPaths);

// blabla
int ret = ToolRunner.run(new CopyTable(conf), args);
источник