备注: 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
1) 从 http://ant.apache.org/ 下载 ant 二进制安装包,选择 1.7.1 版本
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
1) 从 http://www.apache.org/dist/ant/ivy/ 下载 ivy 二进制安装包,选择 2.1.0 -rc2 版本
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