0 - 分布式 hadoop 环境搭建
2018-05-16 02:00 乱月灵猫 阅读(381) 评论(0) 编辑 收藏 举报在上一篇介绍Hadoop环境搭建中,是在本机搭建伪分布式,按照那个操作一般不会出问题。在多台服务器搭建Hadoop,会遇到各种问题
首先,需要熟悉几个目录
Hadoop/sbin 存放了各种启动所需的shell脚本,命令
Hadoop/logs 存放hadoop的各个日志,包括namenode日志,datanode日志,zkfc日志,yarn-nodemanager日志,yarn-resourcemanager日志
Hadoop/etc/hadoop 存放了启动时所需的配置文件和shell脚本
在启动时,需要查看logs的日志,发现启动过程中出现的种种问题
一般启动hadoop集群可以使用start-all.sh
可以看到里面推荐使用start-dfs.sh start-yarn.sh来启动
注意要在master node上去执行
首先, master node 在 core-site.xml 以及hdfs.xml文件中配置了,其次,master node生成ssh的公钥和私钥,并把公钥复制给了其他slave节点
在配置master的时候,如果采用多个namenode,那么需要配置成hdfs:masters,会查找hdfs-site.xml中的dfs.ha.namenodes.masters,里面配置了2个namenode
接下来,根据master.namenodeN的配置,就会知道masters的IP地址
网上有很多都是单个namenode的配置,所以直接配置IP:9000就可以,如果是多个namenode,则需要采用上面的方式
也可以参照这种方式
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
hadoop集群在一开始或者格式化后启动的方式:(格式化需要包括journal tmp/dfs logs,以及zk中的hadoop-ha)
先启动各个journal
然后格式化zkfc
然后格式化主节点的namenode,启动namenode
在第二个namenode上同步第一个namenode,启动第二个namenode
启动各个datanode
启动两个namenode上的zkfc
切记,不可以直接start-dfs,然后格式化两个namenode,格式化第二个后,就会报错,各种id不一致的问题
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
(1)问题1
在启动过程中,观察zkfc日志,发现报错FATAL ha.ZKFailoverController: Unable to start failover controller Parent znode does not exist. Run with -formatZK flag to initialize ZooKeeper.
已经提示了,是原来zk节点找不到了。首先要确认zk集群是否启动正常
如果正常,那么在Namenode上执行 hdfs zkfc -formatZK
接下来,start-all,就可以看到DFSZKFailoverController进程起来了
这个问题之后再去排查其他问题
(2)问题2
停止过程中,说一些pid找不到,原因在于pid文件默认存在\tmp的,而linux中\tmp文件是不安全的,会清理掉,所以需要修改hadoop-daemon.sh脚本,吧PID_DIR改了
(3)问题3
Journal node 要是奇数个
(4)问题4
启动集群后,只有一个datanode 原因是没有修改namenode的slaves文件。里面需要添加上想要的datanode的IP
可以通过配置dfs.hosts = /home/hadoop/etc/hadoop/slaves
然后在slaves加入IP,来构造datanode的白名单,这样就不会随便允许datanode加进来了
这篇文章讲了Namenode高可用性
这篇讲了Namenode format的作用
这篇还讲了Namenode和secondaryNamenode的区别
这篇讲的更全一点
2017-06-08 11:18:43,663 WARN org.apache.hadoop.hdfs.server.namenode.FSNamesystem: Only one image storage directory (dfs.namenode.name.dir) configured. Beware of dataloss due to lack of redundant storage directories!
两个Namenode启动时都报这个警告:
只配置了一个dfs.namenode.name.dir,这会导致单点故障
只要配置成多个就不会出这个警告了
Yarn 的启动,如果namenode和resourcemanager不在一台机器上,那么启动yarn的时候只能在resourcemanager上启动,在namenode上是启动不来的
Yarn
<property>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>8192</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>2048</value>
</property>
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>8192</value>
</property>
Map
<property>
<name>mapreduce.map.memory.mb</name>
<value>2048</value>
</property>
<property>
<name>mapreduce.reduce.memory.mb</name>
<value>4096</value>
</property>
<property>
<name>mapreduce.map.java.opts</name>
<value>-Xmx1638m</value>
</property>
<property>
<name>mapreduce.reduce.java.opts</name>
<value>-Xmx3276m</value>
</property>