免密钥配置
SSH是什么?
SSH为Secure Shell的缩写,是为建立在应用层和传输层基础上的安全协议。SSH专为远程登录会话和其他网络服务提供安全性的协议,常用于远程登录。也就是说,SSH是用来远程操作Linux系统下的服务器的。
接下来我们进行安装SSH:
在终端命令行执行:rpm -qa | grep “ssh”,执行结果请看下图,说明已经安装;其实在安装linux操作系统的时候默认就会安装上的。
如果SSH服务没有安装怎么办?找到操作系统镜像文件解压,找到ssh相关的包,上传到服务器然后执行如下安装命令安装即可rpm -ivh rpm包名如果服务器挂载了镜像,可以直接采用如下命令安装也可以yum install ssh
这里因为小编的linux服务器已经安装SSH,就不在做安装操作了。
启动命令service sshd start
停止命令service sshd stop
重启命令service sshd restart
首先我们来看看SSH服务是否启动了,请执行如下命令即可service sshd status
怎么查看SSH端口是多少?
执行如下命令more /etc/ssh/sshd_config就可以查看到有说明,默认端口为22
另外端口是可以修改的
配置免密钥
在192.168.1.191上执行ls -l命令
ssh root@192.168.1.191 ‘ls -l’
可以看到需要输入password,下面进行免密钥配置
下面配置免密钥
在主机上配置,生成公钥和私钥
ssh-keygen -t rsa -P ‘’ -f ~/.ssh/id_rsa
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
chmod 0600 ~/.ssh/authorized_keys 这里看实际情况可以不写
将公钥拷贝到其他机器,如果其他机器没有.ssh目录。 ssh localhost 便会出来
scp id_rsa.pub node02:/root/.ssh/node01.pub
在其他机器的 authorized_keys中追加公钥
cat node01.pub >> authorized_keys
再次ssh root@192.168.1.191 ‘ls -l’ 变不需要密码
hadoop集群搭建
- 配置java环境,上篇中有配置方法,验证java使用 jps 。追加配置信息在/etc/profile中
export PATH
export JAVA_HOME=/usr/java/jdk-11.0.3
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar
export HADOOP_HOME=/opt/hadoop-3.1.2
export PATH=$JAVA_HOME/bin:$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
(注意:PATH使用:英文冒号分割)
- 配置hadoop java环境,配置绝对路径
hadoop.env.sh
export JAVA_HOME=/usr/java/jdk-11.0.3
mapred-env.sh
export JAVA_HOME=/usr/java/jdk-11.0.3
yarn-env.sh
export JAVA_HOME=/usr/java/jdk-11.0.3
- 配置xml文件
在hadoop中的/etc下
core -site.xml
<property>
<name>fs.defaultFS</name>
<value>hdfs://node01:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-3.1.2/tmp</value>
</property>
(注意:hadoop3.X以前使用)
slaves
node02
node03
node04
(注意:hadoop3.X以后使用)
workers
node02
node03
node04
hdfs-site.xml
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node02:50090</value>
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop-3.1.2/tmp/dfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop-3.1.2/tmp/dfs/data</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
yarn-site.xml
<property>
<description>指定YARN的老大(ResourceManager)的地址</description>
<name>yarn.resourcemanager.hostname</name>
<value>192.168.1.190</value>
</property>
<!-- NodeManager上运行的附属服务。需要配置成mapreduce_shfffle,才可运行MapReduce程序默认值 -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<discription>每个节点可用内存,单位MB,默认8182MB</discription>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
mapred-site.xml
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
在hadoop中sbin下
start-dfs.sh
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_ZKFC_USER=root
HDFS_JOURNALNODE_USER=root
start-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
- 将hadoop复制到其他机器: scp -r ./hadoop-3.1.2/ node02:/opt/
- 格式化:hdfs namenode -format
- 启动:start-dfs.sh
- 启动yarn
${HADOOP_HOME}/sbin/yarn-daemon.sh start resourcemanager
${HADOOP_HOME}/sbin/yarn-daemon.sh start nodemanager
(注意,每次格式化清空tmp文件:保证id一致,否则手动更改name下id和data下id样子hi)
重新format需要清空缓存
rm -rf /opt/hadoop-3.1.2/tmp/dfs/name/
rm -rf /opt/hadoop-3.1.2/tmp/dfs/data/
mkdir /opt/hadoop-3.1.2/tmp/dfs/name/
mkdir /opt/hadoop-3.1.2/tmp/dfs/data
附加:
创建目录:hdfs dfs -mkdir -p /user/root
上传文件:hdfs dfs -put /root/test.txt /user/root
上传文件指定大小切片:hdfs dfs -D dfs.blocksize=1048576 -put /root/hadooptestdata.txt
阿里云linux sftp连接不上
- 重启sshd: /etc/init.d/sshd reload 或者service sshd restart
- vi /etc/ssh/sshd_config 去掉Subsystem sftp /usr/libexec/openssh/sftp-server前面#
注释掉
UsePAM yes
Match User test
ChrootDirectory /opt/download/
ForceCommand internal-sftp
AllowTcpForwarding no
X11Forwarding no
在重启sshd
hadoop3.X后的坑
- hdfs的web页面默认端口是9870 yarn的web页面端口是8088
- 配置文件中的slaves文件没了,变成了workers文件,在里面配置datanode节点
- 在进行namenode格式化是有几个Fail,不要因此怀疑自己,只要common.Storage: Storage directory /usr/local/hadoop-3.0.2/hdfs/name has been successfully formatted. 这个提醒是存在的就没有问题
- 在启动时,start-dfs.sh start-yarn.sh时报错
Starting namenodes on [namenode]
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
Starting datanodes
ERROR: Attempting to operate on hdfs datanode as root
ERROR: but there is no HDFS_DATANODE_USER defined. Aborting operation.
Starting secondary namenodes [datanode1]
ERROR: Attempting to operate on hdfs secondarynamenode as root
ERROR: but there is no HDFS_SECONDARYNAMENODE_USER defined. Aborting operation.
Starting resourcemanager
ERROR: Attempting to operate on yarn resourcemanager as root
ERROR: but there is no YARN_RESOURCEMANAGER_USER defined. Aborting operation.
Starting nodemanagers
ERROR: Attempting to operate on yarn nodemanager as root
ERROR: but there is no YARN_NODEMANAGER_USER defined. Aborting operation
注意是在文件开始空白处
start-dfs.sh
HDFS_DATANODE_USER=root
HADOOP_SECURE_DN_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root
HDFS_ZKFC_USER=root
HDFS_JOURNALNODE_USER=root
start-yarn.sh
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
- 注意jdk版本,一定不要使用jdk11,最好是jdk8,否则即使hadoop集群全部启动,namenode和datanode都没有错误,但是在上传读取文件时候都不能发现datanode,如下图