मैं स्थानीय Hadoop 2.6 स्थापना से S3/S3n तक कैसे पहुंच सकता हूं?




amazon-web-services amazon-s3 (4)

यदि आप एचडीपी 2.x या अधिक का उपयोग कर रहे हैं तो आप अंबारी में MapReduce2 कॉन्फ़िगरेशन सेटिंग्स में निम्न प्रॉपर्टी को संशोधित करने का प्रयास कर सकते हैं।

mapreduce.application.classpath

मौजूदा स्ट्रिंग के अंत में निम्न मान संलग्न करें:

/usr/hdp/${hdp.version}/hadoop-mapreduce/*

मैं अपनी स्थानीय मशीन पर एक अमेज़ॅन ईएमआर क्लस्टर को पुन: पेश करने की कोशिश कर रहा हूं। उस उद्देश्य के लिए, मैंने अभी तक हैडोप का नवीनतम स्थिर संस्करण स्थापित किया है - 2.6.0 । अब मैं एक एस 3 बाल्टी तक पहुंचना चाहता हूं, जैसा कि मैं ईएमआर क्लस्टर के अंदर करता हूं।

मैंने core-site.xml में aws credentials को जोड़ा है:

<property>
  <name>fs.s3.awsAccessKeyId</name>
  <value>some id</value>
</property>

<property>
  <name>fs.s3n.awsAccessKeyId</name>
  <value>some id</value>
</property>

<property>
  <name>fs.s3.awsSecretAccessKey</name>
  <value>some key</value>
</property>

<property>
  <name>fs.s3n.awsSecretAccessKey</name>
  <value>some key</value>
</property>

नोट: चूंकि कुंजी पर कुछ स्लेश हैं, इसलिए मैं उन्हें% 2F से बच गया हूं

अगर मैं बाल्टी की सामग्री सूचीबद्ध करने की कोशिश करता हूं:

hadoop fs -ls s3://some-url/bucket/

मुझे यह त्रुटि मिलती है:

एलएस: योजना के लिए कोई फ़ाइल सिस्टम नहीं: एस 3

मैंने कोर-साइट.एक्सएमएल को फिर से संपादित किया, और एफएस से संबंधित जानकारी जोड़ा:

<property>
  <name>fs.s3.impl</name>
  <value>org.apache.hadoop.fs.s3.S3FileSystem</value>
</property>

<property>
  <name>fs.s3n.impl</name>
  <value>org.apache.hadoop.fs.s3native.NativeS3FileSystem</value>
</property>

इस बार मुझे एक अलग त्रुटि मिलती है:

-ls: Fatal internal error
java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hadoop.fs.s3.S3FileSystem not found
        at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2074)
        at org.apache.hadoop.fs.FileSystem.getFileSystemClass(FileSystem.java:2578)
        at org.apache.hadoop.fs.FileSystem.createFileSystem(FileSystem.java:2591)

किसी भी तरह मुझे संदेह है कि यार्न वितरण में आवश्यक जार एस 3 पढ़ने में सक्षम नहीं हैं, लेकिन मुझे नहीं पता कि उन्हें कहां प्राप्त करना है। इस दिशा में किसी भी संकेतक की सराहना की जाएगी।


@ अश्रीथ के जवाब ने एक संशोधन के साथ मेरे लिए काम किया: उबंटू पर v2.6 $HADOOP_HOME समय मुझे $HADOOP_PREFIX बजाय $HADOOP_PREFIX का उपयोग करना पड़ा। शायद ऐसा इसलिए है क्योंकि ऐसा लगता है कि $HADOOP_HOME को deprecated जा रहा है?

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:${HADOOP_PREFIX}/share/hadoop/tools/lib/*

ऐसा कहकर, मेरे मैक पर होमब्री के माध्यम से v2.6 स्थापित करने के लिए न तो मेरे लिए काम किया। उस स्थिति में, मैं इस अत्यंत cludgy निर्यात का उपयोग कर रहा हूँ:

export HADOOP_CLASSPATH=$HADOOP_CLASSPATH:$(brew --prefix hadoop)/libexec/share/hadoop/tools/lib/*


import os
os.environ['PYSPARK_SUBMIT_ARGS'] = '--packages com.amazonaws:aws-java-sdk:1.10.34,org.apache.hadoop:hadoop-aws:2.6.0 pyspark-shell'

import pyspark
sc = pyspark.SparkContext("local[*]")

from pyspark.sql import SQLContext
sqlContext = SQLContext(sc)

hadoopConf = sc._jsc.hadoopConfiguration()
myAccessKey = input() 
mySecretKey = input()
hadoopConf.set("fs.s3.impl", "org.apache.hadoop.fs.s3native.NativeS3FileSystem")
hadoopConf.set("fs.s3.awsAccessKeyId", myAccessKey)
hadoopConf.set("fs.s3.awsSecretAccessKey", mySecretKey)

df = sqlContext.read.parquet("s3://myBucket/myKey")

इस समस्या को हल करने के लिए मैंने उपरोक्त सभी को आजमाया, जो असफल रहा (मेरे पर्यावरण के लिए वैसे भी)।

हालांकि मैं उपरोक्त वर्णित दो जारों को उपकरण डीआईआर और सामान्य / lib में कॉपी करके इसे प्राप्त करने में सक्षम था।

उसके बाद ठीक काम किया।