Если у вас уже есть данные в Mongo, я бы предложил использовать SparkSQL с Mongo для загрузки в объект DataFrame вашей коллекции, назовем его df
.
, например
SparkSession spark = SparkSession.builder()
.master("local")
.appName("MongoSparkConnectorIntro")
.config("spark.mongodb.input.uri", "mongodb://127.0.0.1/test.myCollection")
.config("spark.mongodb.output.uri", "mongodb://127.0.0.1/test.myCollection")
.getOrCreate();
// Create a JavaSparkContext using the SparkSession's SparkContext object
JavaSparkContext jsc = new JavaSparkContext(spark.sparkContext());
// Load data and infer schema, disregard toDF() name as it returns Dataset
Dataset<Row> df = MongoSpark.load(jsc).toDF();
Затем вы можете записать данные либо в HDFS, либо в Hive, используя df.write.save
, который по умолчанию соответствует формату вывода паркета , или df.write.saveAsTable
(для таблиц Spark Hive) или df.sql("INSERT INTO TABLE ...)
(необработанный Hive таблицы). Ссылка - Документация по SparkSQL Hive
Примечание: это однократная загрузка ... Если вы хотите транслировать все вставки и изменения из Mongo в Hadoop, вы можете использовать, например, Debezium w / Kafka, а затем использовать кластер Debezium для запуска HDFS Kafka Connect Sink (с интеграцией Hive)