本文讲一下Hadoop的安装,其中有三种模式:
- 单机模式 //方便调试
- 伪分布式模式 //单节点上的伪分布式
- 真分布式模式 //配置比较复杂
安装准备:
1. linux 64位机,JDK环境必须7以上, 见前一篇文章
2. 在http://hadoop.apache.org/releases.html 的mirror site里面下载最新的安装包,然后解压$ tar -zxvf hadoop-2.7.1.tar.gz
3. 修改etc/hadoop/hadoop-env.sh, 如下:
export JAVA_HOME=这里改成你真实的jdk地址
4. 检查一下ssh localhost是否要输入密码
$ ssh localhost
如果要输入密码,需要创建公钥,然后添加进authorized_keys,这样ssh就不需要密码了。
$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa $ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
同理,如果你想实现“免密码在server1上ssh到server2”,只需要将server1上公钥追加到server2的~/.ssh/authorized_keys 文件里面即可。
一、单机模式
直接运行测试例子:
$ mkdir input $ cp etc/hadoop/*.xml input $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+' $ cat output/*
二、 伪分布式模式
配置修改:
etc/hadoop/core-site.xml, 配置NameNode URL:
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://localhost:9000</value> </property> </configuration>
etc/hadoop/hdfs-site.xml:
<configuration> <property> <name>dfs.replication</name> <value>1</value> </property> </configuration>
—>启动并执行测试例子1(没有用到Yarn)
$ bin/hdfs namenode -format //格式hdfs文件系统 $ sbin/start-dfs.sh //启动NameNode & DataNode ,如果启动成功,可以通过http://localhost:50070/ 访问 $ jps //应该有如下进程打印出来 26874 DataNode 28407 Jps 26758 NameNode 27090 SecondaryNameNode $ bin/hdfs dfs -mkdir /user //HDFS上创建目录 $ bin/hdfs dfs -mkdir /user/<username> //HDFS上创建目录 $ bin/hdfs dfs -put etc/hadoop input //将etc/hadoop 下面的文件放入input文件夹里面 $ bin/hdfs dfs -ls -R / //通过这个命令可以查看hdfs里面有什么目录和文件 $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+' //运行例子 $ bin/hdfs dfs -cat output/* //查看结果 $ sbin/stop-dfs.sh //关闭NameNode& DataNode
—>启动并执行测试例子2(有用到Yarn)
除了要按照上面修改etc/hadoop/core-site.xml和etc/hadoop/hdfs-site.xml外, 还需要修改下面2个配置文件:
etc/hadoop/mapred-site.xml:
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
etc/hadoop/yarn-site.xml 配置NodeManager:
<configuration> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> </configuration>
启动执行例子
$ bin/hdfs namenode -format //格式hdfs文件系统 $ sbin/start-dfs.sh //启动NameNode & DataNode ,如果启动成功,可以通过http://apc-lgdcdevl201:50070/ 访问 $ jps 26874 DataNode 28407 Jps 26758 NameNode 27090 SecondaryNameNode $ bin/hdfs dfs -mkdir /user //HDFS上创建目录 $ bin/hdfs dfs -mkdir /user/<username> //HDFS上创建目录 $ bin/hdfs dfs -put etc/hadoop input //将etc/hadoop 下面的文件放入input文件夹里面 $ bin/hdfs dfs -ls -R / //通过这个命令可以查看hdfs里面有什么目录和文件 $ sbin/start-yarn.sh //启动Yarn, 可以通过 http://apc-lgdcdevl201:8088 验证是否打开了 $ jps 30298 DataNode 31160 ResourceManager 30155 NameNode 30484 SecondaryNameNode 31560 Jps 31276 NodeManager $ bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+' //运行例子 $ bin/hdfs dfs -cat output/* //查看结果 $ sbin/stop-dfs.sh //关闭NameNode& DataNode $ sbin/stop-yarn.sh //关闭Yarn
总结: 通过例子我们可以知道了Hadoop运行的进程有哪些,包括了 NameNode,SecondaryNameNode, DataNode, 如果用到了Yarn,还会有进程ResourceManager和NodeManager, 具体每个进程有什么用,我会在后面的文章中讲到,而且 大家还可以通过浏览器查看mapreduce 例子运行的情况:
http://apc-lgdcdevl201:50070/ //执行sbin/start-dfs.sh后可以访问, 查看NameNode的状态 http://apc-lgdcdevl201:8088/cluster //启动yarn后可以访问
上面仅仅配置了几个参数,更多配置可以参考http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/ClusterSetup.html
三、 真分布式模式
下面我是用2台机器搭建的一个cluster环境:
- apc-lgdcdevl201 namenode & datanode机器
- apc-lgdcdevl202 datanode机器
具体步骤如下:
1. 配置2台机器ssh免密码可互相登陆,具体参照上面的配置命令;
2. 在2台机器上的/etc/profile文件中添加PATH路径,这样就可以在任意目录启动hadoop了。
export HADOOP_HOME=/home/szuser/ahu/hadoop-cluster export PATH=$PATH:$JAVA_HOME/bin:$HADOOP_HOME/bin:$HADOOP_HOME/sbin:
3. 修改5个配置文件,见我的配置:
core-site.xml
<configuration> <property> <name>hadoop.tmp.dir</name> <value>/tmp</value> <description>Abase for other temporarydirectories.</description> </property> <property> <name>fs.defaultFS</name> <value>hdfs://apc-lgdcdevl201:9000</value> </property> <property> <name>io.file.buffer.size</name> <value>4096</value> </property> </configuration>
hdfs-site.xml
<configuration> <property> <name>dfs.namenode.name.dir</name> <value>file:///home/szuser/ahu/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:///home/szuser/ahu/dfs/data</value> </property> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.nameservices</name> <value>hadoop-cluster1</value> </property> <property> <name>dfs.namenode.secondary.http-address</name> <value>apc-lgdcdevl201:50090</value> </property> <property> <name>dfs.webhdfs.enabled</name> <value>true</value> </property> </configuration>
mapred-site.xml
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> <final>true</final> </property> <property> <name>mapreduce.jobtracker.http.address</name> <value>apc-lgdcdevl201:50030</value> </property> <property> <name>mapreduce.jobhistory.address</name> <value>apc-lgdcdevl201:10020</value> </property> <property> <name>mapreduce.jobhistory.webapp.address</name> <value>apc-lgdcdevl201:19888</value> </property> <property> <name>mapred.job.tracker</name> <value>http://apc-lgdcdevl201:9001</value> </property> </configuration>
yarn-site.xml
<configuration> <!-- Site specific YARN configuration properties--> <property> <name>yarn.resourcemanager.hostname</name> <value>apc-lgdcdevl201</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>apc-lgdcdevl201:8032</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>apc-lgdcdevl201:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>apc-lgdcdevl201:8031</value> </property> <property> <name>yarn.resourcemanager.admin.address</name> <value>apc-lgdcdevl201:8033</value> </property> <property> <name>yarn.resourcemanager.webapp.address</name> <value>apc-lgdcdevl201:8088</value> </property> </configuration>
slaves
apc-lgdcdevl202 apc-lgdcdevl201
4. 用scp命令把这个hadoop目录全部复制到另外一台机器,最好两边的路径都一样。
5. 在任意一台机器上 依次执行:
start-dfs.sh start-yarn.sh mr-jobhistory-daemon.sh start historyserver
将启动4个进程, Master上的ResourceManager,NameNode; Salve 上的NodeManager, DataNode.正常情况下, 下面几个页面可以打开访问。
后台进程 | Web访问 | 备注 |
---|---|---|
NameNode | http://nn_host:port/ | Default HTTP port is 50070. |
ResourceManager | http://rm_host:port/ | Default HTTP port is 8088. |
MapReduce JobHistory Server | http://jhs_host:port/ | Default HTTP port is 19888. |
6. 执行 export HADOOP_ROOT_LOGGER=DEBUG,console (可以在终端打印详细日志,调试的时候比较有用), 然后运行上面的例子(jar包用绝对路径):
hadoop jar /home/szuser/ahu/hadoop-cluster/share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.1.jar grep input output 'dfs[a-z.]+'
7. 通过stop-all.sh可以关闭所有的进程
另外: 安装一般不会那么顺利,如果遇到问题,记得到/home/szuser/ahu/hadoop-cluster/logs目录下面查看日志,我就遇到了提交的job一直不进入running状态,通过tail -100f yarn-szuser-resourcemanager-apc-lgdcdevl201.log 查看Resourcemanager的日志说是host的问题。
其他博文参考:http://www.rigongyizu.com/hadoop-yarn-0-23-install-run-example/