Hadoop-Hadoop入门若干问题

背景

近日在看Hadoop相关内容,由于是入门,遇到一些问题,现记录如下.
软件环境:使用腾讯云服务器,操作系统为centos 7.4 64位.

Java打包问题

打包方式

由于Hadoop并不支持windows操作系统,因此学习思路是在windows上将代码打为jar包,上传至centos云服务器进行运行.打包方式有如下两种:

  1. 使用idea原生打包方式
  2. 使用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登录,因此将此配置项修改即可.

  1. 打开/etc/ssh/sshd_config,将PermitRootLogin without-password修改为PermitRootLogin yes
  2. 使用systemctl restart sshd.service重启sshd服务

但修改配置后执行ssh localhost仍然拒绝登录,如下:
这里写图片描述
在这个地方我卡了很久,因为以上的内容都可以在网上找到资料,执行上述步骤后一般都已解决问题.刚好学习过网络安全方面的内容,对ssh使用的非对称加密有些了解,此时我便使用自己购买的另一台阿里云服务器,在阿里云服务器上使用ssh登录腾讯云服务器,终于发现了问题所在.
在腾讯云服务器重装系统时有两种选项登录

  1. 使用账户密码登录
  2. 使用ssh登录

我的腾讯云服务器选择的是ssh登录,因此我的root账户是没有密码的,而ssh localhost默认使用密码登录,这就产生了冲突,因此失败.
如果把尝试登录的计算机称为客户端,把被登录的计算机称为服务端,那么ssh登录需要生成一对非对称密钥,将私钥放在客户端,将公钥放在服务端,而ssh localhost的客户端和服务端都是本机.解决方法如下:

  1. 使用ssh-keygen生成一对非对称密钥,默认情况私钥为id_rsa,公钥为id_rsa.pub,若将本机看做客户端,私钥无需更改位置即可使用
  2. 若将本机看做服务端,要将上步生成的公钥放入服务端的authorized_keys中,执行cat id_rsa.pub >> authorized_keys即可
    注:生成的密钥在/root/.ssh目录下,执行cat id_rsa.pub >> authorized_keys的当前目录也是/root/.ssh
    这里写图片描述

此时再执行ssh localhost即可成功登陆.
这里写图片描述

总结

  1. 使用idea打jar包有两种方式,一为使用idea原始方法,一为使用maven插件
  2. 执行jar包有java -jarjava -cp两种方式,其中java -cp可以在运行时指定Main-Class
  3. root账户ssh登陆localhost除了修改/etc/ssh/sshd_configPermitRootLogin yes之外,若root账户无密码,则必须配置非对称密钥进行登录.

参考

猜你喜欢

转载自blog.csdn.net/jpf254/article/details/79794627