1. Hadoop生态圈儿架构
Hadoop流程示意图 hadoop生态圈Map hadoop日志分析系统架构图 日志分析、推荐系统手绘图2. hadoop集群安装/启动
hadoop搭建实例这里演示我使用:
10.10.77.194: nameNode/resourceNode
10.10.77.193: secondaryNameNode
10.10.77.191: dataNode1/nodeManager1
10.10.77.192:dataNode2/nodeManager2
2.1 下载hadoop
http://hadoop.apache.org/
http://hadoop.apache.org/releases.html
注:www.cloudera.com是一个商业化的hadoop系统,使用非常方便,如果一开始使用这个,你就不了解hadoop ecosystem中每一个组件的细节了,但最终还是会回归到CDH当中去,毕竟数据工程师做到最后最好不要太关心环境
转hadoop版本选择建议:https://blog.csdn.net/xiangxizhishi/article/details/75711242
第三方CDH的架构我安装环境的时候current版本和stable版本都是2.9.1,但是后来用maven时发现没有2.9.1的依赖包,只有2.9.0的,所以使用hadoop2.9.0版本
见文档:http://hadoop.apache.org/docs/stable/
2.2 安装tar.gz包
src包需要编译,编译要依赖很多包,非常耗时麻烦,这里就不介绍了,我也没有做过
2.2.1 解压
任意找一台服务器解压
#tar -zxvf hadoop-2.9.0.tar.gz
2.2.2 解压完成后的目录
hadoop根目录bin和sbin:应用程序目录
etc:放置配置文件
share/doc:说明文档
share/hadoop:放置其他插件的jar依赖包
lib:hadoop在linux下的库文件
2.3 配置hadoop
http://hadoop.apache.org/docs/stable/ 最左下角就是可能需要配置的配置文件参数列表及其默认值
2.3.1 hadoop-env.sh 启动时配置文件
由于启动hadoop都是使用ssh方式,虽然echo $JAVA_HOME是正确路径,但是ssh登录后是不生效的。所以先修改/kluter/hadoop-2.9.0/etc/hadoop/hadoop-env.sh,设置JAVA_HOME为绝对路径值:
# The java implementation to use.
#export JAVA_HOME=${JAVA_HOME}
export JAVA_HOME=/kluter/jdk1.8.0_161
PS: 如果是单独登录运行是不需要改这个配置的
2.3.2 core-site.xml 核心配置文件
<configuration> #写配置的区域
<property>
<name>fs.defaultFS</name>
<value>hdfs://10.10.77.194:9000</value> #URI标准格式,这里表示10.10.77.194:9000 这台服务器作为nameNode,端口9000
</property>
<property>
<name>hadoop.tmp.dir</name> #设置临时目录
<value>/kluter/hdpTmpDir</value>
</property>
</configuration>
2.3.3 hdfs-site.xml hdfs相关配置文件
都有默认值,默认不用写配置参数
演示一个:
<configuration>
<property>
<name>dfs.replication</name> #client上传文件的副本数
<value>2</value> #default is '3'
</property>
<property>#对namenode工作目录的备份到不同磁盘,防止主要磁盘挂掉后从secondNameNode恢复不完整的问题(这里我的虚拟机没有2块磁盘)
<name>dfs.namenode.name.dir</name>
<value>/kluter/hdpTmpDir/dfs/name,/kluter/hdpTmpDir/dfs/nameBak</value>
</property>
<property>#secondaryNameNode 位置
<name>dfs.namenode.secondary.http-address</name>
<value>10.10.77.193:50090</value>
</property>
</configuration>
2.3.4 mapred-site.xml MapReduce相关配置文件
<configuration>
<property>
<name>mapreduce.framework.name</name> #指定mapreduce在哪一台分布式服务器上面跑
<value>yarn</value> #默认是local, 这样就不是分布式了。一般选择yarn的resouceNode, 这里只填写yarn,在yarn-site.xml中指定resourceNode
</property>
</configuration>
2.3.5 yarn-site.xml yarn相关配置文件
<configurattion>
<property>
<name>yarn.resourcemanager.hostname</name>
<value>10.10.77.194</value> #resourceNode 的服务器ip
</property>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value> #mapreduce 需要一个shuffle服务
</property>
</configurattion>
2.3.6 设置hadoop全局命令、做主机名ip映射
2.3.6.1 把hadoop集群中所有服务器节点的hadoop相关命令设置为全局命令
进入其中一台设置profile,像配置JAVA_HOME一样配置HADOOP_HOME,并且在PATH中加入hadoop的bin和sbin
scp到其他节点服务器并source立即生效
2.3.6.2 主机名ip映射
主机名在安装环境的时候已经设置,这里需要在集群中映射ip
进入其中一台的/etc/hosts
在尾部添加如下配置:
10.10.77.191 zookeeper1
10.10.77.192 zookeeper2
10.10.77.194 zookeeper4
保存后#sysctl restart network
能够用ping互相ping通表示映射成功
2.4 将配置好的一台服务器同步到集群中剩余的3台服务器中
#scp -r hadoop-2.9.0/ 10.10.77.193:/kluter
#scp -r hadoop-2.9.0/ 10.10.77.192:/kluter
#scp -r hadoop-2.9.0/ 10.10.77.191:/kluter
注:-r是对目录的递归操作
2.5 format HDFS on nameNode
#hadoop namenode -format
这条命令我第一次运行报java的ERROR,一般来讲都是配置文件有错,查了之后是因为xml标签少些了一个反斜线/
成功格式化则会在console显示一条INFO日志:
18/06/05 20:17:12 INFO common.Storage: Storage directory /kluter/hdpTmpDir/dfs/name has been successfully formatted.
成功格式化日志2.6 启动hadoop namenode
#hadoop-daemon.sh start namenode
启动namenode成功如果启动成功,那么hdfs的jetty网页插件也就启动成功了,可以通过http访问:
http://10.10.77.194:50070
hadoop namenode启动成功,这里看到红圈里面都为0值,是因为集群中还没有datanode2.7 手动启动2个datanode
datandoe的启动跟启动namenode差不多
#hadoop-daemon.sh start datanode
我启动之后出现报错:
报错可以发现是hdpTmpDir相关的问题原因是/kluter/hdpTmpDir/dfs下面的data所有数据可能是之前操作流程错误导致的,直接将/kluter/hdpTmpDir/dfs下面的所有文件删除,再hadoop datanode -format,再启动一次datanode
只要启动之后jps看DataNode进程存在就表示启动成功了,这时再浏览器refresh一下发现namenode发现了一台datanode
接着再启动一台datanode,至此演示用的zookeeper1和zookeeper2两台datanode和zookeeper4namenode都启动完成了
1个namenode、2个datanode启动完成2.8 hadoop自动化脚本启动大规模集群中的所有datanode、namenode
2.8.1 slaves:datanode列表
namenode主机10.10.77.194中,hadoop/etc/ 下面有一个名为slaves的配置文件,用来指定datanode的主机ip/名字,默认有一个localhost,这里是将datanode启动到本机的意思,因为194是namenode,所以要删掉。而是要把191、192两台主机ip加进去(如果有secondaryNameNode 也要把secondaryNameNode的slava修改了?):
添加自动化脚本需要启动的datanode2.8.2 设置namenode到datanode的免密登录
2.8.2.1 试运行start-dfs.sh
运行hadoop/sbin/start-dfs.sh
自动化脚本启动namenode,2个datanode这一步我们发现有几个问题:
问题一:自动化脚本在0.0.0.0上,也就是namenode上启动了一个secondarynamenode,这个是可以在hdfs配置文件中去配置的,配置选项是:dfs.namenode.secondary.http-address, 之后介绍将10.10.77.193设置为secondarynamenode
问题二:在上图中发现console的用户输入提示顺序和打印字符是乱的,且每次需要输入密码,这样的话我们就需要设置namenode到datanode的免密登录,见2.8.2.2
2.8.2.2 设置免密登录
参考之前的简文:https://www.jianshu.com/p/f40c5d6e4b9d
设置好了之后,再在namenode上运行start-dfs.sh就不需要输入密码了
2.8.3 自动化启动hdfs和yarn
在namenode上运行start-all.sh,自动化脚本帮你先运行start-dfs.sh,再运行start-yarn.sh
2.9 查看Hadoop集群精确信息
在2.6中我们可以从页面查看集群节点信息,但是没有命令行准确
#hdfs dfsadmin -report
这样查看集群节点信息也方便用程序来做磁盘告警
网友评论