Fedora20+Hadoop2.2.0完全分布式安装

注:此篇博文只是自己在Fedora20平台上安装hadoop2.2.0的一些随心笔记。写下来,希望大家少走弯路。

以下是我的集群配置:

Fedora20-64bit

hadoop-2.2.0-64bit

jdk1.7.0_65

一、安装配置运行hadoop所需的jdk

下载地址:http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html

在电脑上安装配置:

tar -xvzf jdk-7u65-linux-x64.tar.gz 
cp -r jdk1.7.0_65 /usr/java/jdk1.7.0_65

我这里将jdk安装在了/usr/java文件夹下,名字叫做jdk1.7.0_65。接下来,配置jdk的环境变量:

vim /etc/profile
export JAVA_HOME=/usr/java/jdk1.7.0_65
export PATH=$PATH:$JAVA_HOME/bin

手动配置默认jdk,在终端依次输入以下命令:

sudo update-alternatives --install /usr/bin/java java /usr/java/jdk1.6.0_43/bin/java 300
sudo update-alternatives --install /usr/bin/javac javac /usr/java/jdk1.6.0_43/bin/javac 300
sudo update-alternatives --install /usr/bin/jps jps /usr/java/jdk1.6.0_43/bin/jps 300
sudo update-alternatives --install /usr/bin/jar jar /usr/java/jdk1.6.0_43/bin/jar 300
sudo update-alternatives --install /usr/bin/javah javah /usr/java/jdk1.6.0_43/bin/javah 300
sudo update-alternatives --install /usr/bin/javap javap /usr/java/jdk1.6.0_43/bin/javap 300

继续在终端执行以下命令,选择我们安装的jdk,根据列出来的选择项选择我们安装的jdk:

sudo update-alternatives --config java
sudo update-alternatives --config javac
sudo update-alternatives --config javaws

之后,在终端输入:

source vi /etc/profile

使修改的环境变量生效。

继续输入java -version,如果输出结果如下类似,则说明环境变量配置完好。

java -version
java version "1.7.0_65"
Java(TM) SE Runtime Environment (build 1.7.0_65-b13)
Java HotSpot(TM) 64-Bit Server VM (build 24.51-b03, mixed mode)

,到了这里,还需要配置集群的ssh免密码登陆。

在主节点(NameNode)的终端执行命令:

ssh-keygen -t rsa

然后一路Enter,  产生秘钥位于/root/.ssh/文件夹下

然后将主节点产生的公有秘钥发送到其他节点

ssh-copy-id –i ~/.ssh/id_rsa.pub hadoop@slave0x

实际上就是将NameNode生成的公有秘钥发送到集群的其他各个节点,然后在主节点ssh slave0x节点即可,第一次可能需要输入密码,之后就可以实现无密码登陆了。

cat .ssh/id_rsa.pub >> .ssh/authorized_keys

这条命令是可以实现本机ssh无密码登陆的。

二、下载hadoop2.2.0安装包,可以直接去官网下载,但是在官网上面下载的2.2.0版本的hadoop只支持32bit系统的,并不       支持64位操作系统。如果直接在官网下载的话,还需要根据自己的情况将hadoop的源码编译成为64位的。

      官网下载地址下载地址:http://apache.fayea.com/apache-mirror/hadoop/common/

三、hadoop2.2.0的编译好的适用64位的版本,已经编译好,在群共享里了,我也存到网盘上了,大家可以下载。

链接: http://pan.baidu.com/s/1pJmGVm7 密码: 9rdf

如果自己有兴趣的话,可以自己编译一次,其实也不难,就是用到的软件有点多,具体的编译步骤,接下来会补上,也可以自己去google,这里先介绍在Fedora20平台上的hadoop2.2.0安装。

注:如果运行的hadoop-2.2.0版本不是64位的,会出现下面的错误:

在使用./sbin/start-dfs.sh或./sbin/start-all.sh启动时会报出这样如下警告:
Java HotSpot(TM) 64-Bit Server VM warning: You have loaded library /usr/local/hadoop-2.2.0/lib/native/libhadoop.so.1.0.0 which might have disabled stack guard. The VM will try to fix the stack guard now.
....
Java: ssh: Could not resolve hostname Java: Name or service not known
HotSpot(TM): ssh: Could not resolve hostname HotSpot(TM): Name or service not known
64-Bit: ssh: Could not resolve hostname 64-Bit: Name or service not known
....

这个问题的错误原因会发生在64位的操作系统上,原因是从官方下载的hadoop使用的本地库文件(例如lib/native/libhadoop.so.1.0.0)都是基于32位编译的,运行在64位系统上就会出现上述错误。

网上的解决办法有两种:

(1)在64位系统上重新编译hadoop

(2)hadoop-env.shyarn-env.sh中添加如下行: 

export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_HOME}/lib/native  

export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"  

注:/home/hadoop/hadoop-2.2.0为自定义的下载hadoop文件的解压路径

四、首先将编译好的hadoop2.2.0在主节点即namenode解压安装。我这里是安装在主文件夹目录下,即/home/hadoop目录下。

五、接下来Fedora20系统有些坑爹的地方,可能这也是这个系统为什么比较安全的原因吧。Fedora20每个电脑用于通信的端口22,这个端口竟然在配置文件中是被注释掉的,当然你也可以自己定义端口。

打开sudo vi /etc/ssh/ssh_config 

 #port 22   
 #protocol 2,1

将这两行前边的#去掉

六、Fedora20集群电脑之间的通信还需要考虑到防火墙的关系,如果不把防火墙关闭,通信是完不成的。

注:

如果不将防火墙关闭,在启动nodemanager的时候会出现以下错误:

java.net.NoRouteToHostException: No Route to Host from
localhost.localdomain/nodeip to ip:8031 failed on
socket timeout exception: java.net.NoRouteToHostException: No route to
host; For more details see: http://wiki.apache.org/hadoop/NoRouteToHost
..................省略了好多东西 Caused by: java.net.NoRouteToHostException: No
route to host at sun.nio.ch.SocketChannelImpl.checkConnect(Native
Method) ..................省略了好多东西 at
org.apache.hadoop.ipc.Client.getConnection(Client.java:1399) at
org.apache.hadoop.ipc.Client.call(Client.java:1318) ... 19 more

还有,关闭linux系统的防火墙方法不一样,下面介绍介绍几个:

(1)对于ubuntu关闭防火墙:

sudo ufw disable

如果你要防火墙可以运行:

sudo apt-get remove iptables

(2)对于fedora关闭防火墙:

sudo systemctl stop firewalld.service

实在不行的话,可以直接禁用:

 sudo systemctl disable firewalld.service

七、在开启hadoop集群之前确保ssh服务已经开启。

在Fedora20上查看和开启ssh服务的命令:

查看现在运行的ssh服务状态:

sudo systemctl status sshd.service

开启ssh服务:

sudo systemctl enable sshd.service
sudo systemctl start sshd.service

八、配置hadoop2.2.0

1.配置hadoop的环境变量

sudo vi /etc/profile

在profile文件末尾配置hadoop2.2.0的环境变量如下:

export HADOOP_HOME=/home/hadoop/hadoop-2.2.0
export PAHT=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
export HADOOP_LOG_DIR=/usr/zkt/hadoop2.2.0/hadoop-2.2.0/logs
export YARN_LOG_DIR=$HADOOP_LOG_DIR
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export HADOOP_OPTS="-Djava.library.path=$HADOOP_HOME/lib"

注:在64位系统上需要加入最后的两行配置信息

2.修改hadoop2.2.0的配置文件(在hadoop-2.2.0/etc/hadoop文件夹下)

 1、修改hadoop-env.sh 、yarn-env.sh 确保hadoop运行所需要的java环境
    # The java implementation to use.
    export JAVA_HOME=/usr/java/jdk1.7.0_65
    2、修改core-site.xml文件  定义文件系统的配置
<configuration>
 <property>  
    <name>fs.default.name</name>  
        <value>hdfs://master:9000/</value>  
 </property>  
 <property>
         <name>hadoop.tmp.dir</name>
         <value>/home/hadoop/hadoop2.2.0/tmp</value>
  </property>  
 </configuration>
  3、修改hadfs-site.xml  定义名称节点和数据节点
  <configuration>
<property>  
        <name>dfs.datanode.data.dir</name>  
        <value>/home/hadoop/hadoop2.2.0/hdf/data</value>  
        <final>true</final>  
   </property>  
     <property>  
       <name>dfs.namenode.name.dir</name>  
       <value>/home/hadoop/hadoop2.2.0/hdf/name</value>  
       <final>true</final>  
   </property>  
   <property>  
        <name>dfs.replication</name>  
        <value>2</value>  
   </property>
 <property>  
            <name>dfs.permissions</name>  
            <value>false</value>  
    </property> 
</configuration>
4、修改mapred-site.xml   Configurations for MapReduce Applications
   <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>  
  5、修改yarn-site.xml文件    
     该文件主要用于:
     1、Configurations for ResourceManager and NodeManager:
     2、Configurations for ResourceManager:
     3、Configurations for NodeManager:
    4、Configurations for History Server (Needs to be moved elsewhere):
    <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>

九、创建第八步多出来的文件夹

data  tmp  name  log    mkdir -r  /home/hadoop/hadoop2.2.0/hdf/data 等

十、为上边创建的文件夹赋予权限,否则可能会出现无文件创建或无法执行写权限

进去到root用户:

su - root

chown -R hadoop:hadoop /usr/zkt/hadoop2.2.0 (不明白的可以查看chown命令)

或者切换到hadoop用户下 通过chmod -R 777 data 赋权限

十一、将配置好的hadoop-2.2.0依次复制到集群的其他节点

scp -r /home/hadoop/hadoop-2.2.0 hadoop@slave01:~/

按照之前在主节点做过的事情,在其他的节点也都做一遍,也可以自己远程登陆执行。主要的是端口22和防火墙。

十二、下面打开集群,测试。

1.hadoop的namenode的初始化

bin/hdfs namenode -format

2.启动hadoop的各项服务

sbin/start-dfs.sh
sbin/start-yarn.sh

3.查看启动的节点进程

jps

(1)主节点(NameNode)出现以下的服务,表示主节点hadoop启动成功

ResourceManager
SecondaryNameNode
NameNode
Jps

(2)从节点(DataNode)出现以下的服务,表示从节点slave的hadoop服务启动成功:

DataNode
NodeManager
Jps

(3)hadoop2.x还有一个jobhistory服务

启动:

sbin/mr-jobhistory-daemonn.sh start historyserver

(4)可以在相应的web端口查看启动的hadoop服务

查看各节点状态

master:50070


可能有很多疏漏的地方,大家可以多多提提改进意见!

你可能感兴趣的:(Fedora20+Hadoop2.2.0完全分布式安装)