Hadoop 2.2.0集群安装(3)

3.1 关于账户设置

在正式的部署环境上,我们推荐设置专有账户来运行Hadoop,例如:创建用户hdfs用户来启动namenode和datanode,创建yarn用户来启动resourcemanager和nodemanager.至于这些用户的用户组可以是同名用户组(这与CDH的做法一致的),也可以使用一个统一的用户组,如hadoop之类,这取决于你自己的喜好,但本质上这些用户彼此之间并没有必然的联系,让它们从属于同一个用户组并没有什么特殊的意味,所以我喜欢让每一个用户独立于自己的用户组。

需要特别提醒的是:如果配置专用账户启动hadoop相关服务需要将hadoop所使用的各种文件夹(例如:dfs.namenode.name.dir等等)的owner和owner group改为专有用户,否则会导致专有用户因为没有足够的权限访问这些文件夹而导致服务启动失败。由于配置这些文件夹的owner和owner group相当繁琐,且启停这些服务时都需要切换至对应用户,对于日常开发来说是很不便的,所以如果你搭建的是本地开发环境可以简单地使用root帐号来启动hadoop.

3.2 格式化集群

初启动前,需要首先格式化集群,执行命令:

hadoop namenode -format

3.3 启动hdfs

执行:

start-dfs.sh

该命令可以任意结点上执行。不过需要注意的是如果配置文件中没有指明secondary namenode(即在hdfs-site.xml中没有配置dfs.namenode.secondary.http-address),那么在哪个结点上执行该命令,该点将自动成为secondary namenode.

以下单独启动某项服务的命令:

启动namenode

hadoop-daemon.sh start namenode

启动secondarynamenode

hadoop-daemon.sh start secondarynamenode

启动datanode

hadoop-daemon.sh start datanode

启动之后,访问:

:50070

检查HDFS各结点情况,如都能访问表示HDFS已无问题,如无法访问或缺少节点,可分析log的中的信息找出问题原因。

3.4 启动yarn

执行:

start-yarn.sh

该命令可以任意结点上执行。其slaves结点与hdfs一样,读取的也是${HADOOP_HOME}/etc/hadoop/slaves文件。

以下单独启动某项服务的命令:

启动resourcemanager

yarn-daemon.sh start resourcemanager

启动nodemanager

yarn-daemon.sh start nodemanager

启动之后,访问:

:8088

检查YARN各结点情况,如都能访问表示YARN无问题,如无法访问或缺少节点,可分析log的中的信息找出问题原因。

4. 常见错误

4.1:Problem connecting to server: xxxx:9000

在确认关闭了ipv6和防火墙之后,在namenode上使用

netstat -ntlp|grep 9000

检查namenode服务端口的分配(特别是 local address和foreign address),确定是否存在配置上的问题,如有没有正确配置/etc/hosts

4.2:libhadoop.so.1.0.0 which might have disabled stack guard

在使用./sbin/start-dfs.sh或./sbin/start-all.sh启动时会报出这样如下警告:

Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /usr/local/hadoop-2.2.0/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.

....

Java: ssh: Could not resolve hostname Java: Name or service not known

HotSpot(TM): ssh: Could not resolve hostname HotSpot(TM): Name or service not known

64-Bit: ssh: Could not resolve hostname 64-Bit: Name or service not known

....

这个问题的错误原因会发生在64位的操作系统上,原因是从官方下载的hadoop使用的本地库文件(例如lib/native/libhadoop.so.1.0.0)都是基于32位编译的,运行在64位系统上就会出现上述错误。解决方法之一是在64位系统上重新编译hadoop,另一种方法是在hadoop-env.sh和yarn-env.sh中添加如下两行:

export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_PREFIX/lib"

4.3:Error: JAVA_HOME is not set and could not be found.

虽然你已经在各个节点上正确的配置了JAVA_HOME,但是启动时还是可能会报出上述错误,从etc/hadoop/hadoop-env.sh文件关于第一行配置:export JAVA_HOME=${JAVA_HOME}的注释上来看,对于一个分布式集群,这里JAVA_HOME最好显式地指明而不要使用默认的${JAVA_HOME}。对于etc/hadoop/yarn-env.sh也是如此!

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/14be787eb6bbd9b46363fb7bc22db7cb.html