配置 Hadoop 时遇到的一些问题

hadoop 安装/启动步骤中常见问题

Hadoop 2.x 命令及可执行文件目录的变化:
在1.x中,所有的命令文件,都是放在bin目录下,没有区分客户端和服务端命令,并且最终命令的执行都会调用hadoop去执行;而在2.x中将服务端使用的命令单独放到了sbin目录,其中有几个主要的变化:

  • 将./bin/hadoop的功能分离。在2.x中./bin/hadoop命令只保留了这些功能:客户端对文件系统的操作、执行Jar文件、远程拷贝、创建一个Hadoop压缩、为每个守护进程设置优先级及执行类文件,另外增加了一个检查本地hadoop及压缩库是否可用的功能,详情可以通过命令“hadoop -help”查看。
    而在1.x中,./bin/hadoop命令还包括:NameNode的管理、DataNode的管理、 TaskTracker及JobTracker的管理、服务端对文件系统的管理、文件系统的检查、获取队列 信息等,详情可以通过命令“hadoop -help”查看。
  • 增加./bin/hdfs命令。./bin/hadoop命令的功能被剥离了,并不是代表这些命令不需要了,而是将这些命令提到另外一个名为hdfs的命令中,通过hdfs命令可以对NameNode格式化及启动操作、启动datanode、启动集群平衡工具、从配置库中获取配置信息、获取用户所在组、执行DFS的管理客户端等,详细可以通过“hdfs -help”查看。
  • 增加./bin/yarn命令。原来1.x中对JobTracker及TaskTracker的管理,放到了新增的yarn命令中,该命令可以启动及管理ResourceManager、在每台slave上面都启一个NodeManager、执行一个JAR或CLASS文件、打印需要的classpath、打印应用程序报告或者杀死应用程序等、打印节点报告等,详情可以通过命令“yarn -help”查看。
  • 增加./bin/mapred命令。该命令可以用于执行一个基于管道的任务、计算MapReduce任务、获取队列的信息、独立启动任务历史服务、远程目录的递归拷贝、创建hadooop压缩包,详情可以通过“./mapred -help”。

参考资料:Hadoop入门进阶步步高(六)-Hadoop1.x与Hadoop2的区别

dfs.replication这个参数是个client参数(需要在每台datanode或client上设置)
默认值=3个副本已经够用了,设置越大越浪费存储空间
上传一个文件到hdfs://上时,当前dfs.replication指定的是几就会存储几份文件。即使以后你修改了dfs.replication的默认值,也对已经上传了的文件也不会起任何作用。另外,可以在上传文件的同时指定创建的副本数
$HADOOP_HOME/bin/hdfs dfs -D dfs.replication=1 -put 本地文件名 远端存储位置

参考资料:hadoop 的 dfs.replication 参数

hadoop 2.7 版及以上版本指定 namenode 主机地址时用到的 xml 变量是 fs.defaultFS (之前老版本用的是 fs.default.name):

<property>
    <name>fs.defaultFS</name>
    <value>hdfs://192.168.0.52:54310</value>
</property>

端口号由用户自行指定, 例如上面的端口号是54310

指定 secondary namenode 在哪台主机上运行用到的 xml 变量是:

<property>
    <name>dfs.namenode.secondary.http-address</name>
    <value>0.0.0.0:9868</value>
</property>

secondary 默认值是在运行start-dfs.sh脚本的主机上启动 secondary namenode. 其 web服务器运行在 9868(http) 或 9869(https)端口上.

各种参数默认值如下:

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/core-default.xml

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/hdfs-default.xml

dfs.client.socket-timeout
默认值60秒(60000毫秒)

自己添加一个新的datanode,修改etc/hadoop/hdfs-site.xml时拼错了一个XML标签,导致从namenode端start-all.sh时启动不了。hadoop提示的错误信息却只说ssh exit with code 1,缺少详细提示不利于新手排查错误。

start-dfs.sh 错误提示信息 rcmd: socket: Permission denied

解决方法:
在/etc/pdsh/目录下面新建文件rcmd_default,写入ssh,然后回车,记得一定要输入一个回车符另起一行,不然会提示ssh exit with code 1

另外之前已经用 sudo apt-get install pdsh 安装 pdsh

点赞