1)安装Ubuntu或其他Linux系统

   a)为减少错误,集群中的主机最好安装同一版本的Linux系统,我的是Ubuntu12.04。

b)每个主机的登陆用户名也最好都一样,比如都是hadoop,不然到最后启动hadoop时会出现不管你密码是否输入正确,都会提示权限不够的错误,如果你之前装系统时没注意到这个问题,可以之后在每个主机上都新建一个用户hadoop来实现,命令如下:

     增加hadoop用户:sudo  adduser hadoop

把新加的hadoop用户,添加到admin组中,让其有sudo权限:sudo usermod -aG adm,sudo  hadoop

切换到hadoop用户,以hadoop用户重新登陆linux系统即可。

c)修改每个主机的主机名hostname:充当主节点的主机名为master,充当从节点的主机名为slave1,slave2,slave3,4.....N

     这里我的实验是2台主机,一个主机充当主节点master,一个主机充当从节点slave2

可以通过命令:sudo vi /etc/hostname  来打开并修改hostname,修改完之后重新打开一个终端就可以看到结果,例如我这里的主节点主主机中修改完登陆用户名和主机名后如下所示:

登陆用户名为:hadoop   主机名为:master

另外一个从节点用户名也为hadoop,主机名为:slave2

2)配置网络

  a)配置每个节点的IP使其在同一个局域网内:

例如:

master   IP:192.168.130.15     slave2   IP:192.168.130.41

可以通过命令ifconfig来修改IP,例如 :sudo ifconfig eth0 192.168.130.15(新IP地址)。

b)在每个master和slave的hosts文件中加入如下几行:

打开并修改hosts :sudo vi /etc/hosts

  新添加内容:

  192.168.130.15  master

192.168.130.41   slave2

 c)各个节点相互ping测试

例如:这里用主节点master ping下从节点slave2

如果你的实验中slave节点多于1个,每个节点之间都ping下,确保可以ping通。

3)安装JDK

     Hadoop是用JAVA编写的程序,Hadoop的编译及MapReduce的运行都需要使用JDK,因此在安装Hadoop前,必须安装JDK。

这里我安装的JDK版本是 jdk-6u38-linux-i586.bin,可用其他版本,但需要修改环境变量以及后面的配置路径。

  需对实验中所有主机执行以下步骤:

  1、把 jdk 安装文件拷贝到/usr/lib 目录下,然后安装
     sudo cp jdk-6u38-linux-i586.bin /usr/lib
     cd /usr/lib

修改jdk权限: sudo chmod +x jdk-6u38-linux-i586.bin
     修改完权限后就可以安装: sudo ./jdk-6u38-linux-i586.bin
      2、jdk安装成功后修改环境变量并且把 java 安装到系统
    a)配置环境变量,编写一个 java.sh并放到目录 /etc/profile.d 下面,java.sh内容如下:

 #set jdk environment
export JAVA_HOME=/usr/lib/jdk1.6.0_38
export JRE_HOME=/usr/lib/jdk1.6.0_38/jre
export CLASSPATH=.:$CLASSPATH:$JAVA_HOME/lib:$JAVA_HOME/jre/lib
export PATH=$JAVA_HOME/bin:$JAVA_HOME/jre/bin:$PATH

b)提升 java.sh 的权限:
    sudo chmod 775 /etc/profile.d/java.sh

    c)刷新 profile
    source /etc/profile

    d)把 Java 安装到系统:
         ln –s /usr/lib/jdk1.6.0_38/bin/java /usr/bin/java

    e)查看 Java 版本确定已经安装到系统:
  java –version


      如果看到版本信息,说明安装成功。

4)SSH 无密码验证配置

     Hadoop需要通过SSH来启动slave列表中的各台主机的守护进程,因此SSH必须安装。

SSH 是安全壳协议,使用公钥私钥机制,安全的在主机间传输文件,现在需要对集群进行无密码验证访问传输的配置。需对集群所有机器进行配置,建议以下操作集群按步骤同步,即所有机器都完成了一个步骤再进行下一步。

a)、安装 SSH
  sudo apt-get install ssh

b)、在 hadoop 用户下,使用命令:
  ssh-keygen –t rsa。

一路欢快的回车,有时需要在中间 y/n 时选择 y。
  将在~/.ssh 目录下产生一个 id_rsa 的私钥 和 id_rsa.pub 的公钥。

ssh-keygen 表示生成密钥,-t 表示指定生成的密钥类型,这里是rsa

  c)、进入~/.ssh 目录下,将 id_rsa.pub 复制为 authorized_keys,即把公钥加入到授权的key中。
  cd ~/.ssh
  cp id_rsa.pub authorized_keys
   
    d)将本机公钥发给所有其他机器

这里以slave2为例:

scp id_rsa.pub hadoop@master:~/.ssh/slave2_key

中途可能会提示让你输入对方主机的密码,输入之后就会提示成功发送。

所有机器完成此步骤后,在每台机器~/.ssh 目录下都会有其他所有机器发送来的公钥。

例如在执行完上面的命令后,此在master主机的~/.ssh/目录下会多出个slave2_key:

e)将收集到的所有公钥添加到 authorized_keys中

例如:上面master收到了slave2发来的slave2_key后,把其添加到authorized_keys中

cat slave2_key  >>  authorized_keys

f)  ssh登录

对于两台主机第一次 ssh 连接,需要确认 yes,很重要,必须确保集群所有机器相互 ssh连接过,否则后面 hadoop 安装会出问题。
         以 master 为例
        
         此时你已经登录到别人的机器了,hadoop@master 变为 hadoop@slave2,可以对slave2机器进行操作了。
         exit
         注意必须要退出,否则你后面做的所有操作都是在其他人的机器上。

5)安装Hadoop  

    我这里安装的版本为:hadoop-1.2.0.tar.gz  也可以到官网下载其他版本。

安装步骤如下:

a):在/opt 目录下建立 hadoop 目录,把 hadoop-1.2.0.tar.gz 拷贝到/opt/hadoop 目录下,然后解压

sudo mkdir /opt/hadoop

    sudo cp hadoop-1.2.0.tar.gz /opt/hadoop
    cd /opt/hadoop
    sudo tar –zxvf hadoop-1.2.0.tar.gz
    cd hadoop-1.2.0
    b) :  配置Hadoop

   (1)指定JDK的安装位置:

编辑 conf/hadoop-env.sh 文件,把 JAVA_HOME 设置成 Java 安装根路径,如下:
      export JAVA_HOME=/usr/lib/jdk1.6.0_38 ,记住把 export 前面的#去掉

(2)配置conf/目录下的core-site.xml文件,这里配置的是HDFS的地址和端口号:

配置之前请先在/opt/hadoop 目录下建立 tmp 文件夹:sudo mkdir /opt/hadoop/tmp
   

#core-site.xml

 1 <configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<!-- file system properties -->
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>

     (3)配置conf/目录下的 hdfs-site.xml文件:

配置之前新建目录 /opt/hadoop/hdfs :sudo mkdir /opt/hadoop/hdfs

#hdfs-site.xml 

  <configuration>
<property>
<name>dfs.replication</name>
<value>1</value> #这里1是数据副本数量,默认是3,我这里写成1,因为我只用了1个datacode,slave2
</property>
<property>
<name>dfs.name.dir</name>
<value>/opt/hadoop/hdfs/name</value>
</property>
<property>
<name>dfs.data.dir</name>
<value>/opt/hadoop/hdfs/data</value>
</property>
</configuration>

   (4)配置 conf/mapred-site.xml
       这里是配置MapReduce的配置文件,配置JobTracker的地址和端口

# conf/mapred-site.xml
1 <configuration>
<property>
<name>mapred.job.tracker</name>
<value>master:9001</value>
</property>
</configuration>

(5)配置 conf/masters 和 conf/slaves 来设置主从节点,注意最好使用主机名,并且保证各节点之间可以通过主机名可以互相访问,每个主机名一行:
              我这里的 conf/masters内容为:

master

conf/slaves内容为:

  slave2

(6)提升 hadoop 权限,这里因为安装 hadoop 需要足够高的权限,所以一个简便方法是将整个 hadoop 文件提升至 777 权限:
        sudo chmod 777 -R /opt/hadoop

   对每台机器都进行上述操作。

6)启动hadoop

     下面操作在master主机上进行     a)首先格式化hadoop

     ./bin/hadoop namenode -format
    

b)启动hadoop

./bin/start-all.sh   启动提示如下:


       从上图中可以看出是先启动了namenode,然后是启动datanode,再启动secondarynamenode,最后启动taskracker.

c)验证方式

1)用命令查看集群状态:./bin/hadoop  dfsadmin –report

  (2)也可以用java自带jps查看进程:

在master主机上查看结果如下:

也可以在slave主机上用jps查看下TaskTracker和DataNode是否被启动

(3)登录http://master:50070和http://master:50030查看集群状态

http://master:50070状态如下:

  http://master:50030状态如下:

可以看出启动了一个datanode,因为我这里就只有一个slave2,如果多台主机组成集群,状态更明显。

   d)关闭hadoop

./bin/stop-all.sh

先关闭了jobtracker,其次关闭slave2上的tasktracker,然后关闭namenode,关闭datanode,最后关闭secondarynamenode

最新文章

  1. el: 在jsp页面内使用函数判断子字符串
  2. ActiveReports 9 新功能:借助目录(TOC)控件为报表添加目录功能
  3. &quot;德意志之歌&quot;的历史
  4. hadoop各版本下载
  5. 关于 rem 作为单位设置大小
  6. PHP与memcache和memcached以及安装使用
  7. css3绘制几何图形
  8. Codeforces#364Div2
  9. Guava 教程(4):条件,多重映射和分片
  10. Django+Bootstrap+Mysql 搭建个人博客(五)
  11. JAVA Swing 改变标题栏左上角默认咖啡图标
  12. iOS关键词weak和assign的区别
  13. ios 当margin-left margin-right 超过设备宽度
  14. Spring Security(十):3. What’s New in Spring Security 4.2 (新功能)
  15. 一个简单的Oracle和 SQLSERVER 重建所有表索引的办法
  16. JS 01 变量_数据类型_分支循环_数组
  17. 使用idea 在springboot添加本地jar包的方法
  18. CSS-下拉导航条
  19. 阿里云安装docker 指定版本
  20. Flutter - 弹出底部菜单Show Modal Bottom Sheet

热门文章

  1. Java RGB数组图像合成 ImageCombining (整理)
  2. session_start保存的客户端cookie的值什么时候改变
  3. 【解题报告】[动态规划] RQNOJ - PID273 / 马棚问题
  4. postgresql pg_hba.conf
  5. 恢复SD卡错删数据
  6. 提高zxing生成二维码的容错率及zxing生成二维码的边框设置
  7. Php 笔记1-----request和 response
  8. &lt;转+改&gt;Web测试中关于登录的测试
  9. 详解centos下vi的用法
  10. Python 统计文本中单词的个数