ホームページ  >  記事  >  バックエンド開発  >  PHP は SHELL を呼び出してローカル ファイルを Hadoop の HDF にダウンロードします

PHP は SHELL を呼び出してローカル ファイルを Hadoop の HDF にダウンロードします

WBOY
WBOYオリジナル
2016-06-13 13:19:51857ブラウズ

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;
		}
?

?

?

?

?

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。