如何将 c ++ 变量的值传递给 hadoop HDFS 的 bash 系统命令?

How to pass the value of a c ++ variable to a bash system command of hadoop HDFS?

本文关键字:hadoop HDFS bash 系统命令 值传 变量      更新时间:2023-10-16

我正在尝试传递从我的Hadoop流的输入文件中收到的变量。 输入文件包含视频的名称,例如:

Input_file.txt:

视频0001.mp4

我将输入的值存储在变量

int main (int argc, const char* argv[]){
string key;
string value ="1";
while(cin>>key) {
system("/usr/local/lib/hadoop-2.7.3/bin/hadoop fs -get /user/root/BDs/Video0001.mp4 /home/master/Desktop/Extract_signature/BDs/");
system("mkdir /home/master/Desktop/Extract_signature/SIGN");
// ....
// ....
}
}

我的目标是将视频名称替换为Key变量的值并运行系统命令

所以更换

system("/usr/local/lib/hadoop-2.7.3/bin/hadoop fs -get /user/root/BDs/Video0001.mp4

system("/usr/local/lib/hadoop-2.7.3/bin/hadoop fs -get /user/root/BDs/<Value of key> 

std::string(或std::ostringstream)构造system()的整个参数,并使用结果的c_str()函数将其传递给system()

std::string hadoopCmd = "/usr/local/lib/hadoop-2.7.3/bin/hadoop fs -get /user/root/BDs/";
hadoopCmd += key;
system(hadoopCmd.c_str());

此版本在其他类型的格式方面比std::string更灵活,key

std::ostringstream hadoopCmd;
hadoopCmd << "/usr/local/lib/hadoop-2.7.3/bin/hadoop fs -get /user/root/BDs/"
<< key;
system(hadoopCmd.str().c_str());