安装前准备(各服务器环境保持一致)
- 硬件环境
hadoop只能安装在linux或unix服务器之上。
3台或以上linux服务器(h1,h2,h3)。如果使用windows服务器,则需要安装cygwin,在cygwin中部署hadoop - java环境
jdk 1.6及以上 - 在每台服务器上创建hadoop用户用于安装hadoop
useradd hadoop
- 在每台服务器上配置3台机器别名
增加内容vi /etc/hosts
192.168.1.1 h1 192.168.1.2 h2 192.168.1.3 h3
- 配置ssh
hadoop在运行时读取dfs中文件,机器之间需要互相无密码ssh,这时就需要配置机器之间的dsa/rsa。配置方式可参考如下:rm -rf ~/.ssh mkdir ~/.ssh chmod 700 ~/.ssh /usr/bin/ssh-keygen -t rsa /usr/bin/ssh-keygen -t dsa touch ~/.ssh/authorized_keys cd ~/.ssh ssh hadoop@h1 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keys ssh hadoop@h1 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keys ssh hadoop@h2 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keys ssh hadoop@h2 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keys ssh hadoop@h3 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keys ssh hadoop@h3 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keys chmod 600 ~/.ssh/authorized_keys
完成后可使用ssh命令验证如:ssh h1,来确认
- 下载hadoop
使用版本为0.20.2.0
解压hadooptar -xzvf hadoop-0.20.2.0.tar ln -s hadoop-0.20.2.0/ hadoop
现在每台服务器上hadoop路径为/home/hadoop/hadoop
开始安装(主要在h1机器上进行)
- 配置master内容如下
cat /home/hadoop/hadoop/conf/masters h1
- 配置slaves内容如下
cat /home/hadoop/hadoop/conf/slaves h2 h3
- 在每台机器上创建相同的目录结构用于存放数据文件
mkdir -p ~/data/tmp mkdir -p ~/data/data mkdir -p ~/data/name
- 配置hadoop环境变量文件
增加内容vi $HADOOP_HOME/conf/hadoop-env.sh
export JAVA_HOME=/usr/java export HADOOP_HOME=/home/hadoop/hadoop
- 配置conf/core-site.xml文件
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>hadoop.tmp.dir</name> <value>/home/hadoop/data/temp</value> <description>A base for other temporary directories.</description> </property> <property> <name>fs.default.name</name> <value>hdfs://h1:9000</value> <description>The name of the default file system. A URI whose scheme and authority determine the FileSystem implementation. The uri scheme determines the config property (fs.SCHEME.impl) naming the FileSystem implementation class. The uri authority is used to determine the host, port, etc. for a filesystem.</description> </property> </configuration>
- 配置conf/mapred-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>mapred.job.tracker</name> <value>h1:8021</value> <description>The host and port that the MapReduce job tracker runs at. If 'ocal' then jobs are run in-process as a single map and reduce task. </description> </property> </configuration>
- 配置conf/hdfs-site.xml
<?xml version="1.0"?> <?xml-stylesheet type="text/xsl" href="configuration.xsl"?> <!-- Put site-specific property overrides in this file. --> <configuration> <property> <name>dfs.replication</name> <value>1</value> </property> <property> <name>dfs.data.dir</name> <value>/home/hadoop/data/data</value> </property> <property> <name>dfs.name.dir</name> <value>/home/hadoop/data/name</value> </property> </configuration>
- 修改conf/hadoop-env.sh文件将日志放到统一位置
export HADOOP_LOG_DIR=/home/hadoop/0.20.2/log/hadoop
- 将master上配置好的配置文件复制到slave上去
scp conf/*.* h2:/home/hadoop/hadoop/conf/ scp conf/*.* h3:/home/hadoop/hadoop/conf/
- 启动hadoop
格式化namenode
启动hadoop守护进程bin/hadoop namenode -format
bin/start-all.sh
查看结果
- html管理链接
可以使用两个默认链接来查看job运行情况和空间使用情况
NameNode - http://h1:50070/
JobTracker - http://h1:50030/
- 执行一个分布式计算
将输入文件拷贝到分布式文件系统:
运行发行版提供的示例程序:$ bin/hadoop fs -put conf input
将输出文件从分布式文件系统拷贝到本地文件系统查看:$ bin/hadoop jar hadoop-examples-0.20.2.0.jar grep input output 'dfs[a-z.]+'
直接在分布式文件系统上查看输出文件:$ bin/hadoop fs -get output output $ cat output/*
$ bin/hadoop fs -cat output/*
- 集群调整
datanode或者tasktracker crash,或者需要向集群中增加新的机器时又不能重启集群。
把新机器的增加到conf/slaves文件中(datanode或者tasktracker crash则可跳过)
在新机器上进入hadoop目录,启动守护进程
在namenode上$bin/hadoop-daemon.sh start datanode $bin/hadoop-daemon.sh start tasktracker
$bin/hadoop balancer
错误列表
启动Datanode是报Incompatible namespaceIDs错误
在某次重新执行sh hadoop namenode -format后,启动Datanode时出现Incompatible namespaceIDs错误。
原因:每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有晴空datanode下的数据,导致启动时失败
解决方法:
在某次重新执行sh hadoop namenode -format后,启动Datanode时出现Incompatible namespaceIDs错误。
原因:每次namenode format会重新创建一个namenodeId,而tmp/dfs/data下包含了上次format下的id,namenode format清空了namenode下的数据,但是没有晴空datanode下的数据,导致启动时失败
解决方法:
- 方法1
- 停止集群
- 删除有问题节点的数据:conf/hdfs-site.xml里配置的dfs.data.dir目录
- 重新执行namenode format
- 启动集群
- 方法2
- 停止数据节点
- 编辑<dfs.data.dir>/current/VERSION的值,使其等于namenode的当前值
- 重启datanode