背景
近日在看Hadoop相关内容,由于是入门,遇到一些问题,现记录如下.
软件环境:使用腾讯云服务器,操作系统为centos 7.4 64位.
Java打包问题
打包方式
由于Hadoop并不支持windows操作系统,因此学习思路是在windows上将代码打为jar包,上传至centos云服务器进行运行.打包方式有如下两种:
- 使用idea原生打包方式
- 使用Maven插件
Java运行时指定Main-Class
Java执行jar包的命令为java -jar [jar包路径],但是使用上述命令执行jar包要求在META-INF/MANIFEST.MF中指明Main-Class,无法在运行时确定Main-Class,使用java -cp [jar包路径] [main-class]可以在运行时指定Main-Class
SSH问题
在执行./sbin/start-dfs.sh时结果如下:
根据提示信息可以看出是由于权限被拒绝导致.其实是因为Hadoop各个节点之间通过SSH登录,但是现在无法使用SSH登录,因此导致此问题.而之所以无法使用SSH登录,是因为我是使用root账户登录,而linux的默认配置是不允许root账户使用SSH登录,因此将此配置项修改即可.
- 打开
/etc/ssh/sshd_config,将PermitRootLogin without-password修改为PermitRootLogin yes - 使用
systemctl restart sshd.service重启sshd服务
但修改配置后执行ssh localhost仍然拒绝登录,如下:
在这个地方我卡了很久,因为以上的内容都可以在网上找到资料,执行上述步骤后一般都已解决问题.刚好学习过网络安全方面的内容,对ssh使用的非对称加密有些了解,此时我便使用自己购买的另一台阿里云服务器,在阿里云服务器上使用ssh登录腾讯云服务器,终于发现了问题所在.
在腾讯云服务器重装系统时有两种选项登录
- 使用账户密码登录
- 使用ssh登录
我的腾讯云服务器选择的是ssh登录,因此我的root账户是没有密码的,而ssh localhost默认使用密码登录,这就产生了冲突,因此失败.
如果把尝试登录的计算机称为客户端,把被登录的计算机称为服务端,那么ssh登录需要生成一对非对称密钥,将私钥放在客户端,将公钥放在服务端,而ssh localhost的客户端和服务端都是本机.解决方法如下:
- 使用
ssh-keygen生成一对非对称密钥,默认情况私钥为id_rsa,公钥为id_rsa.pub,若将本机看做客户端,私钥无需更改位置即可使用 - 若将本机看做服务端,要将上步生成的公钥放入服务端的authorized_keys中,执行
cat id_rsa.pub >> authorized_keys即可
注:生成的密钥在/root/.ssh目录下,执行cat id_rsa.pub >> authorized_keys的当前目录也是/root/.ssh

此时再执行ssh localhost即可成功登陆.

总结
- 使用idea打jar包有两种方式,一为使用idea原始方法,一为使用maven插件
- 执行jar包有
java -jar和java -cp两种方式,其中java -cp可以在运行时指定Main-Class - root账户ssh登陆localhost除了修改
/etc/ssh/sshd_config的PermitRootLogin yes之外,若root账户无密码,则必须配置非对称密钥进行登录.
本文介绍了Hadoop在CentOS上的部署与运行过程中的常见问题及解决方案,包括使用IDEA和Maven打包Java应用程序的方法、Java执行jar包的不同方式以及SSH权限配置问题的解决办法。
2510

被折叠的 条评论
为什么被折叠?



