前言
这次把hadoop集群讲解分为三部分叙述,第一步规划集群结构,然后始搭建集群,最后运行集群。以下开始说明:
规划集群结构
这部分内容我会从操作系统选型,hadoop版本,jdk版本等说明。
操作系统选型:ubuntu16.04 Desktop版 内存:4G Cpu:2核2线程 数量:3台
hadoop版本:hadoop 3.1.2
jdk版本:openjdk 1.8.0_242
其它:ubuntu镜像源(可选)
这一步操作纯粹是方便ubuntu系统更易于使用。由于开发过程中我们会用到一些工具,如ssh,vim,pdsh,jdk等,这些开源工具可以通过apt工具下载,但是我们安装好ubuntu系统后它自带的源在国外,因国内防火墙原因,其下载速度极慢,所以我建议更换其镜像源为国内源,我选择的是清华源。为防止本文档内容过于膨胀,我把它整理后放到配置文件夹中,大家需要自取。
更新源方法:
我还是分三步说明。
第一步:替换系统自带的镜像源
终端执行命令:sudo cp Tinghuasources.list /etc/apt/sources.list
(注意Tinghuasources.list文件位置,它存在当前终端目录下)
第二步:更新镜像源
终端执行命令:sudo apt-get update
第三步:使用镜像源
终端使用命令:sudo apt-get upgrade
集群搭建
老规矩,三步走。第一步搭建一台可运行的单节点;第二步搭建另外两台;第三步启动hadoop集群
第一步 搭建一台可运行的单节点
1. 配置 hosts、hostname、IP、新增用户
从规划好的三台ubuntu 16.04 Desktop 节点中任选一台作为Master节点,其余两台为Slave节点,这一步的所有操作均针对于Master节点操作。
(1)修改hostname
终端执行命令:sudo echo "hadoopnode1" >/etc/hostname
(2)修改hosts
终端执行命令:sudo gedit /etc/hosts
添加如下内容:
172.16.23.161 hadoopnode1
172.16.23.162 hadoopnode2
172.16.23.163 hadoopnode3
(3)修改IP
这里我们把IP设置为局域网(该环境可以提供给局域网内其他人访问)。虚拟机的的网络设置改为桥接模式。然后通过ubuntu系统设置页面根据hosts指定的IP进行手动设置。
(4)新增用户
终端执行命令1:sudo groupadd hadoop
终端执行命令2:sudo useradd -m -s /bin/bash -g hadoop hadoop
终端执行命令2:sudo passwd hadoop (根据提示输入密码)
(5)重启系统
终端执行命令:sudo reboot
然后以hadoop用户登录
2. 配置 SSH
(1)安装相关软件
终端执行命令:sudo apt-get install -y vim openssh-server pdsh
(2)配置免密登录
终端执行命令1:ssh-kengen -t rsa -P ' ' -f ~/.ssh/id_rsa
终端执行命令2:cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
终端执行命令3:ssh localhost (如果不用输入密码可配置成功)
3. 配置 jdk
(1)安装openjdk
终端执行命令1:sudo apt-get install openjdk-8-jdk -y
终端执行命令2:java -version (如果在终端能看到java版本则安装成功)
其它:JAVA_HOME =/usr/lib/jvm/java-8-openjdk-amd64
4. 关闭防火墙
终端执行命令1:sudo systemctl disable ufw.service
终端执行命令2:suod service ufw stop
5. 下载、解压 Hadoop
终端执行命令1:sudo chown hadoop:hadoop /opt
终端执行命令2:tar -zxvf hadoop-3.1.2.tar.gz /opt/
6. 修改配置文件
(1)修改配置文件core-site.xml
终端执行命令:echo "export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64" >> hadoop-env.sh (注意执行该命令的位置,在解压后的hadoop下的etc/hadoop/中)
(2)修改配置文件core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost:9000</value>
</property>
</configuration>
(3)修改配置文件hdfs-site.xml
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
(4)修改配置文件mapred-site.xml
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/*:$HADOOP_MAPRED_HOME/share/hadoop/mapreduce/lib/*</value>
</property>
</configuration>
(5)修改配置文件yarn-site.xml
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
(6)在 /etc/profile末尾添加如下内容
#hadoop home
export HADOOP_HOME=/opt/hadoop/hadoop-3.1.2
export HADOOP_CONF_DIR=${HADOOP_HOME}/etc/hadoop
export HADOOP_CLASSPATH=`${HADOOP_HOME}/bin/hadoop classpath`
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
然后终端执行命令:source /etc/profile
7. 启动单节点
启动hadoop服务
终端执行命令:hadoop namenode -format
终端执行命令:start-all.sh
验证环境是否可用:
http访问hadoopnode1:8088
http访问hadoopnode1:9870
停止hadoop服务
终端执行命令:start-all.sh
第二步 搭建另外两台节点
1. 克隆ubuntu
由于这次环境搭建和前两次稍有区别,前两次克隆用于当前系统的VMware,这次克隆的虚拟机要用于其他VMware。不同VM版本可能出现兼容问题,但是重新装ubuntu系统并对其进行配置也比较耗时,综上考虑,采用克隆方式更节约时间。
(1)修改集群配置
这次也要修改core-site.xml,hdfs-site.xml,yarn-site.xml,mapred-site.xml,master,worker等文件,这部分配置文件内容比较多,不适合在word文档中展示,我已经整理到一个文件夹中,大家使用时直接拿去替换到当前配置即可,然后根据自己的集群布局进行关键变量的修改,如主从节点名,安装路径,环境变量,通信端口等。
(2)拷贝搭建好的环境到另外两台
用其它VMware系统打开该环境
2. 设置IP
配置节点IP,根据自己的集群布局来设置
3. 设置免密登录
这步如果是克隆的就不需配置,如果不是克隆的可参第一步中配置ssh的方式来进行配置,关键在于将不同节点的公钥配置到各自的受信列表中。
第三步 启动hadoop集群
启动集群
终端运行命令:start-all.sh
运行集群
运行WorldCount实例
在hadoop主目录下,执行如下终端命令:
命令1:hdfs dfs -mkdir input
命令2:hdfs dfs -put etc/hadoop/*.xml inpu
命令3:hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.1.jar grep input output 'dfs[a-z.]+'
命令4:hdfs dfs -cat output/*
总结
这一版的内容是基于前两版的基础之上的搭建的。该篇文档的优点是:整个文档层次结构分明,思路清晰,在实际开发中具有一定的指导意义,并且此次文档修改了字体,在使用时可以直接复制该篇文档的内容进行操作。该篇文档的缺点是:缺少实际执行的效果图做支撑,适合有一定开发经验的人员阅读。