备 注:fs.default.name指定NameNode的IP地址和端口号,缺省值是file:///,,表示使用本地文件系统,,用于单机非分布式模式。
dfs.replication指定HDFS中每Block被复制 的次数,起数据冗余备份的作用。在典型的生产系统中,这个数常常设置为3。
7.3. 修改masters
这一步只需要在master节点上执行。
这个文件存储备master节点的IP或机器名,建议使用机器名,每行一个机器 名。主master会将元数据等备份到备master节点,文件位于conf目录下。
这里,我们为masters文件增加如下一行即可:
Hadoop-A
7.4. 修改slaves
这一步也只需要在master节点上执行,以便master以ssh2方式去启动所有的slave节点。
这个文件存储slave节点的IP或机器名,建议使用机器名,每行一个机器 名。这里我们增加如下两行:
Hadoop-B
Hadoop-C
7.5. 修改hdfs-site.xml
所有机器做同样操作。
从src/hdfs目录下,将hdfs-default.xml复制到conf目录,并重命名成hdfs-site.xml, 这里不需要修改此文件。
8. 配置MapReduce
8.1. 修改mapred-default.xml
所有机器做同样操作。
从src/mapred目录下,将mapred-default.xml复制到conf目录,并重命名成mapred-site.xml。
<property>
<name>mapred.job.tracker</name>
<value>Hadoop-A:54311</value>
<description>The host and port that the MapReduce job tracker runs
at. If "local", then jobs are run in-process as a single map
and reduce task.
</description>
</property>
备 注:mapred.job.tracker指定 JobTracker的IP地址和端口号。 缺省值是local,,表示在本地同一Java进程内执行JobTracker和TaskTracker,,用于单机非分布式模式。
9. 安装Hive
hadoop-0.20.0中并没有集成二进 制的Hive,所以需要通过源代码编译一个,但是2009-8-19日提交的Hive并不能在hadoop-0.20.0上编译,而应当使用2009-8-4之后和2009-8-19之间的版本。
9.1. 安装ant
2) 下载后,将包apache-ant-1.7.1-bin.zip上传到/usr/local目录
3) 进入/usr/local目录,将apache-ant-1.7.1-bin.zip解压:unzip apache-ant-1.7.1-bin.zip
4) 进入/usr/local目录,为ant建一个软连接:ln -s apache-ant-1.7.1 ant
5) 修改/etc/profile,增加如下行:
export PATH=/usr/local/ant/bin:$PATH
至此,ant算是安装好了 。
9.2. 安装ivy
2) 下载后,将包apache-ivy-2.1.0-rc2-bin.tar.gz上传到/usr/local目录
3) 进入/usr/local目录,将apache-ivy-2.1.0-rc2-bin.tar.gz解压:tar xzf apache-ivy-2.1.0-rc2-bin.tar.gz
4) 进入/usr/local目录,为ivy建一个软连接:ln -s apache-ivy-2.1.0-rc2 ivy
6) 修改/etc/profile,增加如下行:
export IVY_HOME=/usr/local/ivy
至此,ivy算是安装好了。
9.3. 编译Hive
在编译Hive之前,请确保HADOOP_HOME和IVY_HOME两个环境变量已经生效。
1) 使用svn从http://svn.apache.org/repos/asf/hadoop/hive/trunk下载Hive源代码
2) 将下载来的Hive源代码打包,然后上传到Hadoop-A机器
3) 解压Hive源代码包
4) 修改shims/ivy.xml:
只保留0.20.0的配置,否则编译会出错
5) 运行ant开始编译:
ant -Dtarget.dir=/usr/local/hadoop/hive -Dhadoop.version=0.20.0 package
这步完成之后,Hive会被安装到/usr/local/hadoop/hive目 录下
6) 添加Hive环境变量,在/etc/profile文件中增加如下两 行:
export HIVE_HOME=/usr/local/hadoop/hive
export PATH=$HIVE_HOME/bin:$PATH
10. 安装HBase
1) 从http://svn.apache.org/repos/asf/hadoop/hbase/trunk下载最新的HBase源代码
2) 将HBase源代码打包,并上传到Linux上
3) 解压HBase源代码包
4) 编译HBase:
ant -Dtarget.dir=/usr/local/hadoop/hbase -Dhadoop.version=0.20.0 package
5) 编译成功之后,HBase可能并不象Hive一样自动安装到/usr/local/hadoop/hbase目录下,这个时候需要手工复制到HBase安装目录下:将build/hbase-0.21.0-dev整个目录复制到/usr/local/hadoop目录下,并将hbase-0.21.0-dev重命名成hbase即可
6) 进入/usr/local/hadoop/hbase/conf目录,将hbase-default.xml复制一 份,并命名成hbase-site.xml
7) 修改hbase-site.xml:
设置hbase.rootdir的值为:hdfs://Hadoop-A:54310/hbase;
设置hbase.master(hbase.master可能为hbase.master.port)的值为:Hadoop-A:60000
8) 修改hbase-env.sh:
设置环境变量JAVA_HOME:export JAVA_HOME=/usr/local/jre
9) 在Master节点,还需要修改regionservers, 在这个文件中列出所有的slave机器,一行一个机 器名:
Hadoop-B
Hadoop-C
这一步不用在slave节点上操作。
10) 通过以上操作,HBase已经安装和配置好,然后应当打 包,将它部署到集群的所有节点上
11. 体验
11.1. 启动和停止
11.1.1. hadoop
在启动Hadoop集群之前,需要先格式化,在master节点上执行下面 的命令即可:
hadoop namenode -format
11.1.2. start-all.sh
这个脚本用来启动Hadoop。
可以通过http://172.25.38.127:50070来查看HDFS的启动情况。
可以通过http://172.25.38.127:50030来查看MapReduce的启动情况。
11.1.3. stop-all.sh
这个脚本用来停止Hadoop。
11.2. 体验HDFS
HDFS的使用和普通的Linux命令差不多,只不过各类操作都必须作为hadoop命令的参数,如在hadoop上执行ls操作:
hadoop fs -ls /
这条命令相当于Linux下的ls /。
11.3. 体验MapReduce
体验MapReduce,可以使用Hadoop自带的WordCount,如:
hadoop jar wordcount.jar /x/x /z
其中wordcount.jar是WordCount的可执行包,/x/x是源文件,是一段以逗号分隔的英文片断,而/z是结果存放的目录。
11.4. 体验Hive
Hive的使用非常简单,照着http://wiki.apache.org/hadoop/Hive/GettingStarted上说的来操作就可以了。
12. FAQ
12.1. 如何查看Hadoop进程
如果安装了JDK,则在JDK的bin目录下有一个jps命令,可以用来查看java进程,如:
# jps
27612 NameNode
17369 Jps
16206 HQuorumPeer
15423 HMaster
27761 SecondaryNameNode
27839 JobTracker
其中,第一列为进程号,第二列 为进程名称。
12.2. ssh端口问题
如果ssh不是使用默认端口,则需要修改hadoop-env.sh文 件中的HADOOP_SSH_OPTS环境变量,假设ssh端口号为8000,则可以简单设置为:export HADOOP_SSH_OPTS="-p 8000"
如果安装了HBase,还应当修改hbase-env.sh文件中的HBASE_SSH_OPTS。
12.3. 首次ssh登录问题
首次通过ssh登录另一台机器时,可能会遇到一个yes确认过程,因此在启动之前,应当先手工或使用其它脚本ssh成功登录一次,否则容易遇到如下错误:
r# ./start-hbase.sh
DOSS38-127-sles10: Host key not found from database.
DOSS38-127-sles10: Key fingerprint:
DOSS38-127-sles10: xuror-ledab-buhim-zohok-tanop-cyrig-tysac-gyhyp-refan-semim-pyxex
DOSS38-127-sles10: You can get a public key's fingerprint by running
DOSS38-127-sles10: % ssh-keygen -F publickey.pub
DOSS38-127-sles10: on the keyfile.
DOSS38-127-sles10: warning: tcgetattr failed in ssh_rl_set_tty_modes_for_fd: fd 1: Invalid argument