大数据开发涉及的组件和方向比较多,由于之前项目使用的都是成熟的大数据产品CDH或者HDP,里面封装了多个大数据组件,对于企业而言,无论是体验还是维护都比较友好,但对于开发人员来说,太过于集成,反而不太好了解各个组件具体的配置细节,本篇文章就从hadoop开始来深入探讨。
提示:以下案例仅供参考
hadoop从发布至今,已经更新到第三个大版本,除了从1.0到2.0版本有着非常大的改进更新外,到3.0后的版本都是不断的改善优化。1.0版本yarn和mr引擎都是在一起的,对于资源的调优不透明也不太便利,2.0版本后yarn和mr引擎解耦,用户可用根据自身环境资源的情况自行配置参数调优,mr专门负责处理计算,yarn专门负责资源管理,另外还增强了高可用性以及hdfs响应速度等,之后的版本就没怎么关注,也没怎么听过关于hadoop的一些特别大的改进,如有疏漏的地方,大家可用及时补充讨论。
提示:也可用根据自身情况创建三台虚拟机
Node1 Node2 Node3
cpu 16core 16core 16core
内存 32G 32G 32G
硬盘 500G 500G 500G
OS centos7 centos7 centos7
安装步骤跟之前的文章类似,都是下载好对应系统的安装包,然后解压安装,由于我这边的服务器环境系统是centos,所以安装包以xxx.tar.gz结尾(.rpm格式的也可以安装,但安装路径是默认的,为了方便指定路径安装,所以现在tar格式安装包),到安装路径下,执行命令 tar -zxvf jdk-8u391-linux-x64.tar.gz 解压,
不知道大家平时都喜欢怎样配置环境变量,我一般都是在/etc/profile.d/目录下创建一个xxx.sh文件保存所有的环境变量配置,以避免配置文件的冲突,其实仔细看下/etc/profile里面的代码可以知道,其实每次读取环境变量时,是会遍历/etc/profile.d目录下的所有sh文件,因此可以在/etc/profie.d目录下建立个人的环境变量配置
提示:以下是我在/etc/profile.d目录下创建的my_env.sh
做免密登录是为了节点之间能够相互访问,以及主备切换等,先将各个节点的主机名(可通过hostname命令查看,如果觉得主机名不合适,可通过hostname-ctl set-hostname xxx来修改主机名)添加到/etc/hosts文件中,然后分别在三台机器上执行ssh-keygen -t rsa生成公钥和私钥(可通过ls ~/.ssh命令查看生成的密钥,如果服务器上没有ssh服务,可通过yum -y install openssh openssh-clients openssh-server 命令安装ssh服务),接着执行ssh-copy-id cdp1 ssh-copy-id cdp2 ssh-copy-id cdp3,拷贝到目标服务器
提示:sh-keygen -t rsa 和 ssh-copy-id cdp1 ssh-copy-id cdp2 ssh-copy-id cdp3三台机器都需要执行
提示:ip地址做了涂抹,可根据自身环境信息进行更改
登录hadoop官网地址 https://hadoop.apache.org/releases.html,下载hadoop安装包hadoop-3.3.3.tar.gz,执行解压命令tar -zxvf hadoop-3.3.3.tar.gz到指定安装目录,然后将安装目录添加到环境变量,此处跟上一步功能类似。
#hadoop
export HADOOP_HOME=/application/soft/hadoop-3.3.3
export HADOOP_CONF_DIR=$HADOOP_HOME/etc/hadoop
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
hadoop中需要配置的文件有四个,分别是core-site.xml、hdfs-site.xml、yarn-site.xml和mapred-site.xml,以下是各个文件的配置详情
1.core-site.xml
<configuration>
<!-- 把多个NameNode的地址组装成一个集群mycluster -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://cdp1:8020</value>
</property>
<!-- 指定hadoop运行时产生的文件的存储目录 -->
<property>
<name>hadoop.tmp.dir</name>
<value>/application/soft/hadoop-3.3.3/data</value>
</property>
<!-- 表示代理用户的组所属-->
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>
<!-- 表示任意节点使用hadoop集群的代理用户 hadoop都能访问hdfs集群-->
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>*</value>
</property>
</configuration>
2.hdfs-site.xml
<configuration>
<!-- 不开启权限检查 -->
<property>
<name>dfs.permissions.enabled</name>
<value>false</value>
</property>
<!--nn web端访问地址 -->
<property>
<name>dfs.namenode.http-address</name>
<value>cdp1:9870</value>
</property>
<!--2nn web端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>cdp3:9868</value>
</property>
</configuration>
3.yarn-site.xml
<configuration>
<!-- 指定MR走shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!--指定ResourceManager地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>cdp2</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>
4.mapred.xml
<configuration>
<!-- 指定Mapreduce程序运行在Yarn上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
执行hdfs namenode -format命令,对namenode进行初始化,看到输出信息有"successfully formatted"字样,则证明初始化成功
进入hadoop安装目录,比如我的安装目录是/application/soft/hadoop-3.3.3,然后执行 sbin/start-dfs.sh,启动namenode、secondarynamenode、datanode进程,可通过jps命令查看,因为我的配置文件中写的是节点2作为yarn的资源管理器,所以在节点2执行sbin/start-yarn.sh命令启动resourcemanager、nodemanager进程,可通过jps命令查看进程,然后打开浏览器,输入地址http://cdp1:9870,查看是否能正常访问,也可以通过命令hds dfsadmin -report命令,根据报告信息查看是否正常。
提示:此处地址可根据自身环境不同,自行修改
至此,三个节点的hadoop集群已经搭建完成,当然,其中还有很多待完善的地方,比如HA高可用,history服务等配置,由于本篇文章旨在介绍hadoop的安装部署,该集群也是为了后续的技术测试及验证,加上时间有限,目前就写到这里,欢迎大家一起来积极讨论交流。