云服务器---Hadoop集群完全分布式模式
- 1.配置环境
- 2.创建hadoop用户
- 3.修改主机名
- 4.设备之间的免密登录
- 4.1单机的免密登录
- 4.2多服务器的免密登录
- 5.安装jdk
- 6.安装Hadoop
1.配置环境
- 操作系统:Ubuntu 16.04 LTS
- jdk-8u171-linux-x64.tar.gz
- hadoop-2.7.3.tar.gz
- 云服务器若干
2.创建hadoop用户
- 添加hadoop用户
$ sudo adduser username #添加用户
$ ls /home #查看添加是否成功(这里以username为例添加)
- 输入sudo adduser (新创建的用户名) sudo,给新用户赋予管理员的权限。
$ sudo adduser hadoop sudo
效果如下图:(利用sudo su切换到新用户,如需要密码则表示成功了。)
- 以下是将hadoop用户赋予了root权限(这里可以跳过直接进行下一步)
$ sudo nano /etc/sudoers
学习一下nano命令的使用,这里使用nano+文件进行编辑,步骤为Ctrl+O进行保存,然后确定路径和文件名无误后点击enter,Ctrl+X退出。
3.修改主机名
- 查看主机名并修改主机名(这里我修改为:Master,其余从机同理修改为slave1和slave2…)
$ sudo nano /etc/hostname
- 修改主机名后需要重启一下主机名才会改变。
$ sudo reboot
4.设备之间的免密登录
4.1单机的免密登录
- 检查是否可以进行免密登录,使用ssh命令免密码登陆自己。
$ ssh localhost #测试是否设置过免密登录
- 检查是否有
.ssh
目录,若无则需要建立,并增加权限。
$ mkdir -p ~/.ssh #创建目录
$ chmod 700 ~/.ssh #修改目录的权限
- 创建master主机的密钥。
$ ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa #生成密钥对
#执行上面这条命令将会生成:私钥:id_rsa和公钥:id_rsa.pub
- 将密钥置入盒子(authorized_keys)里,并给它权限。
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys #将文件追加到盒子里
$ chmod 600 ~/.ssh/authorized_keys #增加权限
- 需要修改目录
/etc/ssh/sshd_config
配置文件,部分代码如下:
# Logging
SyslogFacility AUTH
LogLevel INFO
# Authentication:
LoginGraceTime 120
PermitRootLogin prohibit-password
StrictModes yes
RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile %h/.ssh/authorized_keys #公钥文件,根据情况去掉注释。
$ nano /etc/ssh/sshd_config
- 验证本地是否可以登录
$ ssh localhost #验证是否可以免密登陆
效果如图:
7. 验证成功后使用exit
退出当前用户。
4.2多服务器的免密登录
- 操作完单机的免密登录,多服务器(每一台服务器均需要执行单机免密登录的操作)需要登录上面执行单击免密登录的操作。建议每台服务器做完单机免密登录再继续分发公钥。
- 发送公钥:
id_rsa.pub
$ scp ~/.ssh/id_rsa.pub hadoop@slave1:~/ #分发公钥,若slave1没有修改映射需要填写真实的IP地址
- 追加密钥给
authorized_keys
,并给权限。
$ cat ~/id_rsa.pub >> ~/.ssh/authorized_keys
$ chmod 600 ~/.ssh/authorized_keys
同样的操作将其他的密钥也分别发给其他服务器。
另一做法是用盒子去挨个接收密钥,接收完之后然后再分发给其他服务器。
注意:如需要是slave1的格式需要执行主机映射。
- 修改主机映射
操作如下:
$ sudo nano /etc/hosts #修改映射
如果是在master上操作的话ip1 必须是master 的内网ip,同样其他slave上也是一样,自己的主机上的IP要改成内网IP,其他的要用外网IP。
效果如下:
3. 验证免密登录
#1.通过localhost验证
$ ssh localhost
$ exit
#2.通过ip地址验证
$ ssh ip地址 #例如:$ ssh 192.168.23.105
$ exit
#3.通过主机名称验证
$ ssh 主机名称 #例如:$ ssh master
$ exit
5.安装jdk
- 以下操作均是基于hadoop用户下的操作。
- jdk版本:云盘下载 提取码:yn1e
- 通过xftp、winscp等上传文件到云服务器。
- ubuntu 16.04
- 创建一个
soft
目录,将文件上传到该目录下面。
$ mkdir -p ~/soft #创建soft目录
$ ls ~/soft #查看目录
以下操作是基于你将这些文件存放到~/soft
的操作
- 解压到当前文件夹并创建软链接方便后面使用。
$ tar -zxvf jdk-8u171-linux-x64.tar.gz
$ ln -s jdk1.8.0_171 jdk #创建软链接
- 编辑环境变量
$ nano ~/.bashrc
在bashrc
后面添加环境变量,并保存退出。
export JAVA_HOME=~/soft/jdk
export JRE_HOME=${JAVA_HOME}/jre
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
export PATH=${JAVA_HOME}/bin:$PATH
- 使环境变量生效。
$ source ~/.bashrc
- 验证配置成功。
$ java -version #显示版本号等信息表示成功。
如下图:
6.安装Hadoop
- hadoop版本:hadoop-2.7.3.tar.gz 提取码:gcbh
- 上传文件到云服务器使用xftp、winscp等。
- ubuntu 16.04
- 通过xftp或者其他上传到
master
云服务器的~/soft
目录下面。
$ ls ~/soft/
- 解压gz包,并创建软链接使用。
$ tar -zxvf hadoop-2.7.3.tar.gz
$ ln -s hadoop-2.7.3 hadoop
效果如下:
- 查看
JAVA_HOME
的路径,拷贝后进行下一步。
$ echo $JAVA_HOME 查看JAVA_HOME的绝对路径
- 配置hadoop-env.sh环境
export JAVA_HOME=/home/hadoop/soft/jdk
#若后面格式化的时候找不到.../java就需要添加到jre
#export JAVA_HOME=home/hadoop/soft/jdk/jre
- 配置文件的修改,使用
cd ${HADOOP_HOME}/etc/hadoop
切换到配置文件所在目录。
-
core-site.xml
文件的修改
$ nano core-site.xml
在<configuration>标签中插入,修改好的代码如下:
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:8020</value>
<!-- 以上主机名要按实际情况修改 -->
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/home/hadoop/soft/hadoop/tmp</value>
</property>
</configuration>
附截图一张:
-
hdfs-site.xml
文件的修改如下:
$ nano hdfs-site.xml
在<configuration>标签中插入,修改好的代码如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
<!-- secondarynamenode主机名 -->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
<!-- namenode的web访问主机名:端口号 -->
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
</configuration>
附截图一张:
-
mapred-site.xml
文件修改
目录下没有对应的文件夹,但是有mapred-site.xml.template,可以将其重命名使用,但是建议另外cp一下。
$ cp mapred-site.xml.template mapred-site.xml #更名为mapred-site.xml,原有文件依然存在。
- 配置文件的修改如下:
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
</configuration>
- 配置
yarn-site.xml
文件
$ nano yarn-site.xml
配置文件的修改如下:
<property>
<name>yarn.resourcemanager.hostname</name>
<value>slave2</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>86400</value>
</property>
</configuration>
注意:以上操作都需要在hadoop文件目下才能操作。
- 分发文件
$ scp -r hadoop-2.7.3 slave1:$PWD
#拷贝的时间较长建议休息一下。
$ scp -r hadoop-2.7.3 slave2:$PWD
- 指定集群slaves配置
$ nano slaves
添加一下内容
slave1
slave2
- 格式化
Namenode
需要谨慎操作
$ hdfs namenode -format
格式化只需要进行一次,以后启动hadoop前不需要再次格式化。若后续启动有问题出现,需要执行格式化操作需要把所有服务先停止:stop-all.sh
格式成功后的界面如下:出现status 0表示成功,其他如status 1表示不成功。
温馨小提示——第一次可以跳过温馨提示
多次格式化:导致启动时缺少Datanode,再格式化后导致ID不符合两个我们需要去修改CID,保证name和data的CID一致。
操作如下(具体路径需要看自己的服务器仅供参考):
1、查看后复制:nano /home/hadoop/soft/hadoop-2.7.3/tmp/dfs/name/current/VERSION
2、修改data:nano /home/hadoop/soft/hadoop-2.7.3/tmp/dfs/data/current/VERSION
将name的CID------------>data的CID
- 启动集群
- 在
master
上使用如下命令启动HDFS
$ sbin/start-dfs.sh
- 在slave2上使用如下命令启动YARN
$ sbin/start-yarn.sh
停止进程:
$ sbin/start-yarn.sh # 在slave2上使用如下命令停止YARN
$ sbin/stop-dfs.sh # 在master上使用如下命令停止HDFS
- jps
- 通过web段访问端口
- master公网IP:50070
云服务器的端口需要开放才能访问。
- slave2公网IP:8088端口
- 快乐是码起来的!