"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
ファイルが解決されたかどうかを確認するには 'ldd'を試してください。これはインストール上の問題ですので、githubページとCC @ jhseuに問題を提出してください。 – drpng
'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
@mrry、これは良い考えでした。私はそれを試して、今私は代わりに、次のエラーが表示されます: "java.io.IOException:No FileSystem for scheme:hdfs"。私が見つけることができる唯一の関連する問題は、maven関連の問題を示唆するhttp://stackoverflow.com/questions/17265002/hadoop-no-filesystem-for-scheme-fileでした。私が知る限り、私はスクリプトを実行するときにmavenを起動していません。 – stacksonstacks