1. ホーム
  2. パイソン

解決済み:原因:java.io.ioexception: error=13, 権限が拒否されました。

2022-02-25 03:56:46
<パス

記事目次

実験環境

centos 7; cdh5.15; anaconda3

問題の説明

作者は Cloudera Manager を使用して、クラスタ内のマシンにコンポーネントを割り当てています。 Spark2 コンポーネントを使用します。

Python環境、およびこれらのコンポーネントをインストールするのは Pyspark 対話型インターフェースでファイルを読み込むと、次のようなエラーが発生します。

Caused by: java.io.IOException: Cannot run program "/root/anaconda3/bin/python": error=13, Permission denied
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1048)
	at org.apache.spark.api.python.PythonWorkerFactory.startDaemon(PythonWorkerFactory.scala:197)
	at org.apache.spark.api.python.PythonWorkerFactory.createThroughDaemon(PythonWorkerFactory.scala:122)
	at org.apache.spark.api.python.PythonWorkerFactory.create(PythonWorkerFactory.scala:95)
	at org.apache.spark.SparkEnv.createPythonWorker(SparkEnv.scala:117)
	at org.apache.spark.api.python.BasePythonRunner.compute(PythonRunner.scala:108)
	at org.apache.spark.api.python.PythonRDD.compute(PythonRDD.scala:65)
	at org.apache.spark.rdd.RDD.computeOrReadCheckpoint(RDD.scala:324)
	at org.apache.spark.rdd.RDD.iterator(RDD.scala:288)
	at org.apache.spark.scheduler.ResultTask.runTask(ResultTask.scala:90)
	at org.apache.spark.scheduler.Task.run(Task.scala:121)
	at org.apache.spark.executor.Executor$TaskRunner$$anonfun$10.apply(Executor.scala:403)
	at org.apache.spark.util.Utils$.tryWithSafeFinally(Utils.scala:1405)
	at org.apache.spark.executor.Executor$TaskRunner.run(Executor.scala:409)
	at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149)
	at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624)
	... 1 more
Caused by: java.io.IOException: error=13, Permission denied
	at java.lang.UNIXProcess.forkAndExec(Native Method)
	at java.lang.UNIXProcess.<init>(UNIXProcess.java:247)
	at java.lang.ProcessImpl.start(ProcessImpl.java:134)
	at java.lang.ProcessBuilder.start(ProcessBuilder.java:1029)


問題の分析・解決

上記のエラーレポートによると、アクセス権がないと書いてあります。これはすべてシステムにデフォルトでインストールされている可能性がありますが、どうなっているのでしょうか?ニック・ヤングの顔クエスチョンマーク!!(笑

そのあとはgoogle、baidu、bingいろいろ検索です。それらのほとんどは、環境変数を変更する:と書いてあります。 ~/.bashrc というのは、実はずっと前に変更したのですが、それでも直りませんでした。

ちなみに、ここで言及します。このエラーについては、どのように spark . を使い、手動で行いました。 Cloudera Manager 配分を試みました。今のところ手動インストールでは、読み込んでいる HDFS ファイル(このエラーも簡単に直せます)を除いては Cloudera Manager を割り当てたコンポーネントが正しく動作しません。

Sparkを手動でインストールする

こちらも手動でインストールします Spark 環境変数の設定です。

厦門大学のデータベース研究室を参照して、このようなことをしました。 リンク

Clouder Managerのアサインメントを使用する

以下の画像はWeb検索で見つけたものです。

は、同じものを持つことを意味します。 Python この問題は長い間解決されなかったので、希望がある限り試してみることにしました。そこで、7つのVMそれぞれにanacondaをインストールしたのですが、これが本当に面倒で、運が悪かったです(でも、各ノードでバージョンを統一しておくことも推奨されています)。

次の2つの画像を見るまで、解決は続きました。

まずこの作者は、私のエラー報告と同じように、問題を投げかけるところから始めます。

やっと、自分の投稿を見返した。再インストールされたとのこと anaconda から /opt/anaconda ディレクトリで解決します。

上記のヒントを元に anaconda で再インストール。 /opt/ ディレクトリにインストールされます(デフォルトでは /root ディレクトリ)を読み込んで HDFS データは、現在

linuxシステムインストール anaconda 参考ファイル
注意:インストール後に ~/.bashrc ファイル内の環境変数をここで変更することを忘れないでください。

export PYSPARK_DRIVER_PYTHON=ipython
export PYSPARK_PYTHON=/opt/anaconda/bin/python


読み込みに成功 HDFS ファイルを作成します。

(base) [root@slave3 opt]# pyspark2
Python 3.7.3 (default, Mar 27 2019, 22:11:17) 
Type 'copyright', 'credits' or 'license' for more information
IPython 7.4.0 -- An enhanced Interactive Python. type '? for help.
Setting default log level to "WARN".
To adjust logging level use sc.setLogLevel(newLevel). For SparkR, use setLogLevel(newLevel).
19/08/07 14:15:17 WARN lineage.LineageWriter: Lineage directory /var/log/spark2/lineage doesn't exist or is not writable. Lineage for this application will be disabled.
Welcome to
      ____ __
     / __/__ ___ _____/ /__
    _\ \/ _ \/ _ `/ __/ '_/
   /__ / . __/\/_,_/_/ /_/\/\_\ version 2.4.0.cloudera1
      /_/

Using Python version 3.7.3 (default, Mar 27 2019 22:11:17)
SparkSession available as 'spark'.

In [1]: input = sc.textFile("/user/platform/dga/output_file/20190610172348.txt")                                         

In [2]: input.first()                                                                                                    
Out[2]: 'baidu.com,legit,0.15,0.85'                                             

In [3]: input.take(10)                                                                                                   
Out[3]: 
['baidu.com,legit,0.15,0.85',
 'taobao.com,legit,0.0,1.0',
 'vovo.tech,legit,0.0,1.0',
 'ecmychar.live,legit,0.05,0.95',



これで問題は解決です。本当の解決は簡単なのですが、何が問題なのかを理解するのは簡単ではありません。

奔放なコーダーからスタートし、風月を語りながら技術を語る