hadoop2.6.0 完全分布式安装

    Hadoop2.6.0分布式安装过程用了3~4天才完成,其实过程到不是很复杂,主要是期间系统崩溃等各种问题,头都大了,万幸今天终于搞好了,最后运行了wordcount程序,也算是走个流程,需要的朋友可以参考一下。

安装的版本如下:

           Vmware workstation 11

           操作系统:CentOS6.5 64

hadoop2.6

jdk1.7.0_67

安装过程主要如下:

1.      配置hosts信息

2.      安装jdk

3.      配置ssh免密码登录

4.      安装hadoop

5.     wordcoun测试

 

1.     配置hosts信息

                 本人的安装过程采用了三台虚拟机:主机名分别为masterslave1slave2

              各自的IP如下:

master192.168.1.100

slave1192.168.1.101

slave2:    192.168.1.102

  2     安装jdk过程:

           我用的是jdk-7u67-linux-x64.tar.gz版本

            a>    解压安装jdk到路径:/usr/local/java

                   #  tar –zxvf jdk-7u67-linux-x64.tar.gz

            b>    配置java环境变量

             # vi /etc/profile
 

            打开profile文件后,在该文件后面添加如下配置信息:

    

#java environmet
export JAVA_HOME=/usr/local/java/jdk1.7.0_67
export PATH=$PATH:$JAVA_HOME/bin
export CLASSPATH=.:$JAVA_HOME/lib:$JAVA_HOME/jre/lib


         保存信息后

            # source /etc/profile使该配置生效

        c>     查看java版本

                  # java –version(若linux系统有默认java旧版本,一定要修改成为当前沃我们配置的java信息,因为后面安装hadoop时候也要用到java配置信息,详细方法网上有很 多资源)

3.     ssh免密码远程登录(这步很关键,当时没有研究仔细,都搞了大半天)

master节点为例,其他slave1slave2节点操作类似。

 

a>    生成私钥和公钥,操作如下:

b>    拷贝id_dsa.pubauthorized_keys

c>     完成后可以使用# ssh localhost测试一下是否在本地免密码登录是否能行,按照ab步骤一般没什么问题

 

d>    配置远程免密码登录,这一步是配置ssh免密码登录最为关键的步骤,这样比如master的公钥信息放在了slave1authorized_keys中,那么通过在master远程登录操作:# ssh slave1 就可以登录了,为了配置这三台虚拟机能够互相免密码登录,必须要将它们的公钥放在其他节点的authorized_keys中。我的方法是先将slave1slave2中的authorized_keys追加到masterauthor_keys中,然后再通过master想其他两个节点进行分发。具体操作如下:

slave1节点上(~/ssh目录下):

slave2节点上(~/ssh目录下):

master节点上:将从节点slave1slave2上的公钥信息追加的自己节点的authoried_keys中,然后转发到两个从节点上。

然后在slave1slave2节点总将~/.ssh下的authorized_keys_master的内容将原来的文件下面的authorized_keys文件内容覆盖掉,以slave1为例

# rm –rf ~/.ssh/authorized_keys

#cat ~/.ssh/authorized_keys_mater >> ~/.ssh/authorized_keys

slave2中进行同样类似的操作后就三台电脑就可以互相免密码登录了:

master上操作成功,其他节点类似:

4.     安装hadoop

(在master节点上操作,配置好的hadoop文件通过分发给slave1slave2节点)

a>    解压hadoop-2.6.0.tar.gz/usr/local/hadoop路径

 # tar –zxvf hadoop-2.6.0.tar.gz

b>    配置hadoop环境变量(/etc/profile文件下和配置java的一样)

Hadoop信息添加完成后,用# source /etc/profile使配置文件生效

c>     查看hadoop版本如下:

d>    接下来主要修改以下几个文件:

hadoop-env.sh

yarn-env.sh

slaves

core-site.xml

hdfs-site.xml

mapred-site.xml

yarn-site.xml

  修改hadoop-env.sh文件和yarn-env.sh文件一样主要修改jdk路径为我们自己的,找到对应的修改JAVA_HOME的模块:

          export JAVA_HOME=/usr/local/java/jdk1.7.0_67

 修改slaves文件,添加:

     slave1

     slave2

修改core-site.xml文件(友情提示:红棕色的为需要注意的地方,并且出现的路径也是必须提前手工创建):

 

<configuration>
         <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
       </property>
       <property>
                <name>io.file.buffer.size</name>
                <value>131072</value>
        </property>
       <property>
               <name>hadoop.tmp.dir</name>
               <value>file:/usr/local/hadoop/tmp</value>
               <description>Abase for other temporary directories.</description>
       </property>
        <property>
               <name>hadoop.proxyuser.u0.hosts</name>
               <value>*</value>
       </property>
       <property>
               <name>hadoop.proxyuser.u0.groups</name>
               <value>*</value>
       </property>
</configuration>

修改hdfs-site.xml文件:

<configuration>
          <property>
                <name>dfs.namenode.secondary.http-address</name>
               <value>master:9001</value>
       </property>
     <property>
             <name>dfs.namenode.name.dir</name>
             <value>file:/usr/local/hadoop/dfs/name</value>
       </property>
      <property>
              <name>dfs.datanode.data.dir</name>
              <value>file:/usr/local/hadoop/dfs/data</value>
       </property>
       <property>
               <name>dfs.replication</name>
               <value>2</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>
           </property>
          <property>
                  <name>mapreduce.jobhistory.address</name>
                  <value>master:10020</value>
          </property>
          <property>
                <name>mapreduce.jobhistory.webapp.address</name>
                <value>master:19888</value>
       </property>
</configuration>

修改yarn-site.xml文件:

<configuration>
<!-- Site specific YARN configuration properties -->
         <property>
               <name>yarn.nodemanager.aux-services</name>
               <value>mapreduce_shuffle</value>
        </property>
        <property>
<name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>
               <value>org.apache.hadoop.mapred.ShuffleHandler</value>
        </property>
        <property>
               <name>yarn.resourcemanager.address</name>
               <value>master:8032</value>
       </property>
       <property>
               <name>yarn.resourcemanager.scheduler.address</name>
               <value>master:8030</value>
       </property>
       <property>
            <name>yarn.resourcemanager.resource-tracker.address</name>
             <value>master:8031</value>
      </property>
      <property>
              <name>yarn.resourcemanager.admin.address</name>
               <value>master:8033</value>
       </property>
       <property>
               <name>yarn.resourcemanager.webapp.address</name>
               <value>master:8088</value>
       </property>
</configuration>

通过如上系列的hadoop文件配置结束后,将整个hadoop文件分发到slave1slave2/usr/local下面

master节点上操作:

# scp -rf /usr/local/hadoop root@slave1:/usr/local/

 # scp -rf /usr/local/hadoop root@slave2:/usr/local/


再回到slave1slave2中配置各自的hadoop路径并生效即可。

a>    接下来基本的配置已经完成,可以运行了,主要是在master节点上操作

²  格式化namenode

# hadoop namenode –format

 

²  启动start-dfs.sh

   # cd /usr/local/hadoop/sbin

   # ./start-dfs.sh

   此时在Master上面运行的进程有:namenode secondarynamenode

Slave1Slave2上面运行的进程有:datanode

Master节点的操作

 

Slave1节点上使用jps命令查看:

²  启动start-yarn.sh

# ./start-yarn.sh

此时在Master上面运行的进程有:namenode secondarynamenode resourcemanager Slave1Slave2上面运行的进程有:datanode nodemanager


以上操作都没问题后,就可以在master节点上通过网页版很方便的查看到信息,输入:192.168.1.100:50070

5.     Wordcount测试

这个测试使用的是hadoop自带的wordcount测试程序,结果倒是没问题,就是速度不行,不晓得是不是电脑配置的原因。

a>    新建要测试的文件如为:test.txt并输入你自己想要的字符或单词。

b>    创建hdfs文件夹

# hadoop fs –mkdir /input

c>    上传test.txt文件(可能上传操作会出现问题,错误提示贴在最后面了,如果遇到相同的,就按照解决方案做就行了)。

#hadoop fs –put test.txt /input

d>    开始执行wordcount程序

# hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.2.0.jar wordcount  /input /output

e>     执行完成后,查看结果

 至此,嗯也算搞完了,为后面的学习做准备。加油各^ - ^

 

上传hdfs文件遇到的一个问题,错误提示贴出来如下:

org.apache.hadoop.ipc.RemoteException(java.io.IOException): File /input/test.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1).  There are 0 datanode(s) running and no node(s) are excluded in this operation.

at org.apache.hadoop.hdfs.server.blockmanagement.BlockManager.chooseTarget4NewBlock(BlockManager.java:1549)

at org.apache.hadoop.hdfs.server.namenode.FSNamesystem.getAdditionalBlock(FSNamesystem.java:3200)

at org.apache.hadoop.hdfs.server.namenode.NameNodeRpcServer.addBlock(NameNodeRpcServer.java:641)

at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolServerSideTranslatorPB.addBlock(ClientNamenodeProtocolServerSideTranslatorPB.java:482)

at org.apache.hadoop.hdfs.protocol.proto.ClientNamenodeProtocolProtos$ClientNamenodeProtocol$2.callBlockingMethod(ClientNamenodeProtocolProtos.java)

at org.apache.hadoop.ipc.ProtobufRpcEngine$Server$ProtoBufRpcInvoker.call(ProtobufRpcEngine.java:619)

at org.apache.hadoop.ipc.RPC$Server.call(RPC.java:962)

at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2039)

at org.apache.hadoop.ipc.Server$Handler$1.run(Server.java:2035)

at java.security.AccessController.doPrivileged(Native Method)

at javax.security.auth.Subject.doAs(Subject.java:415)

at org.apache.hadoop.security.UserGroupInformation.doAs(UserGroupInformation.java:1628)

at org.apache.hadoop.ipc.Server$Handler.run(Server.java:2033)

 

at org.apache.hadoop.ipc.Client.call(Client.java:1468)

at org.apache.hadoop.ipc.Client.call(Client.java:1399)

at org.apache.hadoop.ipc.ProtobufRpcEngine$Invoker.invoke(ProtobufRpcEngine.java:232)

at com.sun.proxy.$Proxy14.addBlock(Unknown Source)

at org.apache.hadoop.hdfs.protocolPB.ClientNamenodeProtocolTranslatorPB.addBlock(ClientNamenodeProtocolTranslatorPB.java:399)

at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)

at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)

at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)

at java.lang.reflect.Method.invoke(Method.java:606)

at org.apache.hadoop.io.retry.RetryInvocationHandler.invokeMethod(RetryInvocationHandler.java:187)

at org.apache.hadoop.io.retry.RetryInvocationHandler.invoke(RetryInvocationHandler.java:102)

at com.sun.proxy.$Proxy15.addBlock(Unknown Source)

at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.locateFollowingBlock(DFSOutputStream.java:1532)

at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.nextBlockOutputStream(DFSOutputStream.java:1349)

at org.apache.hadoop.hdfs.DFSOutputStream$DataStreamer.run(DFSOutputStream.java:588)

put: File /input/test.txt._COPYING_ could only be replicated to 0 nodes instead of minReplication (=1).  There are 0 datanode(s) running and no node(s) are excluded in this operation

 

解决方案:将各个节点的防火墙关掉就解决了

 



 

 

 

 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值