安装前准备(各服务器环境保持一致)
- 硬件环境
hadoop只能安装在linux或unix服务器之上。
3台或以上linux服务器(10.20.143.12,10.20.149.83,10.20.149.84)。如果使用windows服务器,则需要安装cygwin,在cygwin中部署hadoop - java环境
jdk 1.6及以上 - 配置3台机器别名
vi /etc/hosts
增加内容
10.249.200.157 h110.249.196.166 h210.249.196.3 h3 - 创建hadoop用户用于安装hadoop
useradd hadoop - 配置ssh
hadoop在运行时读取dfs中文件,机器之间需要互相无密码ssh,这时就需要配置机器之间的dsa/rsa。配置方式可参考如下:
rm -rf ~/.sshmkdir ~/.sshchmod 700 ~/.ssh/usr/bin/ssh-keygen -t rsa/usr/bin/ssh-keygen -t dsatouch ~/.ssh/authorized_keyscd ~/.sshssh hadoop@10.20.149.83 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keysssh hadoop@10.20.149.83 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keysssh hadoop@10.20.149.84 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keysssh hadoop@10.20.149.84 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keysssh hadoop@10.20.143.12 cat /home/hadoop/.ssh/id_rsa.pub >> authorized_keysssh hadoop@10.20.143.12 cat /home/hadoop/.ssh/id_dsa.pub >> authorized_keysssh本机也需要无密码cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keyschmod 600 ~/.ssh/authorized_keys完成后可使用ssh命令验证如:ssh h1,来确认
- 下载hadoop
使用版本为0.20.2.0
解压hadoop
tar -xzvf hadoop-0.20.2.0.tar现在hadoop路径为/home/hadoop/hadoop-0.20.2.0
开始安装(主要在h1机器上进行)
- 配置master内容如下
cat /home/hadoop/hadoop-0.20.2.0/conf/masters10.20.143.12 - 配置slaves内容如下
cat /root/hadoop/hadoop-0.20.2.0/conf/slaves10.20.149.8310.20.149.84 - 在每台机器上创建相同的目录结构用于存放数据文件
mkdir -p data/tmpmkdir -p data/datamkdir -p data/name - 配置hadoop环境变量文件
vi $HADOOP_HOME/conf/hadoop-env.sh增加内容
export JAVA_HOME=/usr/alibaba/javaexport HADOOP_HOME=/home/hadoop/hadoop-0.20.2.0 - 配置conf/core-site.xml文件
more 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 whosescheme and authority determine the FileSystem implementation. Theuri scheme determines the config property (fs.SCHEME.impl) namingthe FileSystem implementation class. The uri authority is used todetermine 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 runsat. If 'ocal' then jobs are run in-process as a single mapand reduce task.</description></property></configuration> - 配置conf/hdfs-site.xml
more 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-0.20.2.0/conf/scp conf/*.* h3:/home/hadoop/hadoop-0.20.2.0/conf/ - 启动hadoop
格式化namenode
bin/hadoop namenode -format启动hadoop守护进程
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目录,启动守护进程
$bin/hadoop-daemon.sh start datanode$bin/hadoop-daemon.sh start tasktracker - 在namenode上
$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下的数据,导致启动时失败
解决方法:- 方法1
- 停止集群
- 删除有问题节点的数据:conf/hdfs-site.xml里配置的dfs.data.dir目录
- 重新执行namenode format
- 启动集群
- 方法2
- 停止数据节点
- 编辑<dfs.data.dir>/current/VERSION的值,使其等于namenode的当前值
- 重启datanode
- 方法1
-
搭建好的h1 h2 h3是:
10.249.200.157 h1
10.249.196.166 h2
10.249.196.3 h3ssh打通失败看这里:
- 机器上执行ssh-keygen -t rsa生成密钥,碰倒提示直接回车。
- 将每台机器/$home/.ssh目录下的id_rsa.pub拷贝到/$home/.ssh/authorized_keys文件中。
- 但是发现始终还是需要验证密码才能ssh跳转。原来目录的权限设置有关系,比如hadoop用户,$home/hadoop 目录设置为700,authorized_keys设置为400,因为linux处于安全考虑。另外:authorized_keys文件中两个不同的条目最好换行空开。
为了debug所以在linux上搭建一个单机的hadoop
参考下面几篇文章:
我们使用的hadoop是0.20.2
下载地址:http://labs.renren.com/apache-mirror/hadoop/core/hadoop-0.20.2/hadoop-0.20.2.tar.gz
http://www.51testing.com/?uid-159438-action-viewspace-itemid-211599
http://hadoop.apache.org/common/docs/r0.20.2/cn/quickstart.html#Local
http://hi.baidu.com/yuweiming/blog/item/6bf4242db074c420359bf744.html
core-site.xml mapred-site.xml hdfs-site.xml 这三个文件的配置就参考这篇文章,h1换成自己的ip
datax如果没有的话,可以手工把hdfs文件拷贝过去。
bin/hadoop fs -mkdir -p /datax/noah/dev
bin/hadoop fs -chmod -R 777 /datax/noah
先从h1 上把datax通过的文件下载的本地磁盘,比如c:\hadoopTmp
然后在上传到自己开发环境的单机hadoop上。hadoop-debug的方法
http://code.google.com/p/hadoop-clusternet/wiki/DebuggingJobsUsingEclipse
hadoop debug时只能使用本地文件,不能使用hdfs
1.准备一个本地配置文件 hadoop-local.xml
<?xml version="1.0" ?> <configuration> <property> <name>fs.default.name</name> <value>file:///</value> </property> <property> <name>mapred.job.tracker</name> <value>local</value> </property> </configuration>
2.$HADOOP_HOME/bin/hadoop最后一行加入如下启动参数:exec "$JAVA" -Xdebug -Xrunjdwp:transport=dt_socket,address=7777,server=y,suspend=y $JAVA_HEAP_MAX $HADOOP_OPTS -classpath "$CLASSPATH" $CLASS "$@"
3.打包运行时使用如下:hadoop-debug jar distReport.jar -conf hadoop-local.xml -distReportInputPath input -distReportOutputPath result
4.eclipse连接远程debug
命令集合:1.解决权限问题hdfs权限问题 hadoop fs -chmod -R 777 /datax/noah2.linux下创建hdfs文件夹: hadoop fs -mkdir -p /datax/noah/dev3.复制文件命令:hadoop fsf -cp /data/file1 /data/file24.添加文件hadoop fs -put localfile hdfs://nn.example.com/hadoop/hadoopfile5.hadoop fs -copyFromLocal input/docs/tt.txt /user/tom/tt.txt6.hadoop fs -copyToLocal tt.txt tt.coy.txt