Hadoop 2.7.1 安装

本文讲一下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/

发表评论

电子邮件地址不会被公开。 必填项已用*标注

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax

您可以使用这些HTML标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>