三、配置Hadoop
1、设置$HADOOP_HOME/conf/hadoop-env.sh
这个文件里设置的是Hadoop运行时须要的环境变量,在1.2.1版中共同拥有19个环境变量。例如以下:
变量名称 | 默认值 | 说明 |
JAVA_HOME |
| 设置JDK的路径。这个必须设置。否则Hadoop无法启动,值如: /usr/local/jdk1.6.0_33 |
HADOOP_CLASSPATH | 空 | 这个用以设置用户的类路径。也能够在运行计算之前设置 |
HADOOP_HEAPSIZE | 1000m | 设置Hadoop堆的大小,依据自己环境的实际情况进行设置了。 |
HADOOP_OPTS | -server | Hadoop启动时的JVM參数,默认是以server模式启动。能够添加-X或-XX之类的參数 |
HADOOP_NAMENODE_OPTS | -Dcom.sun.management.jmxremote $HADOOP_NAMENODE_OPTS | 该选项的值会附加到HADOOP_OPTS之后。在启动NameNode时设置的JVM參数。 如想手动设置NameNode的堆、垃圾回收等信息,能够在这里设置: export HADOOP_NAMENODE_OPTS="-Xmx2g -XX:+UseParallelGC ${HADOOP_NAMENODE_OPTS}" 其他的节点相似设置。 |
HADOOP_SECONDARYNAMENODE_OPTS | -Dcom.sun.management.jmxremote $HADOOP_SECONDARYNAMENODE_OPTS | 该选项的值会附加到HADOOP_OPTS之后。在启动SecondaryNameNode时设置的JVM參数 |
HADOOP_DATANODE_OPTS | -Dcom.sun.management.jmxremote $HADOOP_DATANODE_OPTS | 该选项的值会附加到HADOOP_OPTS之后,在启动DataNode时设置的JVM參数 |
HADOOP_BALANCER_OPTS | -Dcom.sun.management.jmxremote $HADOOP_BALANCER_OPTS | 该选项的值会附加到HADOOP_OPTS之后,在启动BalancerNode时设置的JVM參数 |
HADOOP_JOBTRACKER_OPTS | -Dcom.sun.management.jmxremote $HADOOP_JOBTRACKER_OPTS | 该选项的值会附加到HADOOP_OPTS之后。在启动JobTracker时设置的JVM參数 |
HADOOP_TASKTRACKER_OPTS | 空 | 该选项的值会附加到HADOOP_OPTS之后。在启动TaskTracker时设置的JVM參数 |
HADOOP_CLIENT_OPTS | 空 | 该选项添加的參数,将会作用于多个命令,如fs, dfs, fsck, distcp等 |
HADOOP_SSH_OPTS | 空 | SSH连接的选项。值能够是例如以下这样: -o ConnectTimeout=1 -o SendEnv=HADOOP_CONF_DIR |
HADOOP_LOG_DIR | ${HADOOP_HOME}/logs | 日志文件存放的文件夹 |
HADOOP_SLAVES | $HADOOP_HOME/conf/slaves | Slaves所在的配置文件,每行配置一个slave |
HADOOP_MASTER | master:/home/$USER/src/hadoop | 用于设置Hadoop代码的同步文件夹。 |
HADOOP_SLAVE_SLEEP | 0.1
| 用于设置slave往master发送命令的时间停顿,单位为秒。 这个在大型的集群之中非常实用,master才有足够的时间来处理这些请求。 |
HADOOP_PID_DIR | /tmp | Hadoop PID文件的存放文件夹,这个最好是改动一下,由于/tmp文件夹通常来说是不论什么人都能够訪问的,有可能存在符合链接攻击的风险。 |
HADOOP_IDENT_STRING | $USER | 用于代表当前的Hadoop实例。 |
HADOOP_NICENESS | 10 | Hadoop守护进行的定时优先级,能够通过“man nice”获取很多其他信息 |
通常来说,我们仅仅须要关注JAVA_HOME、HADOOP_HEAP_SIZE、HADOOP_PID_DIR这几个,当然其他的也须要注意了,对其全部了解了才干够更加充分的发挥其能力,面临问题的时候才会知道从哪些方面去入手解决。
JAVA_HOME:
JAVA_HOME是必须设置的,即使我们当前的系统中设置了JAVA_HOME,它也是不认识的,由于Hadoop即使是在本机上运行,它也是把当前的运行环境当成远程服务器。设置JAVA_HOME环境变量:
export JAVA_HOME=/usr/local/jdk1.6.0_33 |
假设使用的是Mac OS X系统,那么在启动hdsf的NameNode和secondaryNameNode时,会报出Unable to load realm info from SCDynamicStore 的错误提示,解决该问题的办法是。在hadoop-env.sh文件里面添加一行:
export HADOOP_OPTS="-Djava.security.krb5.realm=OX.AC.UK -Djava.security.krb5.kdc=kdc0.ox.ac.uk:kdc1.ox.ac.uk" |
详见文章:http://gauss-deng.iteye.com/blog/1370295
HADOOP_HEAPSIZE:
还可依据实际情况设置HADOOP_HEAPSIZE的值,单为mb,假设不设置默认值是1000,我的内存没有这么大而且測试用例不会用到那么大的堆,所以我也设置了一个这个值。
export HADOOP_HEAPSIZE=20 |
HADOOP_PID_DIR:
Hadoop PID文件的存放文件夹,这个最好是改动一下,由于/tmp文件夹通常来说是不论什么人都能够訪问的。有可能存在符合链接攻击的风险。
export HADOOP_PID_DIR=/home/fenglibin/hadoop_tmp |
2、配置$HADOOP_HOME/conf/core-site.xml
參数例如以下(部分):
參数 | 默认值 | 说明 |
fs.default.name | file:/// | NameNode的URI,如: hdfs://locahost:9000/ |
hadoop.tmp.dir | /tmp/hadoop-${user.name} | 其他暂时文件夹的基本文件夹, /home/fenglibin/hadoop_tmp |
hadoop.native.lib | true | 是否使用hadoop的本地库 |
hadoop.http.filter.initializers | 空 | 设置Filter初使器,这些Filter必须是hadoop.http.filter.initializers的子类。能够同一时候设置多个,以逗号分隔。这些设置的Filter,将会对全部用户的jsp及servlet页面起作用。Filter的顺序与配置的顺序同样。 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
配置演示样例:
<configuration> <property> <!-- 用于设置Hadoop的文件系统。由URI指定 --> <name>fs.default.name</name> <value>hdfs://localhost:9000</value> </property> <property> <!-- 配置Hadoop的暂时文件夹,默认在/tmp文件夹下,可是/tmp上面可能会被系统自己主动清理掉。--> <name>hadoop.tmp.dir</name> <!-- 文件夹假设不存在。须要手动创建 --> <value>/home/fenglibin/hadoop_tmp</value> <description>A base for other temperary directory</description> </property> </configuration> |
3、配置$HADOOP_HOME/conf/mapred-site.xml文件
參数例如以下(部分):
參数 | 说明 | 演示样例 |
mapred.job.tracker | 配置JobTracker,以Host和IP的形式 | localhost:9001 |
mapred.system.dir | MapReduce框架在HDFS存放系统文件的路径。必须能够被server及client訪问得到,默认值: ${hadoop.tmp.dir}/mapred/system | ${hadoop.tmp.dir}/mapred/system |
mapred.local.dir | MapReduce框架在本地的暂时文件夹,能够是多个,以逗号作分隔符,多个路径有助于分散IO的读写,默认值: ${hadoop.tmp.dir}/mapred/local | ${hadoop.tmp.dir}/mapred/local |
mapred.tasktracker.{map|reduce}.tasks.maximum | 在同一台指定的TaskTacker上面同一时候独立的运行的MapReduce任务的最大数量,默认值是2(2个maps及2个reduces),这个与你所在硬件环境有非常大的关系,可分别设定。 | 2 |
dfs.hosts/dfs.hosts.exclude | 同意/排除的NataNodes。假设有必要。使用这些文件控制同意的DataNodes。 |
|
mapred.hosts/mapred.hosts.exclude | 同意/排除的MapReduces,假设有必要,使用这些文件控制同意的MapReduces。 |
|
mapred.queue.names | 可用于提交Job的队列,多个以逗号分隔。MapReduce系统中至少存在一个名为“default”的队列,默认值就是“default”。 Hadoop中支持的一些任务定时器,如“Capacity Scheduler”。能够同一时候支持多个队列,假设使用了这样的定时器,那么使用的队列名称就必须在这里指定了。一旦指定了这些队列。用户在提交任务,通过在任务配置时指定“mapred.job.queue.name”属性将任务提交到指定的队列中。 这些属于这个队列的属性信息,须要有一个单独的配置文件来管理。 | default |
mapred.acls.enabled | 这是一个布尔值。用于指定授权用于在运行队列及任务操作时,是否须要校验队列及任务的ACLs。假设为true,在运行提交及管理性的任务时会检查队列的ACL,在运行授权查看及改动任务时任务的会检查任务ACLs。队列的ACLs通过文件mapred-queue-acls.xml中的mapred.queue.queue-name.acl-name这样格式的參数进行指定,queue-name指的是特定的队列名称。任务的ACLs在mapred中会有说明。 默认值为false。 | false |
配置演示样例:
<configuration> <property> <name>mapred.job.tracker</name> <value>localhost:9001</value> </property> </configuration> |
4、配置$HADOOP_HOME/conf/mapred-queen-acks.xml文件
參数例如以下(部分):
參数 | 说明 | 演示样例 |
mapred.queue.queue-name.acl-submit-job | 这里配置能够提交任务到默认队列(the ‘default’ queue)的username和组名。 注:这里的queue-name指的是一个特定的队列名称。 有两种指定的方式: 1、同一时候指定username和组名 值的格式是username和username以逗号分隔,组与组之间用逗号分隔,username和组之间使用空格分隔,如: user1,user2 group1,group2 2、仅仅指定组名 在组名的前名留一下空格,如: group1,group2 3、同意全部的用户都能够提交任务。此时的值设为“*”; 4、假设设置为空格,表示不同意不论什么用户提交任务;
要使这些配置生效,必须设置Map/Reduce的mapred.acls.enabled的值为true。 只是无论这里的ACL的配置是怎么样,启动集群的用户以及通过通过mapreduce.cluster.administrators设置的集群管理员,都能够提交任务到队列中。 | user1,user2 group1,group2 |
mapred.queue.queue-name.acl-administer-jobs | 列出能够对指定的队列运行任务管理的username和组名,如查看任务详情、改动任务优先级或者是杀掉任务。 设置的格式同上面一样。 注:任务的拥者是能够对其自己的任务进行优先级的调整或者杀掉该任务的。
与上面的配置一样。要使这些配置生效。必须设置Map/Reduce的mapred.acls.enabled的值为true。 只是无论这里的ACL的配置是怎么样,启动集群的用户以及通过通过mapreduce.cluster.administrators设置的集群管理员。都能够对该队列中的任务运行不论什么操作。 | user1,user2 group1,group2 |
配置演示样例:
<configuration> <property> <name>mapred.queue.default.acl-submit-job</name> <value> </value> </property>
<property> <name>mapred.queue.default.acl-administer-jobs</name> <value> </value> </property> </configuration> |
5、配置$HADOOP_HOME/conf/hdfs-site.xml文件
这个文件的内容,可通过将$HADOOP_HOME/src/hdfs/hdfs-default.xml中的文件拷贝过来。然后再改动,假设这个文件里没有内容,那么使用的默认值就和$HADOOP_HOME/src/hdfs/hdfs-default.xml中设置的一样,假设在这里设置了就会覆盖系统中对应名称的默认值。如这里将内容的复制份数设置为1。而系统默认的复制份数为3。例如以下:
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration> |
6、格式化namenode
hadoop namenode -format |
7、启动Hadoop
./bin/start-all.sh |
假设是出现例如以下结果,那就说明Hadoop已经成功启动了:
fenglibin@ubuntu1110:/usr/local/hadoop-1.2.1$ jps 29339 SecondaryNameNode 29661 Jps 28830 JobTracker 29208 DataNode 28503 NameNode 29514 TaskTracker |
此时我们能够通过WEB方式查看NameNode及Jobtracker的状态了:
NameNode:http://localhost:50070/
JobTracker:http://localhost:50030/
假设仅仅是測试map/reduce,这里仅仅须要启动例如以下命令:
./bin/start-mapred.sh |
8、启动Hadoop可能会遇到的问题
后面会提到。