2017-02-17 4 views
2

"libhdfs.so:共有オブジェクトファイルを開くことができません:このファイルまたはディレクトリはありません"(以下のスタックトレース)エラーが発生し、Pythonを実行しようとしていますHDFSに格納されたファイルでTensorflowリーダーを呼び出すスクリプト。実行時にアクティブ化されたvirtualenvにTensorflowを持つクラスタ上のノードでスクリプトを実行しています。私は、実行する前に、以下の環境変数を設定します。HDFS上のファイルでテンソルフローを実行しています(libhdfs.soが見つかりません)

  • 輸出HADOOP_HDFS_HOME = $ HADOOP_HDFS_HOMEます。/ opt/Clouderaの/小包/ CDH
  • 輸出JAVA_HOME =は/ usr/libに/ JVM/javaの-7-OpenJDKの-amd64の
  • 輸出LD_LIBRARY_PATH = $のLD_LIBRARY_PATH:/opt/cloudera/parcels/CDH/lib/libhdfs.so
  • 輸出LD_LIBRARY_PATH = $のLD_LIBRARY_PATH:$ {JAVA_HOME}/JRE/LIB/AMD64 /サーバ

私はスクリプトを実行する例えば:

  • CLASSPATH = $($のLD_LIBRARY_PATH}クラスパス--glob)パイソンTEST.py

これは、スクリプトのコードである:

以下
filename_queue = tf.train.string_input_producer([ 
    "hdfs://hostname:port/user/hdfs/test.avro" ]) 
reader = 
    tf.WholeFileReader() key, value = reader.read(filename_queue) 

    with tf.Session() as sess: 
     coord = tf.train.Coordinator() 
     threads = tf.train.start_queue_runners(coord=coord) 
     sess.run([key,value]) 
     coord.request_stop() 
     coord.join(threads) 

スタックでありますエラーのトレース。このエラーの原因となっているアイディアについては、私はすでに認識しています(LD_LIBRARY_PATH変数に実行前のlibhdfs.soファイルへの明示的なポインタがあることを確認しています。

Traceback (most recent call last): 
    File "TEST.py", line 25, in <module> 
    sess.run([key,value]) 
    File "/home/username/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 767, in run 
    run_metadata_ptr) 
    File "/home/username/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 965, in _run 
    feed_dict_string, options, run_metadata) 
    File "/home/username/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1015, in _do_run 
    target_list, options, run_metadata) 
    File "/home/username/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/client/session.py", line 1035, in _do_call 
    raise type(e)(node_def, op, message) 
tensorflow.python.framework.errors_impl.NotFoundError: libhdfs.so: cannot open shared object file: No such file or directory 
    [[Node: ReaderReadV2 = ReaderReadV2[_device="/job:localhost/replica:0/task:0/cpu:0"](WholeFileReaderV2, input_producer)]] 

Caused by op u'ReaderReadV2', defined at: 
    File "TEST.py", line 19, in <module> 
    key, value = reader.read(filename_queue) 
    File "/home/username/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/ops/io_ops.py", line 272, in read 
    return gen_io_ops._reader_read_v2(self._reader_ref, queue_ref, name=name) 
    File "/home/username/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/ops/gen_io_ops.py", line 410, in _reader_read_v2 
    queue_handle=queue_handle, name=name) 
    File "/home/username/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py", line 763, in apply_op 
    op_def=op_def) 
    File "/home/username/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 2395, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/home/username/tensorflow/local/lib/python2.7/site-packages/tensorflow/python/framework/ops.py", line 1264, in __init__ 
    self._traceback = _extract_stack() 

NotFoundError (see above for traceback): libhdfs.so: cannot open shared object file: No such file or directory 
+0

ファイルが解決されたかどうかを確認するには 'ldd'を試してください。これはインストール上の問題ですので、githubページとCC @ jhseuに問題を提出してください。 – drpng

+2

'LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:/ opt/cloudera/parcels/CDH/lib/libhdfs.so'の代わりに' export LD_LIBRARY_PATH = $ LD_LIBRARY_PATH:/ opt/cloudera/parcels/CDH/lib'を実行できますか?ファイル名ではなくディレクトリ名)? – mrry

+0

@mrry、これは良い考えでした。私はそれを試して、今私は代わりに、次のエラーが表示されます: "java.io.IOException:No FileSystem for scheme:hdfs"。私が見つけることができる唯一の関連する問題は、maven関連の問題を示唆するhttp://stackoverflow.com/questions/17265002/hadoop-no-filesystem-for-scheme-fileでした。私が知る限り、私はスクリプトを実行するときにmavenを起動していません。 – stacksonstacks

答えて

0

私も私のためのソリューションは、このファイルをコピーして、この問題が発生しました:あなたは、このファイルの場所がわからない場合は、以下を実行し

ネイティブ/ $ HADOOP_HDFS_HOME/libがコマンドを使用してその場所を探します:

sudo updatedb 
locate libhdfs.so 

これでファイルの場所がわかります。次/ libのネイティブ$ HADOOP_HDFS_HOME /にファイルをコピーします。

cp locationOflibhdfs.so $HADOOP_HDFS_HOME/lib/native 

注:libhdfs.soファイルの場所とlocationOflibhdfs.soを交換してください。

関連する問題