使用Xshell来连接虚拟机
通过VMware创建好虚拟机后(如何创建虚拟机查看此文章),进入到Centos中进行设置,开启ipv4地址,因为默认是关闭的,
没有修改前,输入ifconfig显示如下,没有192.168.121.147这样的地址出现
输入下面命令
cd /etc/sysconfig/network-scripts (进入网络设置目录)
vi ifcfg-ens33 (进入vim编辑器,编辑ifcfg-en33,修改BOOM no改成yes)
service network restart (重启网关)
然后输入ifconfig查看我们的IP地址,如下
接下来使用Xshell来连接我们的虚拟机,创建一个新会话,然后输入ipv4地址,点击连接
第一次连接会出现下面警告,点击 授权并保存
然后输入我们要登录的用户名,然后再输入用户密码
连接成功后显示如下,在Xshell中操作更加方便
在Xshell上操作安装Hadoop
这里我有三台虚拟机,分别是slave1,slave2,slave3, 我将slave1作为master,下面操作都是在slave1上操作配置,配置完成后通过scp 命令 传到slave2和slave3上去,三台虚拟机之间需要能相互通信,三台虚拟机之间相互通信查看
安装rz上传文件组件 ,用来上传压缩包
yum -y install lrzsz
安装vim编辑器,vim更好用些
yum -y install vim
安装openssh-server,配置ssh免密码登录,不然后面开启或关闭Hadoop时都需要输入密码
yum -y install openssh-server
cd ~/.ssh # 没有则创建这个.ssh文件夹
ssh-keygen -t rsa # 生成密钥,输入后一直回车即可
cat ~/.ssh/id_rsa.pub>>~/.ssh/authorized_keys # 添加授权
ssh localhost # 免密码登录
操作如下图所示
配置JDK
这里我将压缩包放到 /usr/local 下,如果要放到别的地方的话也可以,配置路径的时候将路径改下
cd /usr/local # 进入到local目录
rz # 上传文件目录,需要安装 lrzsz
如果上传不了,则使用 reboot 命令重启下系统
上传后ls查看下可以发现压缩包已经在local目录下了
接下来进行解压操作,解压后的名字挺长的,使用 mv 命令给文件夹进行重命名
tar -zxvf jdk-8u181-linux-x64.tar.gz # 解压文件
mv jdk1.8.0_181 jdk # 更改文件名
# 将jdk添加到环境变量
vim /etc/profile
# 末尾添加
export JAVA_HOME=/usr/local/jdk # 对应你的jdk路径
export PATH=$PATH:$JAVA_HOME/bin
source /etc/profile # 调用资源
java -version # 查看jdk版本
配置Hadoop
和JDK一样,上传,解压,配置
rz # 上传文件
tar -zxvf hadoop-2.7.6.tar.gz # 解压
mv hadoop-2.7.6 hadoop # 给解压后的文件进行重命名,这步看个人,可以改可以不改
rm -f hadoop-2.7.6.tar.gz # 删除压缩包
vim /etc/profile # 添加环境变量, 在最后添加下面内容
#hadoop
export HADOOP_HOME=/usr/local/hadoop
export PATH=.:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
source /etc/profile # 调用资源
hadoop version # 查看是否部署成功
PS:/etc/profile 文件要谨慎编辑,如果不小心改错了,那么大部分的命令都不能使用,可以使用下面命令重新编辑
/bin/vim /etc/profile
或者
/bin/vi /etc/profile
修改Hadoop中的一些文件
进入对应目录:cd hadoop/etc/hadoop 修改下面的 hadoop-env.sh, core-site.xml、hdfs-site.xml,yarn-site.xml,slaves,maqred-site.xml
修改hadoop-env.sh, 添加jdk路径
export JAVA_HOME=/usr/local/jdk
修改core-site.xml
<configuration>
<!--用来指定使用hadoop时产生文件的存放目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>file:/data/hadoop/tmp</value>
</property>
<!--指定namenode的地址,这里我指定为slave1-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://slave1:9000</value>
</property>
</configuration>
修改hdfs-site.xml
<configuration>
<!--如果是true则检查权限,否则不检查-->
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
<!--指定hdfs中namenode的存储位置-->
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/data/hadoop/tmp/dfs/name</value>
</property>
<!--指定hdfs中datanode的存储位置-->
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/data/hadoop/tmp/dfs/data</value>
</property>
<!--配置数据块副本的数量-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
</configuration>
修改yarn-site.xml
<configuration>
<!--指定YARN的ResourceManager的主机-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>slave1</value>
</property>
<!--NodeManager上运行的附属服务。需配置成mapreduce_shuffle,才可运行MapReduce程序-->
<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>604800</value>
</property>
<!--ResourceManager对外web ui地址。用户可通过该地址在浏览器中查看集群各类信息。默认端口8088-->
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>slave1:8088</value>
</property>
</configuration>
关于yarn-site.xml更详细的一些配置,如下所示:参考此文章
ResourceManager相关配置参数
<property>
<name>yarn.resourcemanager.address</name>
<value>hadoop001:8032</value>
</property>
ResourceManager 对客户端暴露的地址。客户端通过该地址向RM提交应用程序,杀死应用程序等
默认值:${yarn.resourcemanager.hostname}:8032
<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>hadoop001:8030</value>
</property>
参数解释:ResourceManager 对ApplicationMaster暴露的访问地址。ApplicationMaster通过该地址向RM申请资源、释放资源等。
默认值:${yarn.resourcemanager.hostname}:8030
<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>hadoop001:8088</value>
</property>
参数解释:ResourceManager对外web ui地址。用户可通过该地址在浏览器中查看集群各类信息。
默认值:${yarn.resourcemanager.hostname}:8088
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>hadoop001:8031</value>
</property>
参数解释:ResourceManager 对NodeManager暴露的地址。NodeManager通过该地址向RM汇报心跳,领取任务等。
默认值:${yarn.resourcemanager.hostname}:8031
<property>
<name>yarn.resourcemanager.admin.address</name>
<value>hadoop001:8033</value>
</property>
参数解释:ResourceManager 对管理员暴露的访问地址。管理员通过该地址向RM发送管理命令等。
默认值:${yarn.resourcemanager.hostname}:8033
<property>
<name>yarn.resourcemanager.scheduler.class</name>
<value>org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler</value>
</property>
参数解释:启用的资源调度器主类。目前可用的有FIFO、Capacity Scheduler和Fair Scheduler。
默认值:org.apache.hadoop.yarn.server.resourcemanager.scheduler.capacity.CapacityScheduler
还有:
yarn.resourcemanager.resource-tracker.client.thread-count
参数解释:处理来自NodeManager的RPC请求的Handler数目。
默认值:50
yarn.resourcemanager.scheduler.client.thread-count
参数解释:处理来自ApplicationMaster的RPC请求的Handler数目。
默认值:50
yarn.scheduler.minimum-allocation-mb/ yarn.scheduler.maximum-allocation-mb
参数解释:单个可申请的最小/最大内存资源量。比如设置为1024和3072,则运行MapRedce作业时,每个Task最少可申请1024MB内存,最多可申请3072MB内存。
默认值:1024/8192
yarn.scheduler.minimum-allocation-vcores / yarn.scheduler.maximum-allocation-vcores
参数解释:单个可申请的最小/最大虚拟CPU个数。比如设置为1和4,则运行MapRedce作业时,每个Task最少可申请1个虚拟CPU,最多可申请4个虚拟CPU。什么是虚拟CPU,可阅读我的这篇文章:“YARN 资源调度器剖析”。
默认值:1/32
yarn.resourcemanager.nodes.include-path /yarn.resourcemanager.nodes.exclude-path
参数解释:NodeManager黑白名单。如果发现若干个NodeManager存在问题,比如故障率很高,任务运行失败率高,则可以将之加入黑名单中。注意,这两个配置参数可以动态生效。(调用一个refresh命令即可)
默认值:“”
yarn.resourcemanager.nodemanagers.heartbeat-interval-ms
参数解释:NodeManager心跳间隔
默认值:1000(毫秒)
修改slaves文件
slaves文件里面记录的是集群里所有DataNode的主机名,slaves文件只作用在NameNode上面,比如我在slaves里面配置了
slave2
slave3
这个文件就相当于是一份关于 DN(DataNode)的白名单,只有在该名单上的主机才能被NN(NameNode)识别,配置slaves后,就能排除别的DN了,slaves文件中可以写主机名,也可以写ip地址,因为最终都是通过ip来判断的。
修改maqred-site.xml
# 该文件没有,所以复制一个模板 再做修改
cp mapred-site.xml.template mapred-site.xml
# 修改添加内容如下
<configuration>
<tconme>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
在上面操作都完成后,将/usr/local/hadoop(填写你自己的Hadoop的地址) 传给 slave2和slave3,配置对应的环境变量即可。
最后需要格式化namenode,只需要在slave1上格式化,然后在slave1上启动 start-all.sh
/usr/local/hadoop/bin/hdfs namenode -format
在slave1上 输入 start-all.sh 然后通过jps命令查看三台虚拟机的状态。
[root@slave1]# start-all.sh
[root@slave1]# jps
slave2 和 slave3 的状态如下,显示的是DataNode
PS:如果要想将NameNode和secondaryNameNode分开,分别放到不同主机上运行的话需要修改下面配置文件
创建 masters 文件,里面写入要将哪台主机作为secondaryNameNode的主机名,
这里我将secondaryNameNode放到 名为 master2的主机上运行。
修改core-site.xml文件,添加下面内容
<property>
<!--多长时间记录一次hdfs的镜像。-->
<name>fs.checkpoint.period</name>
<value>3600</value>
<description>The number of seconds between two periodic checkpoints.</description>
</property>
<property>
<!--一次记录多大的镜像,默认64M-->
<name>fs.checkpoint.size</name>
<value>67108864</value>
</property>
修改hdfs-site.xml,添加下面内容:
<property>
<name>dfs.http.address</name>
<value>master1:50070</value>
</property>
<!--设置secondaryNameNode-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>master2:50090</value>
</property>
这里我的master1上运行NameNode,master2上运行secondaryNameNode,如果你的主机名和我的不一样则改为你的主机名。
最后在master1上运行 start-all.sh ,五台虚拟机的运行状态如下: