ホームページ >バックエンド開発 >PHPチュートリアル >PHP は SHELL を呼び出してローカル ファイルを Hadoop の HDF にダウンロードします
PHP は SHELL を呼び出してローカル ファイルを Hadoop の HDF にアップロードします
元々はThriftを使ってアップロードしていたのですが、アップロード効率が悪く他の人から批判を受けていたため、他の方法を使わざるを得ませんでした。
?
環境:
phpの実行環境はnginx + php-fpmです
?
Hadoop では権限制御がオンになっているため、PHP を直接使用してシェルを呼び出してアップロードする場合は権限がありません。 php経由でコマンドを実行すると、phpが実行されるアカウントとレベルがnobodyになるようです。したがって、解決策は 2 つあります。まず、Hadoop シェルでディレクトリを作成し、そのディレクトリの所有者を、nobody グループのnobody ユーザーに割り当てます。次に、元のディレクトリのアクセス許可を解放し、777 を使用します。詳細な手順は次のとおりです:
?
方法 1: ./hadoop fs -chown -R nothing:nobody /resources
注: /resources はユーザー ディレクトリであり、状況に応じて変更する必要があります
?
方法 2: ./hadoop fs -chomod -R 777 /resources
注: /resources はユーザー ディレクトリであり、状況に応じて変更する必要があります
?
PHP がシェルを呼び出す方法:
public function uploadByShell($local, $hdfs) { $shell = "sh /usr/local/hadoop/hadoop-0.20.2/bin/hadoop fs -copyFromLocal " . $local ." " . $hdfs; $shell .= "; sh /usr/local/hadoop/hadoop-0.20.2/bin/hadoop fs -chmod 777 " . $hdfs; $res = null; system($shell, $res); $flag = false; if ($res == "0") { $flag = true; } return $flag; }?
?
?
?
?