Я пытаюсь получить доступ к Accumulo 1.6 из Apache Spark (написано на Java), используя AccumuloInputFormat
с newAPIHadoopRDD
. Чтобы сделать это, я должен сообщить AccumuloInputFormat
, где найти ZooKeeper, вызвав метод setZooKeeperInstance
. Этот метод принимает объект ClientConfiguration
, который определяет различные соответствующие свойства.
Я создаю свой объект ClientConfiguration
, вызывая статический метод loadDefault
. Предполагается, что этот метод ищет в разных местах файл client.conf
для загрузки значений по умолчанию. Одно из мест, где он должен искать, это $ACCUMULO_CONF_DIR/client.conf
.
Поэтому я пытаюсь установить переменную среды ACCUMULO_CONF_DIR
таким образом, чтобы она была видна, когда Spark запускает задание (для справки, я пытаюсь запустить в режиме развертывания yarn-cluster
). Я еще не нашел способ сделать это успешно.
До сих пор я пробовал:
- Звонок
setExecutorEnv("ACCUMULO_CONF_DIR", "/etc/accumulo/conf")
по телефонуSparkConf
- Экспорт
ACCUMULO_CONF_DIR
вspark-env.sh
- Настройка
spark.executorEnv.ACCUMULO_CONF_DIR
вspark-defaults.conf
Ни один из них не работал. Когда я печатаю среду перед вызовом setZooKeeperInstance
, ACCUMULO_CONF_DIR
не появляется.
Если это уместно, я использую CDH5 версии всего.
Вот пример того, что я пытаюсь сделать (импорт и обработка исключений опущены для краткости):
public class MySparkJob
{
public static void main(String[] args)
{
SparkConf sparkConf = new SparkConf();
sparkConf.setAppName("MySparkJob");
sparkConf.setExecutorEnv("ACcUMULO_CONF_DIR", "/etc/accumulo/conf");
JavaSparkContext sc = new JavaSparkContext(sparkConf);
Job accumuloJob = Job.getInstance(sc.hadoopConfiguration());
// Foreach loop to print environment, shows no ACCUMULO_CONF_DIR
ClientConfiguration accumuloConfiguration = ClientConfiguration.loadDefault();
AccumuloInputFormat.setZooKeeperInstance(accumuloJob, accumuloConfiguration);
// Other calls to AccumuloInputFormat static functions to configure it properly.
JavaPairRDD<Key, Value> accumuloRDD =
sc.newAPIHadoopRDD(accumuloJob.getConfiguration(),
AccumuloInputFormat.class,
Key.class,
Value.class);
}
}