使用3台虚拟机完成Hadoop分布式部署
1. 准备集群环境使用其中一台为Master节点,另外两台为Slave 节点部署一个真正的Hadoop分布式集群,集群有三台虚拟机节点:(1)服务器: node01(Master,namenode),192.168.110.109(假设IP地址)(2)服务器: node02(Slave,datanode) ,192.168.110.110(假设IP地址)(3)服务器: node03(Slave,d
文章目录
使用其中一台为Master节点,另外两台为Slave 节点。
部署一个真正的Hadoop分布式集群,集群有三台虚拟机节点:
(1)服务器: node01(Master,namenode),192.168.110.69(假设IP地址,需要根据自己的修改)
(2)服务器: node02(Slave,datanode) ,192.168.110.70(假设IP地址,需要根据自己的修改)
(3)服务器: node03(Slave,datanode) ,192.168.110.71(假设IP地址,需要根据自己的修改)
1. 准备集群环境
1.1 修改机器的hostname
$ vim /etc/hostname
node01
#其他两台机器上分别修改成 node02 和 node03
1.2修改虚拟机中网卡1的网络配置
#如何查看每台机器的ip地址
$ ip a
这里看到ens35 网卡的有一行 inet 后面跟的就是ip地址 192.168.110.69
其他两台机器也是如此查看,并将地址映射写入node01的文件中。
$ vim /etc/sysconfig/network-scripts/ifcfg-enp0s3
TYPE=Ethernet
PROXY_METHOD=none
BROWSER_ONLY=no
BOOTPROTO=none #这也可以改成static静态IP
DEFROUTE=yes
IPV4_FAILURE_FATAL=no
IPV6INIT=yes
IPV6_AUTOCONF=yes
IPV6_DEFROUTE=yes
IPV6_FAILURE_FATAL=no
IPV6_ADDR_GEN_MODE=stable-privacy
NAME=enp0s8
UUID=1a83ed44-8afe-441a-bc49-9285064a658b
DEVICE=enp0s8
ONBOOT=yes
IPADDR=192.168.110.69 #根据IP地址修改
PREFIX=24
GATEWAY=192.168.110.2 #根据情况修改 自己所在的网段。
DNS1=114.114.114.114
IPV6_PRIVACY=no
1.3 添加域名映射
$ vim /etc/hosts
将里面内容修改为三台虚拟机的地址映射
192.168.110.69 node01
192.168.110.70 node02
192.168.110.71 node03
1.4 关闭防火墙(避免不必要的实验干扰)
$ vim /etc/selinux/config
将文件里的SELINUX改为disable
SELINUX=disabled
1.5 安装 JDK:去Oracle官网下载一个
Linux java下载地址
#可以选择安装JDK1.8的某个版本,如 jdk-8u77-linux-x64.tar.gz
#解压到想要安装的目录,假设/opt/modules目录下
此处的文件名根据自己下载的更改或者直接按Table 键补全。
$ tar -zxvf jdk-8u77-linux-x64.tar.gz -C /opt/modules
$ vim /etc/profile # 添加环境变量
export JAVA_HOME="/opt/modules/jdk1.8.0_77"
export PATH=$ JAVA_HOME/bin:$PATH
$ source /etc/profile # 启用环境变量
$ java -version # 测试安装是否成功
安装成功 显示了版本号,如果本机之前自带了openJDK,需要先卸载。
Linux如何卸载Openjdk 安装oracle JAVA
1.6 配置 master 和 slave 之间的免密登录
master和slave之间账户密码通讯比较麻烦,采用公玥私玥免密登陆可以避免这种弊端。方法就是在master端生成一个密钥对,然后将公玥发送给slave端,将来slave访问master的时候带上公玥即可验证自己的身份。
# 1. 在 master 端生成密钥对
$ cd ~/.ssh
$ ssh-keygen -t rsa
# 2. 在 master 端将公钥 id_rsa.pub 追加到授权的 key 中
$ touch ~/.ssh/authorized_keys
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 3. 在 master 端将公玥发送给 slave
$ scp ~/.ssh/id_rsa.pub node02:~/.ssh
$ scp ~/.ssh/id_rsa.pub node03:~/.ssh
# 4. 在 slave 端(node02和node03上)将公玥追加到授权的 key 中
$ touch ~/.ssh/authorized_keys
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
2. 在master上下载安装Hadoop(假设 hadoop-2.10.0.tar.gz)
清华大学镜像下载HADOOP
下面的版本名根据自己下载的版本号更改。
# 1. 解压缩安装文件到期望的安装目录,假设/usr/local目录
$ tar –zxvf hadoop-2.10.0.tar.gz -C /usr/local
$ cd /usr/local
$ mv hadoop-2.10.0 hadoop
$ chown -R usrname:usrgroup ./hadoop #若非root用户则需要
# 2. 检查 Hadoop是否可用
$ cd /usr/local/hadoop
$ ./bin/hadoop version
3. 修改配置文件(在hadoop/etc/hadoop目录下)
slaves
core-site.xml
hdfs-site.xml
mapred-site.xml
yarn-site.xml
3.1 修改slaves文件
$ vim etc/slaves
node02
node03
3.2 修改core-site.xml文件
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://node01:8020</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>file:/usr/local/hadoop/tmp</value>
<description>Abase for other temporary directories.</description>
</property>
</configuration>
3.3 修改hdfs-site.xml文件
<configuration>
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node01:50090</value>
</property>
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.namenode.name.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/name</value>
</property>
<property>
<name>dfs.datanode.data.dir</name>
<value>file:/usr/local/hadoop/tmp/dfs/data</value>
</property>
</configuration>
# HDFS采用冗余存储,冗余因子通常为3,即一份数据保存三份副本。这里设置为2,因为
# 只有两个 DataNode 节点。
3.4 修改mapred-site.xml文件
此处要将之前的.template 文件复制一份成.xml结尾的
$ cp mapred-site.xml.template mapred-site.xml
$ vim mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.jobhistory.address</name>
<value>node01:10020</value>
</property>
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node01:19888</value>
</property>
</configuration>
#mapreduce 使用 yarn 做资源调度。
3.5 修改yarn-site.xml文件
<configuration>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>node01</value>
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
#yarn.resourcemanager.hostname 指定Resourcemanager运行在哪个节点上。
4. 在master节点上将配置好的Hadoop软件分发到集群其他节点上。
由于刚才配置过了密钥对,现在可以直接使用scp从一个节点复制文件到另一个节点。
cd /usr/local
$ scp -r hadoop node02:/usr/local/
$ scp -r hadoop node03:/usr/local/
$ chown -R username:usergroup hadoop #非root用户
5. 在master 和任何想要直接运行Hadoop命令的节点上配置PATH环境变量。
# 配置 PATH 路径,在任何目录下都可以执行Hadoop命令,无需输入路径。
$ vim /etc/profile
export HADOOP_HOME="/usr/local/hadoop"
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
$ source /etc/profile
6. 启动 Hadoop
# 删除之前Hadoop的遗留临时和日志文件(如果有的话)
rm -rf /usr/local/hadoop/tmp/*
rm -rf /usr/local/hadoop/logs/*
#首次启动Hadoop集群,必须在Master节点执行NameNode格式化
$ hdfs namenode -format
# 启动 HDFS、yarn、historyserver
$ start-dfs.sh
$ start-yarn.sh
$ mr-jobhistory-daemon.sh start historyserver
#相应的停止命令就是把start换成stop,stop-dfs.sh/stop-yarn.sh/mr-jobhistory-daemon.sh stop historyserver
# jps 查看进程,观察启动是否成功,缺少任一进程都表示出错。
# Master节点:NameNode、SecondaryNameNode、JobHistoryServer、ResourceManager(yarn进程)
# Slave节点:DataNode、NodeManager(yarn进程)
7. 通过Web界面查看 Hadoop 集群状况
地址: http://node01:50070
可以查看名称节点和数据节点的状态,若不成功可以通过启动日志排查原因。
8. 运行 mapreduce 作业
# 上传数据到HDFS中
$ hdfs dfs -mkdir /input
$ hdfs dfs -put /usr/local/hadoop/etc/hadoop/*.xml input
#运行mapreduce作业
$ hadoop jar /usr/local/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-*.jar grep input output 'dfs[a-z.]+’
# 查看作业运行的结果
$ hdfs dfs -ls /output
$ hdfs dfs -cat /output/part-r-00000
dfsadmin
dfs.replication
dfs.namenode.secondary.http
dfs.namenode.name.dir
dfs.datanode.data.dir
9. 通过Web界面查看 YARN 集群的运行情况
http://node01:8088/cluster
更多推荐
所有评论(0)