Hadoop完全分布式部署
环境配置
Vmware Workstation 15.0 + CentOS 7.0
Jdk-1.8.0 + Hadoop-2.7.7
Eclipse Java EE IDE for Web Developers 2018-09
XShell + Xftp
以上全部从官网安装
hadoop-eclipse-plugin-2.7.7.jar
安装CentOS
- 正常安装流程
- 关闭防火墙
systemctl stop firewalld.service
- jdk配置过程
原因在于自带的openjdk没有jps,所以需要更换。
#搜索jdk包
rpm -qa|grep jdk
#一个个删除
rpm -e --nodeps xxxxx
#验证删除干净
java -version
#解压jdk,并设置路径
vim /etc/profile
export JAVA_HOME="/opt/jdk1.8.0_251"
export PATH=$JAVA_HOME/bin:$PATH
#配置生效
source /etc/profile
集群配置
- 克隆虚拟机并配置网络
此时是最容易出错的地方。克隆后先配置静态IP地址,主机地址为192.168.195.1,所以采取设置为同网段,方便后续的管理连接。同时为了保证顺畅,最好把内存都调成2G左右。然后根据该配置进行调整。
master | 192.168.195.181 |
---|---|
slave1 | 192.168.195.182 |
slave2 | 192.168.195.183 |
#删除规则
cd /etc/udev/rules.d/
rm -f 70-persistent-ipoib.rules
#具体路径根据自己虚拟机的网卡选择
vim /etc/sysconfig/network-scripts/ifcfg-ens33
此处主要更改BOOTPROTO=static;添加HWADDR为MAC地址;删除UUID那一行,其用于唯一识别设备;ONBOOT=yes。
- 主机名修改与配置
#指定主机名
hostnamectl set-hostname xxxx(如master)
#文件内修改主机名
vim /etc/sysconfig/network
NETWORKING=yes
HOSTNAME=xxxx
#写全映射
vim /etc/hosts
192.168.195.181 master
192.168.195.182 slave1
192.168.195.183 slave2
#重启网络
service network restart
- 设置ssh免密登录,在每个节点对其他节点都操作一次
ssh-keygen
cd ~
ssh-copy-id -i .ssh/id_rsa.pub object#object为root@指定的主机名
- hdfs环境配置
解压hadoop,然后修改几个路径。此时都在master节点操作。
vim /etc/profile
export HADOOP_HOME="/opt/hadoop-2.7.7"
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH
#接下来修改hadoop路径
cd /opt/hadoop-2.7.7/etc/hadoop/
vim hadoop-env.sh
export JAVA_HOME="/opt/jdk1.8.0_251"
export HADOOP_HOME="/opt/hadoop-2.7.7"
export HADOOP_CONF_DIR="/opt/hadoop-2.7.7/etc/hadoop"
<!--接下来的xml都在当前目录下。core-site.xml-->
<configuration>
<property>
<!--HDFS address,namenode节点-->
<name>fs.defaultFS</name>
<value>hdfs://master:9000</value>
</property>
<!--Hadoop tmp directory,存储dfs数据-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/data/tmp</value>
</property>
</configuration>
<!--hdfs-site.xml-->
<configuration>
<!--namenode http,web界面-->
<property>
<name>dfs.namenode.http-address</name>
<value>master:50070</value>
</property>
<!--辅助节点设置,此时如果设置为master,
则master将兼任namenode与secondary node-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>slave1:50090</value>
</property>
<!--namenode path-->
<property>
<name>dfs.namenode.name.dir</name>
<value>/opt/data/namenode</value>
</property>
<!--datanode path-->
<property>
<name>dfs.datanode.data.dir</name>
<value>/opt/data/datanode</value>
</property>
<!--number of back,根据具体需要设置副本数目-->
<property>
<name>dfs.replication</name>
<value>2</value>
</property>
<property>
<name>dfs.permissions</name>
<value>false</value>
</property>
</configuration>
<!--mapred-site.xml-->
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>
/opt/hadoop-2.7.7/etc/hadoop,
/opt/hadoop-2.7.7/share/hadoop/common/*,
/opt/hadoop-2.7.7/share/hadoop/common/lib/*,
/opt/hadoop-2.7.7/share/hadoop/hdfs/*,
/opt/hadoop-2.7.7/share/hadoop/hdfs/lib/*,
/opt/hadoop-2.7.7/share/hadoop/mapreduce/*,
/opt/hadoop-2.7.7/share/hadoop/mapreduce/lib/*,
/opt/hadoop-2.7.7/share/hadoop/yarn/*,
/opt/hadoop-2.7.7/share/hadoop/yarn/lib/*
</value>
</property>
</configuration>
<!--yarn-site.xml-->
<configuration>
<!-- Site specific YARN configuration properties -->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>master</value>
</property>
<property>
<description>The http address of the RM web application.</description>
<name>yarn.resourcemanager.webapp.address</name>
<value>${yarn.resourcemanager.hostname}:8088</value>
</property>
<property>
<description>The address of the applications manager interface in the RM.</description>
<name>yarn.resourcemanager.address</name>
<value>${yarn.resourcemanager.hostname}:8032</value>
</property>
<property>
<description>The address of the scheduler interface.</description>
<name>yarn.resourcemanager.scheduler.address</name>
<value>${yarn.resourcemanager.hostname}:8030</value>
</property>
<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>${yarn.resourcemanager.hostname}:8031</value>
</property>
<property>
<description>The address of the RM admin interface.</description>
<name>yarn.resourcemanager.admin.address</name>
<value>${yarn.resourcemanager.hostname}:8033</value>
</property>
</configuration>
- 配置同步:使用scp命令拷贝文件夹
- 集群格式化并启动
hdfs namenode –format
#如果结果返回0说明成功格式化,否则根据报错更改错误
cd /opt/hadoop-2.7.7/sbin
start-dfs.sh && start-yarn.sh
#如果只开启了dfs则会没有manager后缀的jps
web查看
在主机建立映射,则可以在主机访问web页面
访问web的端口参照上面配置的内容
可以看到当前的节点状态
这边记录了dfs数据的情况,与linux上查看的内容一致
eclipse连接
必须使用管理员模式运行,不然运行程序时会报错。配置hadoop时参照端口与web页面一致
尝试运行网上代码的一次结果。
结语
基本的配置到这里就结束了。
本来是参考这篇文章在windows上部署的,但是后期发现网上基本上都是单节点的部署,还需要后期自己添加ip并添加节点。
然后尝试了使用docker来搭建。虽然成功搭起了分布式集群而且也方便,但是可能因为防火墙以及组网配置的问题,导致主机ping不通内网的容器,修改了很久也没改成。不过感觉这种应该是最好的实验环境,可以具体参照这篇文章进行理解。但有个点在于每次重启都要重新配置环境,不写脚本还是比较麻烦的。
最后贴两个不错的文章:
https://www.cnblogs.com/edisonchou/p/edc_hadoop_study_series_index.html
https://www.cnblogs.com/along21/p/10496468.html