2015-07-09 31 views
7

Spark-submit komut dosyasını kullanmadan pyspark betiklerini iplik küme modlarıyla çalıştırmanın bir yolu var mı? Bu şekilde buna ihtiyacım var çünkü bu kodu bir django web uygulamasına entegre edeceğim.İplik-küme modundaki Pyspark

i aşağıdaki hata var iplik küme modunda herhangi komut dosyasını çalıştırmak çalıştığınızda:

org.apache.spark.SparkException: Detected yarn-cluster mode, but isn't running on a cluster. Deployment to YARN is not supported directly by SparkContext. Please use spark-submit. 

aşağıdaki şekilde sparkContext oluşturuyorsam:

 conf = (SparkConf() 
      .setMaster("yarn-cluster") 
      .setAppName("DataFrameTest")) 

     sc = SparkContext(conf = conf) 

     #Dataframe code .... 

Teşekkür

cevap

20

yarn-cluster modunun desteklenmemesinin nedeni, yarn-cluster'un sürücü programının kendisini önyükleme anlamına gelmesidir (örn. Bir SparkContext kullanarak program çağırma) bir YARN konteyneri. Bir django web uygulamasından göndermeyle ilgili ifadenizi tahmin etmek, sürücü kodunu daha sonra ayrı bir kıvılcım işini ele geçiren bir YARN konteynırına göndermek yerine SparkContext'i web uygulamasının içine yerleştirmek için kullanılan python kodunu kullanmak istediğiniz gibi geliyor .

Bu, durumunuzun yarn-cluster yerine yarn-client moduna en yakın olduğu anlamına gelir; yarn-client modunda, çalışan işlerin asıl mekaniği için YARN ile görüşürken, SparkContext kodunuzu (web uygulamanızın içinde olduğu gibi) istediğiniz yerde çalıştırabilirsiniz. Web uygulamanızla Kıvılcım kodunuz arasında herhangi bir bellek içi durumu paylaşıyorsanız, temelde, YARN kabının içinde çalıştırmak için Kıvılcım bölümünü kesemeyeceğiniz anlamına gelir, yani yarn-cluster yapmaya çalışır. Durumu paylaşmıyorsanız,modunda çalışmak üzere bağımsız bir PySpark işini bir araya getirmek için aslında spark-submit numaralı çağrıyı yapan bir alt işlemi gerçekleştirebilirsiniz.

Özetlemek gerekirse: web uygulamasında doğrudan Spark kodu gömmek istiyorsanız

  1. , sen yarn-client modu yerine kullanmak gerekir. SparkConf() setMaster ("iplik müşteri")
  2. Kıvılcım kodu, yarn-cluster'un gerçekten uygulanabilir olduğu kadar gevşek bir şekilde bağlanmışsa,modunda spark-submit işlevini çağırmak için bir Python subprocess yayımlayabilirsiniz.