1

cosを私はIBMデータ・サイエンスの経験から、IBMのクラウド・オブジェクト・ストレージに接続しようとしている:ませFileSystemのん:

access_key = 'XXX' 
secret_key = 'XXX' 
bucket = 'mybucket' 
host = 'lon.ibmselect.objstor.com' 
service = 'mycos' 

sqlCxt = SQLContext(sc) 
hconf = sc._jsc.hadoopConfiguration() 
hconf.set('fs.cos.myCos.access.key', access_key) 
hconf.set('fs.cos.myCos.endpoint', 'http://' + host) 
hconf.set('fs.cose.myCos.secret.key', secret_key) 
hconf.set('fs.cos.service.v2.signer.type', 'false') 

obj = 'mydata.tsv.gz' 

rdd = sc.textFile('cos://{0}.{1}/{2}'.format(bucket, service, obj)) 
print(rdd.count()) 

これが返されます。

Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe. 
: java.io.IOException: No FileSystem for scheme: cos 

を、私は私がする必要がある推測していますストロケーターdocsに基づいて 'cos'スキームを使用してください。しかし、このエラーは、スタビライザが使用できないか、古いバージョンであることを示唆していますか?

アイデア?


アップデート1:

私はまた、次のことを試してみました:

sqlCxt = SQLContext(sc) 
hconf = sc._jsc.hadoopConfiguration() 
hconf.set('fs.cos.impl', 'com.ibm.stocator.fs.ObjectStoreFileSystem') 
hconf.set('fs.stocator.scheme.list', 'cos') 
hconf.set('fs.stocator.cos.impl', 'com.ibm.stocator.fs.cos.COSAPIClient') 
hconf.set('fs.stocator.cos.scheme', 'cos') 
hconf.set('fs.cos.mycos.access.key', access_key) 
hconf.set('fs.cos.mycos.endpoint', 'http://' + host) 
hconf.set('fs.cos.mycos.secret.key', secret_key) 
hconf.set('fs.cos.service.v2.signer.type', 'false') 

service = 'mycos' 
obj = 'mydata.tsv.gz'   
rdd = sc.textFile('cos://{0}.{1}/{2}'.format(bucket, service, obj)) 
print(rdd.count()) 

がしかし、今回は応答だった:

Py4JJavaError: An error occurred while calling z:org.apache.spark.api.python.PythonRDD.collectAndServe. 
: java.io.IOException: No object store for: cos 
    at com.ibm.stocator.fs.ObjectStoreVisitor.getStoreClient(ObjectStoreVisitor.java:121) 
    ... 
Caused by: java.lang.ClassNotFoundException: com.ibm.stocator.fs.cos.COSAPIClient 

答えて

0

それはドライバーのcosのように見えますが正しく初期化されていません。この設定をお試しください:

hconf.set('fs.cos.impl', 'com.ibm.stocator.fs.ObjectStoreFileSystem') 

hconf.set('fs.stocator.scheme.list', 'cos') 
hconf.set('fs.stocator.cos.impl', 'com.ibm.stocator.fs.cos.COSAPIClient') 
hconf.set('fs.stocator.cos.scheme', 'cos') 

hconf.set('fs.cos.mycos.access.key', access_key) 
hconf.set('fs.cos.mycos.endpoint', 'http://' + host) 
hconf.set('fs.cos.mycos.secret.key', secret_key) 
hconf.set('fs.cos.service.v2.signer.type', 'false') 

UPDATE 1:

ます。またstocatorクラスがクラスパス上にあることを確認する必要があります。あなたは次のようにpysparkをexceutingことにより、パッケージシステムを使用することができます。

./bin/pyspark --packages com.ibm.stocator:stocator:1.0.9 

私はpreviosly私はそれは素晴らしい仕事swift2dスキームアリと1.0.8を使用しましたどのようにバージョン1.0.9作品は、よく分かりません。

+0

残念ながら、これは機能しませんでした。私はこれを反映するために私の質問を更新しました。 –

+0

@ChrisSnowはい、今は設定上の問題ではありませんが、ライブラリがありません。更新された回答をご覧ください。 – Mariusz

0

StocatorはSpark 2.0および2.1カーネルのクラスパスにありますが、cosスキームは構成されていません。あなたは、Pythonのノートブックで次のコマンドを実行して設定にアクセスすることができますプロパティfs.stocator.scheme.listため

!cat $SPARK_CONF_DIR/core-site.xml 

ルック。私は現在、見るものは次のとおりです。

<property> 
    <name>fs.stocator.scheme.list</name> 
    <value>swift2d,swift,s3d</value> 
</property> 

私はあなたがcosスキームをサポートするDSXに対する機能要求を上げることをお勧めします。

2

fs.cosスキームに対応したStocator(v1.0.9)の最新バージョンは、まだSpark aaServiceにデプロイされていません(間もなく公開予定)。あなたのCOSに接続するためにstocatorスキーム "fs.s3d" を使用してください

例:。

endpoint = 'endpointXXX' 
access_key = 'XXX' 
secret_key = 'XXX' 

prefix = "fs.s3d.service" 
hconf = sc._jsc.hadoopConfiguration() 
hconf.set(prefix + ".endpoint", endpoint) 
hconf.set(prefix + ".access.key", access_key) 
hconf.set(prefix + ".secret.key", secret_key) 

bucket = 'mybucket' 
obj = 'mydata.tsv.gz' 

rdd = sc.textFile('s3d://{0}.service/{1}'.format(bucket, obj)) 
rdd.count() 

また、あなたがibmos2spark使用することができます。 libは既にサービスにインストールされています。例:

import ibmos2spark 

credentials = { 
    'endpoint': 'endpointXXXX', 
    'access_key': 'XXXX', 
    'secret_key': 'XXXX' 
} 

configuration_name = 'os_configs' # any string you want 
cos = ibmos2spark.CloudObjectStorage(sc, credentials, configuration_name) 

bucket = 'mybucket' 
obj = 'mydata.tsv.gz' 
rdd = sc.textFile(cos.url(obj, bucket)) 
rdd.count() 
関連する問題