hadoop安装笔记

  • 环境准备:
ESXi下的三台虚机
ip:172.16.80.15/16/17
os:centos 6.3
1cpu/2g内存/200G虚拟硬盘
 
  • 配置hosts文件
主机名及hosts设置
172.16.80.15 设置主机名:hadoop1 172.16.80.16 设置主机名:hadoop2 172.16.80.17 设置主机名:hadoop3
三台主机/etc/hosts文件增加以下内容
172.16.80.15         hadoop1
172.16.80.16         hadoop2
172.16.80.17         hadoop3

  • 建立hadoop运行帐号
三台主机分别执行如下命令
groupadd hadoop
useradd -g hadoop -G root grid
 
 
  • 配置ssh免密码连入

ssh无密码互通

1.确认ssh可以运行
   1.1. 修改sshd_config文件:vi /etc/ssh/sshd_config
   1.2. 将#PasswordAuthentication no的注释去掉,并且将NO修改为YES
   1.3. 将#PermitRootLogin yes的注释去掉
   1.4. 重新启动SSH服务,命令为:/etc/init.d/sshd restart
   1.5. 验证SSH服务状态,命令为:/etc/init.d/sshd status
 
2.更改互信节点的/etc/hosts文件

   2.1.打开hosts文件:vi /etc/hosts ,在其中一个节点上,如server1上将其他的server2,server3等节点的ip和hostname写上,如
    server1ip server1
    server2ip server2
    server3ip server3
    server4ip server4
  2.2 所有需互信节点均添加ip地址主机名对应关系。

3.设置server1
  3.1 生成ssh密钥对:ssh-keygen -t rsa 一路回车即可.
  3.2 查看是否有.ssh文件夹:ls -a 
  3.3 进入.ssh目录:cd .ssh 
  3.4 生成authorized_keys文件:cp id_rsa.pub authorized_keys  
  3.5 建立本身的信任连接:ssh server1 输入yes 无需密码

4.设置server2
  7.1 生成ssh密钥对:ssh-keygen -t dsa (dsa与server1的rsa设置不要相同) 
   7.2 进入.ssh目录:cd .ssh
   7.3 生成authorized_keys文件:cp id_dsa.pub authorized_keys 
   7.4 建立本身的信任连接:ssh server2 输入yes 无需密码
    
5.设置server3的方法与server1,server2相同

6.关键步骤
   6.1 将server2,server3的authorized_keys内容追加至server1的authorized_keys文件中。
    6.1.1 server2: cat authorized_keys 复制内容
    6.1.2 server1: vi authorized_keys 在最末行添加复制。
          server3 同上述操作相同
   6.2 将以追加的文件authorized_keys覆盖server2,server3上的authorized_keys文件。
    6.2.1 登陆server2:scp server1ip:/root/.ssh/authorized_keys /root/.ssh/authorized_keys
  6.2.2 登陆server3:scp server1ip:/root/.ssh/authorized_keys /root/.ssh/authorized_keys

7.确认机器的信任连接已建立
  7.1 对每台机器执行:ssh server1;ssh server2;ssh server3 在提示处输入yes回车。

 
  • 下载并解压hadoop安装
 
下载
tar -zxvf hadoop-0.20.2.tar.gz
mv hadoop-0.20.2 hadoop
 
  • 配置namenode,修改site文件
修改core-site.xml
<configuration>
<property>
        <name>fs.default.name</name>
        <value>hdfs://hadoop1:9000</value>
        <final>true</final>
</property>
<property>
        <name>hadoop.tmp.dir</name>
        <value>/home/grid/hadoop/tmp</value>
        <description>a base for other temporary directoryies</description>
</property>
 修改hdfs-site.xml
<configuration>
    <property>
         <name>dfs.name.dir</name>
         <value>/home/grid/hdfs/name</value>
         <final>true</final>
    </property>
    <property>
         <name>dfs.data.dir</name>
         <value>/home/grid/hdfs/data</value>
         <final>true</final>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>2</value>
        <final>true</final>
    </property>
</configuration>
修改 mapred-site.xml
<configuration>
   <property>
       <name>mapred.job.tracker</name>
       <value>hadoop1:9001</value>
       <final>true</final>
   </property>
</configuration>
 

 
 
  • 配置hadoop-env.sh
 
export JAVA_HOME=/etc/alternatives/jre #设置具体的java_home位置
 
  • 配置masters和slaves文件
masters 
     hadoop1
slaves
     hadoop2
     hadoop3
 
  • 向各节点复制hadoop
从hadoop1复制hadoop目录到hadoop2和hadoop3到相同的目录下
scp -r hadoop grid@hadoop2:~
scp -r hadoop grid@hadoop3:~
 
  • 在每台服务器上修改profile文件,增加如下几行
export JAVA_HOME=/etc/alternatives/jre
export HADOOP_INSTALL=/home/grid/hadoop
export PATH=$PATH:$HADOOP_INSTALL/bin
 
运行 source /etc/profile
echo $HADOOP_INSTALL
看是否正常显示设定的目录
 
 
  • 格式化namenode
hadoop namenode -format
 
  • 启动hadoop
start-all.sh
 
  • 用jps检验各后台进程是否成功启动
jps是jdk下的一个命令,如果安装的是jre是没有这个命令
  • 测试
hadoop dfs -put - input
Hadoop Hadoop Good
^C[grid@hadoop1 hadoop]$ hadoop dfs -cat input
Hadoop Hadoop Good
[grid@hadoop1 hadoop]$ hadoop jar /home/grid/hadoop/hadoop-0.20.2-examples.jar wordcount input output
 
  • 遇到的问题
hadoop dfs -cat output/part-r-00000
Good    1
Hadoop  2

在运行hadoop dfs -put - input的时候遇 到如下问题:

Hadoop:could only be replicated to 0 nodes, instead of 1

在Hadoop的环境搭建过程中,常常会遇到类似这样的错误信息提示:“could only be replicated to 0 nodes, instead of 1 ”,产生这样的错误原因有多种,这里列举出以下四种常用的解决方法以供参考:

  • 确保master(namenode) 、slaves(datanode)的防火墙已经关闭
  • 确保DFS空间的使用情况
  • Hadoop默认的hadoop.tmp.dir的路径为/tmp/hadoop-${user.name},而有的linux系统的/tmp目录文件系统的类型往往是Hadoop不支持的。( 本人在Ubuntu 10.10下测试伪分布式时就遇到了这种情况 
  • 先后启动namenode、datanode(本人没有碰到过这样的情况 )
    $hadoop-daemon.sh start namenode
    $hadoop-daemon.sh start datanode 

你可能感兴趣的:(hadoop)