У меня возникают трудности с тем, чтобы эти компоненты правильно вязали. У меня есть Spark, установленный и работающий успешно, я могу запускать задания локально, автономно, а также через YARN. Я следил за инструкциями (насколько мне известно) здесь и здесь
Я работаю над Ubuntu, и у меня есть различные версии компонентов
- Искра spark-1.5.1-bin-hadoop2.6
- Hadoop hadoop-2.6.1
- Mongo 2.6.10
- Коннектор Mongo-Hadoop, клонированный из https://github.com/mongodb/mongo-hadoop.git
- Python 2.7.10
У меня возникли трудности с выполнением различных шагов, например, какие банки добавить к какому пути, поэтому я добавил
- in
/usr/local/share/hadoop-2.6.1/share/hadoop/mapreduce
Я добавилmongo-hadoop-core-1.5.0-SNAPSHOT.jar
- следующие переменные среды
-
export HADOOP_HOME="/usr/local/share/hadoop-2.6.1"
-
export PATH=$PATH:$HADOOP_HOME/bin
-
export SPARK_HOME="/usr/local/share/spark-1.5.1-bin-hadoop2.6"
-
export PYTHONPATH="/usr/local/share/mongo-hadoop/spark/src/main/python"
-
export PATH=$PATH:$SPARK_HOME/bin
-
Моя программа Python является базовой
from pyspark import SparkContext, SparkConf
import pymongo_spark
pymongo_spark.activate()
def main():
conf = SparkConf().setAppName("pyspark test")
sc = SparkContext(conf=conf)
rdd = sc.mongoRDD(
'mongodb://username:[email protected]:27017/mydb.mycollection')
if __name__ == '__main__':
main()
Я запускаю его, используя команду
$SPARK_HOME/bin/spark-submit --driver-class-path /usr/local/share/mongo-hadoop/spark/build/libs/ --master local[4] ~/sparkPythonExample/SparkPythonExample.py
и в результате получается следующий результат
Traceback (most recent call last):
File "/home/me/sparkPythonExample/SparkPythonExample.py", line 24, in <module>
main()
File "/home/me/sparkPythonExample/SparkPythonExample.py", line 17, in main
rdd = sc.mongoRDD('mongodb://username:[email protected]:27017/mydb.mycollection')
File "/usr/local/share/mongo-hadoop/spark/src/main/python/pymongo_spark.py", line 161, in mongoRDD
return self.mongoPairRDD(connection_string, config).values()
File "/usr/local/share/mongo-hadoop/spark/src/main/python/pymongo_spark.py", line 143, in mongoPairRDD
_ensure_pickles(self)
File "/usr/local/share/mongo-hadoop/spark/src/main/python/pymongo_spark.py", line 80, in _ensure_pickles
orig_tb)
py4j.protocol.Py4JError
В соответствии с здесь
Это исключение возникает, когда в клиенте Java возникает исключение код. Например, если вы попытаетесь вытащить элемент из пустого стека. Экземпляр генерируемого исключения Java хранится в java_exception.
Рассматривая исходный код для pymongo_spark.py
и строку, бросающую ошибку, он говорит
"Ошибка при общении с JVM. Является ли банкомат MongoDB Spark Spark CLASSPATH?:"
Итак, в ответ я пытался убедиться, что правильные банки сданы, но я мог бы сделать все это неправильно, см. ниже
$SPARK_HOME/bin/spark-submit --jars /usr/local/share/spark-1.5.1-bin-hadoop2.6/lib/mongo-hadoop-spark-1.5.0-SNAPSHOT.jar,/usr/local/share/spark-1.5.1-bin-hadoop2.6/lib/mongo-java-driver-3.0.4.jar --driver-class-path /usr/local/share/spark-1.5.1-bin-hadoop2.6/lib/mongo-java-driver-3.0.4.jar,/usr/local/share/spark-1.5.1-bin-hadoop2.6/lib/mongo-hadoop-spark-1.5.0-SNAPSHOT.jar --master local[4] ~/sparkPythonExample/SparkPythonExample.py
Я импортировал pymongo
в ту же программу python, чтобы проверить, что я могу хотя бы обратиться к MongoDB, используя это, и могу.
Я знаю, что здесь есть немало движущихся частей, поэтому, если я могу предоставить более полезную информацию, пожалуйста, дайте мне знать.