我有一个火花流程序,它从我使用以下方法创建的套接字中读取数据:
nc -lk 9999
该程序从套接字读取数据并排除“错误”消息。当我在套接字中手动写入时,它工作正常。
我创建了一个 python 脚本,它经常打印“错误”消息。我将使用以下方法将结果保存在文件中:
stdbuf -oL python my_script.py &>> my_file.txt
并从套接字读取文件:
nc -lk 9999 | tail -f my_file.txt
一切正常,文件在后台更新时,套接字将从文件读取数据,但问题是我的 spark 程序没有捕获“错误”消息。
总结:当我在套接字中手动写入“错误”消息时,spark 会捕获它们,但它不会捕获 python 脚本从套接字生成的“错误”消息。
实际上,如果我从套接字读取文件而不是在其中输入,程序将无法运行。
有什么区别?
答案1
您输入的命令
nc -lk 9999 | tail -f my_file.txt
意思是:获取 的输出netcat
并将其通过管道传输到tail -f my_file.txt
。但tail
不接受任何输入,它只是监视文件my_file.txt
。尝试
tail -f my_file.txt | nc -lk 9999
而是,这样 的输出tail
就被馈送到nc
。