Windows 7でSparkを実行しています。Hiveを使用すると、次のエラーが表示されます
The root scratch dir: /tmp/Hive on HDFS should be writable. Current permissions are: rw-rw-rw-
権限は次のように設定されます
C:\tmp>ls -la
total 20
drwxr-xr-x 1 ADMIN Administ 0 Dec 10 13:06 .
drwxr-xr-x 1 ADMIN Administ 28672 Dec 10 09:53 ..
drwxr-xr-x 2 ADMIN Administ 0 Dec 10 12:22 Hive
Windows-> properties-> security-> Advancedからすべてのユーザーに「フルコントロール」を設定しました。
しかし、まだ同じエラーが表示されます。助けてください?たくさんのリンクをチェックしましたが、これはSpark 1.5のバグです。これは本当ですか?
ありがとう、アーティ
まず、OSに適切なWinutilsを使用していることを確認してください。次のステップは許可です。
Windowsでは、cmdで次のコマンドを実行する必要があります。
D:\winutils\bin\winutils.exe chmod 777 D:\tmp\Hive
Winutilsを既にダウンロードして、HADOOP_HOMEを設定してください。
まず、コンピュータードメインを確認します。試して
c:\work\hadoop-2.2\bin\winutils.exe ls c:/tmp/Hive
このコマンドがaccess deniedまたはFindFileOwnerAndPermissionエラー(1789):このワークステーションとプライマリドメイン間の信頼関係に失敗しましたの場合。
これは、コンピューターのドメインコントローラーに到達できないことを意味します。考えられる理由は、システムドメインコントローラーと同じVPNに接続していないことです。VPNに接続して再試行してください。
ViktorまたはNishuが提供するソリューションを試してください。
次のソリューションは私のためにWindowsで機能しました。
C:\temp\hadoop\bin\winutils.exe chmod 777 \tmp\Hive
\tmp\Hive
はローカルディレクトリではありません
ローカルファイルシステムではなく、HDFSでこのディレクトリの権限を設定する必要があります。 /tmp
は、core-site.xmlでC:\tmp
をfs.defaultFs
に設定しない限り、file://c:/
を意味しません。これはおそらく悪い考えです。
を使用して確認してください
hdfs dfs -ls /tmp
使用して設定
hdfs dfs -chmod 777 /tmp/Hive
VM Windowsで実行中のスパークシェルの開始中にエラーが発生しました:エラーメッセージ:ルートスクラッチディレクトリ:HDFSの/ tmp/Hiveは書き込み可能である必要があります。許可が拒否されました。
解決策:/ tmp/Hiveは一時ディレクトリです。この場所には一時ファイルのみが保持されます。このディレクトリを削除しても問題ありません。適切な権限が必要なときに作成されます。
手順1)hdfsで、/ tmp/Hiveディレクトリを削除==> "hdfs dfs -rm -r/tmp/Hive"
2)OSレベルでも、dir/tmp/Hive ==> rm -rf/tmp/Hiveを削除します
この後、スパークシェルを開始し、正常に動作しました。
これは簡単な4ステップのプロセスです。
Spark 2.0 +:の場合
これをコードに追加します(before SparkSession初期化):
if(getOS()== "windows"){ System.setProperty( "hadoop.home.dir"、 "C:/Users//winutils-master/hadoop-2.7.1 "); }
これをスパークセッションに追加します(これはC:/Temp
の代わりにデスクトップ)。
。config( "Hive.exec.scratchdir"、 "C:/ Users // Desktop/tmphive")
Cmd.exeを開き、次を実行します。
"path\to\hadoop-2.7.1\bin\winutils.exe" chmod 777 C:\ Users \\ Desktop\tmphive
主な理由は、間違ったディレクトリでspark=を開始したことです。D:// tmp/Hiveにフォルダを作成し(完全なアクセス権を付与)、spark D:ドライブD:>スパークシェル
今では動作します.. :)
sparkバージョン2.0.2(2016年11月14日)。このバージョンを使用します。バージョン2.1.0 2016年12月28日リリースにも同じ問題があります。
私もこの問題に直面しました。この問題はネットワークに関連しています。特定のドメインを使用してWindows 7にsparkをインストールしました。
ドメイン名を確認できます
スタート->コンピューター->右クリック->プロパティ->コンピューター名、ドメインおよびワークグループ設定->変更をクリック->コンピューター名(タブ)->変更->ドメイン名をクリックします。
Spark-Shellコマンドを実行すると、エラーなく正常に動作します。
他のネットワークでは、書き込み許可エラーを受け取りました。このエラーを回避するには、上記のパスで指定されたドメインでsparkコマンドを実行します。
Spark Jiraにも同じバグがあります。これは数日前に解決されました。ここにリンクがあります。
https://issues.Apache.org/jira/browse/SPARK-10528
コメントにはすべてのオプションがありますが、解決策は保証されていません。
「winutils.exe」の最新バージョンを使用して試してください。 https://github.com/steveloughran/winutils/blob/master/hadoop-2.7.1/bin/winutils.exe
Windows 7で、「HDFSのルートスクラッチディレクトリ:/ tmp/Hiveは書き込み可能である必要があります。現在のアクセス許可はrw-rw-rw-」という同じエラーが表示されていました。
注:以前のバージョンのwinutilsでも、chmodコマンドは必要な権限をエラーなしで設定していましたが、spark/tmp/Hiveフォルダーが書き込み可能ではないという苦情がまだあります。
正しいバージョンのwinutils.exeを使用すると、私にとってはうまくいきました。 winutilsは、Sparkが事前に構築されているHadoopのバージョンからのものでなければなりません。
HADOOP_HOME環境変数をwinutils.exeのbinの場所に設定します。 winutils.exeをC:\ Spark\binファイルと共に保存しました。だから今、私のSPARK_HOMEとHADOOP_HOMEは同じ場所C:\Spark
を指している。
Winultilsがパスに追加されたので、winutils.exe chmod 777 C:\tmp\Hive
を使用してHiveフォルダーのアクセス許可を付与します
私は、sparkは他のユーザーカテゴリに含まれる)匿名ユーザーとして実行され、このアクセス許可は再帰的であると考えているため、フォルダ/ tmp/Hiveに777アクセス許可を与えてみてください。 spark Hiveの1.5.1バージョンでも同じ問題が発生し、Linuxで以下のコマンドを使用して777の許可を与えることで機能しました。
chmod -r 777 /tmp/Hive