我们知道可以在本地节点向远程集群提交作业。为了实现远程作业的提交: 首先,要确保本地机器的用户名需要跟远程集群的用户名一致(在实验环境中,集群的用户名是Hadoop,因此要在本地机器上创建一个hadoop用户)。
其次,要确保本地机器上的用户对hadoop执行文件和配置文件具备相应的权限(在实验环境中,hadoop用户需要对hadoop安装文件具有执行权限;需要对hadoop配置文件具备读权限;需要对作业的jar文件具备执行权限等)。
再次,本地机器的hadoop配置文件需要与集群的配置文件一致。在一般情况下直接将集群上的配置文件拷贝下来即可。
所有这些完成后使用下面命令进行作业的提交
hadoop --config 配置文件目录 jar 作业.jar 其他参数
注意:在本次作业提交实验过程中还发现一些问题,hadoop在通过配置文件进行启动的过程中已经知道HDFS是使用的何种文件系统。因此,在使用的过程中不需要在添加hdfs://namenode:port/。注意,如果添加了hdfs://namenode:port/一定要注意端口与配置文件的端口是不是一致。我们知道,在命令行中输入的参数具有较高的优先级。以下面的命令为例:
hadoop --config ~/conf fs -ls direcotry
其中directory是不需要以hdfs://namenode:port/开头的,因为hadoop会根据配置文件~/conf进行默认判断。如果directory以hdfs://namenode:port/作为开头,那么一定要注意port。如果你没有显示表明port,默认的port是8020。在本次实验中,HDFS core-site设置的是hdfs://namenode:9001/,而我们在执行命令的时候输入的是hadoop --config ~/conf fs -ls hdfs://namenode/这样就导致了两者的端口不一致,从而造成了麻烦。