开山
规划说明:
正常的集群部署规划
NameNode和 SecondaryNameNode(次要)的内存占用是一比一,所以尽量不要将这两个组件放在一个节点上
hdfs包括三个组件: NamoNode, DataNode, SecondaryNameNode
yarn包括两个组件:NodeManager,ResourceManager(这个组件是资源管理的老大,占用内存也很高,所以要避开NameNode和SecondaryNameNode)
但是为了达到最简最方便,我们这样部署集群
准备步骤:
- 开启虚拟机,并设置静态ip
vi /etc/sysconfig/network-scripts/ifcfg-ens33
1. 进入后将BOOTPROTO改为static,就是将IP分配模式从dhcp改为静态
2. 然后将ONBOOT改为yes,就是将网卡设置为开机启用
3. 然后在下方添加
1. IPADDR=静态ip
2. GATEWAY=默认网关
3. NETMASK=子网掩码
4. DNS1=第一个dns地址
5. DNS2=第二个dns地址
4. 然后:esc+:wq保存退出
5. 重启网络:service network restart
6. 查看ip:ip addr
7. 测试网络是否连通:ping
- 更改主机名称
hosenamectl set-hostname 主机名称
- 更改ip主机名称映射文件
vi /etc/hosts
#此处我们可以采用分发,这个配置文件需要更新
- 关闭防火墙,并且关闭防火墙开机自启动
#查看防火墙状态
systemctl status firewalld
#关闭防火墙
systemctl stop firewalld
#关闭防火墙开机自启动
systemctl disable firewalld
#注意:关闭防火墙开机自启动必须在关闭防火墙后才能设置
- 设置ssh免密登陆
#生成公钥和私钥
ssh-keygen -t rsa
#拷贝公钥到主机
ssh-copy-id 主机名或ip
#三个主机需要互相拷贝,自己也要给自己拷贝一份
- 然后用Xshell连接上,将jdk.tar.gz和hadoop.tar.gz传输到虚拟机上并解压
#解压
tar xvf jdk -C 路径
分布式正式搭建
说明:
下面是我们搭建集群需要配置的文件,我们在master上面配置好,然后分发到slave1和slave2上面,我们这次就不用单点启动,直接群起.
(这两种方式只是命令的不同,单点启动已经过时,不过新的命令也只是在老命令上面做了一层封装),
这些配置文件都在hadoop-x.x.x/etc/hadoop/下
hdfs:分布式文件系统
yarn:包(资源)管理系统
MapReduce:数据分布浅清洗
- hdfs配置
- hadoop-env.sh
- core-site.xml
- hdfs-site.xml
- yarn配置
- yarn-env.sh
- yarn-site.xml
- MapReduce配置
- mapred-env.sh
- mapred-site.xml
- slave配置
详细步骤
为了之后的配置方便,我们事先在/root/下写好一个模板
命令: vi /root/tempalte <property> <name></name> <value></value> </property> #之后我们可以在vi的命令模式下,通过 :r ~/template来拉取模板
注意:下面配置的xml文件标签对中,不能出现空格
配置环境变量:
我们解压好hadoop和jdk之后,然后我们配置环境变量,
vi /etc/profile.d/java.sh
vi /etc/profile.d/hadoop.sh
#也可以为了方便将两个文件的内容合为一个
#例如:vi /etc/profile.d/jdk-hadoop.sh
#内容:
export JAVA_HOME=jdk真实路径
export PATH=$PATH:$JAVA_HOME/bin
export HADOOP_HOME=hadoop真实路径
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
#注意:hadoop下有bin和sbin,这两个都是库,我们需要都配置上
配置好环境变量后我们进行测试
#在测试之前我们更新一下配置文件
source /etc/profile.d/jdk-hadoop.sh
#然后我们测试命令
配置slaves:这是数据节点集合(有几个数据节点,就添加几个)
在配置这个文件的时候:请特别注意:不允许有空行,文末不允许有空格
master
slave1
slave2
hdfs:
- hadoop-env.sh
配置JAVA_HOME的真实路径
- core-site.xml
指定hdfs中的NameNode的地址
<property>
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
指定hadoop运行是产生文件的存储路径
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop-x.x.x/data/data-tmp</value>
</property>
- hdfs-site.xml
指定数据的副本数量
<property>
<name>dfs.replication</name>
<value>3</value>
</property>
指定secondarynamenode节点地址
<property>
<name>dfs.namenode.secondary.http-address </name>
<value>master:50090</value>
</property>
yarn:
- yarn-env.sh
配置JAVA_HOME的真实地址
- yarn-site.xml
指定数据的获取方式
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
yarn的资源管理器的地址
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
MapReduce:
- mapred-env.sh
配置JAVA_HOME的真实地址
- mapred-site.xml
指定资源处理运行在yarn上
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
配置文件分发
好了,现在我们就配置完成了,但是我们只是配置了master,另外两台机器并没有配置文件,这里我们通过master将配置文件分发过去
#将配置文件发给slave1
scp -r /opt/hadoop-x.x.x/etc/hadoop/ slave1:/opt/hadoop-x.x.x/etc/hadoop/
群雄并起
接下来我们就可以开启集群了,不过在开启集群之前我们需要格式化一下namenode
#第一次启动格式化,以后就不要总格式化, 如果不是第一次格式化,那么就需要停掉进程,然后rm掉data和logs文件,然后再进行格式化
#原因:我们在格式化的时候会生成一个namenodeID,如果我们不删除掉data和logs的话,那么第二次格式化的时候会又生成一个ID,当机器对照ID的时候就会报错
hdfs namenode -format
烽火狼烟
这个时候就可以正式启动集群了
先启动hdfs
#此处我们采用简单的集成命令 start-dfs.sh #启动之后用jps(Java ps)查看进程,三个机器都要查看
然后我们启动yarn
#此处我们采用简单的集成命令 start-yarn.sh #启动之后用jps(Java ps)查看进程,三个机器都要查看
接下来进入浏览器查看一下
进入master的50090端口查看hdfs是否成功
进入master的8088端口查看yarn是否成功
奉诏讨贼
这个时候我们就可以进行集群的基本测试了
创建文件夹
hdfs dfs -mkdir -p /user/root/input
上传文件
hdfs dfs -put /tmp/ /
列出文件
hdfs dfs -ls /
删除文件
hdfs dfs -rm -r /user/root/input
使用wordcount
hadoop jar /opt/hadoop-2.6.0/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.6.0.jar wordcount /input output
错误点:
上传文件的时候出现了: Name node is in safe mode.
这是因为现在hadoop的文件系统处于安全模式,我们一般等一会儿就好
,但是我们是不能等的,圣上的性命危在旦夕,这个时候我们就需要手动关闭
hadoop dfsadmin -safemode leave
然后我们重新上传就好