2015-01-29 5 views
7

मैं डेटा विश्लेषण के लिए अपाचे स्पार्क और कैसंड्रा का उपयोग करने की कोशिश कर रहा हूं। इसलिए मैंने रिमोट मशीन पर चल रहे कैसंड्रा तक पहुंचने के लिए जावा कोड लिखा था। मैंने निम्नलिखित जावा कोड का इस्तेमाल किया।स्पार्ककॉन्फ़ का उपयोग कर रिमोट कैसंद्रा क्लस्टर से कनेक्ट करते समय पास "प्रमाणीकरण की आवश्यकता" कैसे प्राप्त करें?

public class JavaDemo implements Serializable { 
private transient SparkConf conf; 

private JavaDemo(SparkConf conf) { 
    this.conf = conf; 
} 

private void run() { 
    JavaSparkContext sc = new JavaSparkContext(conf); 
    generateData(sc); 
    compute(sc); 
    showResults(sc); 
    sc.stop(); 
} 

private void generateData(JavaSparkContext sc) { 
    CassandraConnector connector = CassandraConnector.apply(sc.getConf()); 
    Session session = connector.openSession(); 

    // Prepare the schema 

     session.execute("DROP KEYSPACE IF EXISTS java_api"); 
     session.execute("CREATE KEYSPACE java_api WITH replication = {'class': 'SimpleStrategy', 'replication_factor': 1}"); 
     session.execute("CREATE TABLE java_api.products (id INT PRIMARY KEY, name TEXT, parents LIST<INT>)"); 
     session.execute("CREATE TABLE java_api.sales (id UUID PRIMARY KEY, product INT, price DECIMAL)"); 
     session.execute("CREATE TABLE java_api.summaries (product INT PRIMARY KEY, summary DECIMAL)"); 

} 

private void compute(JavaSparkContext sc) { 
    System.out.println("IN compute"); 
} 

private void showResults(JavaSparkContext sc) { 
    System.out.println("IN showResults"); 
} 

public static void main(String[] args) { 


    SparkConf conf = new SparkConf(); 
    conf.setAppName("Java API demo"); 
    conf.setMaster("local[1]"); 
    System.out.println("---------------------------------"); 
    conf.set("spark.cassandra.connection.host", "192.168.1.219"); 


    JavaDemo app = new JavaDemo(conf); 
    app.run(); 
} 

}

कहाँ 192.168.1.219 मेरी दूरस्थ होस्ट जहां कैसेंड्रा चल रहा है है। और डिफ़ॉल्ट पोर्ट 9160 है। जब मैं प्रोजेर रनेट करता हूं तो मुझे निम्न त्रुटि मिल रही है।

15/01/29 10:14:26 INFO ui.SparkUI: Started Spark Web UI at http://Justin:4040 
15/01/29 10:14:27 WARN core.FrameCompressor: Cannot find LZ4 class, you should make sure the LZ4 library is in the classpath if you intend to use it. LZ4 compression will not be available for the protocol. 
Exception in thread "main" com.datastax.driver.core.exceptions.AuthenticationException: Authentication error on host /192.168.1.219:9042: Host /192.168.1.219:9042 requires authentication, but no authenticator found in Cluster configuration 
    at com.datastax.driver.core.AuthProvider$1.newAuthenticator(AuthProvider.java:38) 
    at com.datastax.driver.core.Connection.initializeTransport(Connection.java:139) 
    at com.datastax.driver.core.Connection.<init>(Connection.java:111) 
    at com.datastax.driver.core.Connection$Factory.open(Connection.java:445) 
    at com.datastax.driver.core.ControlConnection.tryConnect(ControlConnection.java:216) 
    at com.datastax.driver.core.ControlConnection.reconnectInternal(ControlConnection.java:172) 
    at com.datastax.driver.core.ControlConnection.connect(ControlConnection.java:80) 
    at com.datastax.driver.core.Cluster$Manager.init(Cluster.java:1145) 
    at com.datastax.driver.core.Cluster.getMetadata(Cluster.java:313) 
    at com.datastax.spark.connector.cql.CassandraConnector$.com$datastax$spark$connector$cql$CassandraConnector$$createSession(CassandraConnector.scala:166) 
    at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$4.apply(CassandraConnector.scala:151) 
    at com.datastax.spark.connector.cql.CassandraConnector$$anonfun$4.apply(CassandraConnector.scala:151) 
    at com.datastax.spark.connector.cql.RefCountedCache.createNewValueAndKeys(RefCountedCache.scala:36) 
    at com.datastax.spark.connector.cql.RefCountedCache.acquire(RefCountedCache.scala:61) 
    at com.datastax.spark.connector.cql.CassandraConnector.openSession(CassandraConnector.scala:72) 
    at com.datastax.spark.demo.JavaDemo.generateData(JavaDemo.java:42) 
    at com.datastax.spark.demo.JavaDemo.run(JavaDemo.java:34) 
    at com.datastax.spark.demo.JavaDemo.main(JavaDemo.java:73) 

क्या मुझे कुछ भी याद आ रही है। यह बंदरगाह 9042 के लिए सीधे कनेक्शन है। मैं इसे कैसे कनेक्ट कर सकता हूं?

+1

होस्ट /192.168.1.219:9042 पर प्रमाणीकरण त्रुटि के बारे में अस्पष्ट क्या है: होस्ट /192.168.1.219:9042 प्रमाणीकरण की आवश्यकता है, लेकिन क्लस्टर कॉन्फ़िगरेशन_ में कोई प्रमाणीकरणकर्ता नहीं मिला है? –

उत्तर

10

ऐसा लगता है कि आपके पास अपने कैसंड्रा क्लस्टर पर प्रमाणीकरण कॉन्फ़िगर किया गया है। चूंकि आप प्रमाण-पत्र प्रदान नहीं कर रहे हैं, इसलिए यह आपको कनेक्ट करने की अनुमति नहीं दे रहा है। here वर्णित अनुसार spark.cassandra.auth.username और spark.cassandra.auth.password गुणों का उपयोग करके आप ऑथ क्रेडेंशियल में पास कर सकते हैं। इस काम करने के लिए

conf.set("spark.cassandra.auth.username", "cassandra");    
conf.set("spark.cassandra.auth.password", "cassandra"); 

अपने कोड में:

तो तुम जैसे कुछ कर सकता है।

यदि आपके पास authentication सक्षम है और आपने अभी तक कोई भी उपयोगकर्ता नहीं बनाया/बदल दिया है, तो आप उपयोगकर्ता नाम और पासवर्ड के लिए 'कैसंद्रा' का उपयोग कर दूर हो सकते हैं। उत्पादन में हालांकि आपको एक अलग खाता बनाना चाहिए और इसके बजाय इसका उपयोग करना चाहिए, और कैसंड्रा उपयोगकर्ता पासवर्ड को बदलना चाहिए क्योंकि इसमें सबकुछ तक पहुंच है।

संबंधित मुद्दे