Hadoop 环境搭建

来源:互联网 发布:实木沙发推荐 知乎 编辑:程序博客网 时间:2024/05/21 06:54

        从全新安装的Ubuntu 12.10一步一步搭建Hadoop环境,主要有 JDK、JRE的安装, SSH的安装及免密码登录, 机器名称(hostnamt)和IP设定, VMWare 使用NAT时网络地址段的设定, hadoop三个配置文件的设定, 以及 hadoop 文件系统格式化、启动、样例的运行。

 

1. /etc/source.list, apt-get update
2. 设置 hosts
   192.168.1.101 Master.Hadoop
   192.168.1.102 Slave1.Hadoop
   192.168.1.103 Slave2.Hadoop
   192.168.1.104 Slave3.Hadoop
3. 设置机器 名称 及 IP
  
   改名称:
   /etc/hostname   => Master.Hadoop
   /etc/hosts      => 将 127.0.0.1 与 Master.Hadoop 关联.

   修改名称:
   iface eth0 inet static
   address 192.168.1.101
   netmask 255.255.255.0
   gateway 192.168.1.1

   /etc/init.d/networking start //启动网卡
   /etc/init.d/networking stop  //停止网卡
   /etc/init.d/networking restart //重启网卡(用这个就行了)

   修改VMWare 的 NAT 子网地址...
   在VMWare主界面,点击Edit>Virtual Network Editor菜单进入虚拟网卡参数设置界面。
   将VMnet8 的子网地址设置为 191.168.1.0
   并且关闭VMnet8 的自动dhcp.

   添加DNS服务器,
   sudo gedit /etc/resolv.conf
   nameserver 10.0.0.10

4. 添加hadoop 用户
   sudo addgroup hadoop
   sudo adduser -ingroup hadoop hadoop


   给hadoop用户添加权限:
   sudo gedit /etc/sudoers
   在root ALL=(ALL:ALL) ALL 下添加一行 hadoop ALL=(ALL:ALL) ALL


5. master 建立无密码登录环境( 在hadoop的配置过程中,这是一个重要的过程)
   sudo apt-get install openssh-server

   SSH无密码原理:
  Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode |

Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端Master复制到Slave上。
   即 Slave 要确定是谁连接的!!!
   当A有B的公钥时,才允许B进行连接!!!

  

   所有机器切换到hadoop用户.
   su - hadoop
  
   创建ssh-key
   ssh-keygen -t rsa -P ""
   进入~/.ssh/下,将id_rsa.pub 追加到信任列表中.
   cd ~/.ssh
   cat id_rsa.pub >> authorized_keys  


6. 为本机mater安装JDK、Hadoop
   sudo apt-get install openjdk-7-jre   %安装jre
   sudo apt-get install openjdk-7-jdk   %安装jdk

  
   将hadoop-1.0.4复制到/home/hadoop下面.

   修改hadoop-1.0.4目录的权限:
   sudo chown -R hadoop:hadoop hadoop-1.0.4
  
   修改conf/hadoop-env.sh
   export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386

      
   配置hadoop:
   core-site.xml  =>设置fs.default.name, 文件系统的位置 hdfs://Master.Hadoop:9000
   hdff-site.xml  =>配置备份方式, dfs.replication
   mapred-site.xml=>配置mapreduce的JobTracker,
http://Master.Hadoop:9001
   masters.xml    =>主节点备份??
   slaves.xml     =>从节点,Slave中,不需要此信息.

   JAVA_HOME: hadoop-env.sh  中添加  export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-i386 

  

7. 复制master的文件到slave上:
  
   公钥
   scp ~/.ssh/id_rsa.pub
hadoop@son-1:~/.ssh/id_rsa.pub.master

   修改hostname
   /etc/hostname

   hadoop文件的复制
   scp -r /home/hadoop/hadoop
hadoop@slave1:~

   修改hadoop目录的权限:
   sudo chown -R hadoop:hadoop hadoop

   将公钥添加到信任列表中:
   cat ~/.ssh/id_rsa.pub.master >> ~/.ssh/authorized_key

 

8. 验证hadoop是否正常工作:
   bin/hadoop namenode -format
   bin/start-all.sh
   在各个机器上以 jps 显示正在运行的进程。

   注意:
   使用单机执行时,不需要ssh,不需要DFS文件系统.
   输入直接在linux文件系统的某个文件夹下即可,输出也是直接输出到linux文件系统中。


   以下针对伪分布式 和 分布式:
  
   格式化文件系统:(如有必要,删除原 hadoop.tmp.dir 下所有目录 ), 这里要将 hadoop.tmp.dir 目标设置所有者为

hadoop.
   chown -R hadoop:hadoop /var/log/tmp_cluster
   bin/hadoop namenode -format
   启动:
   bin/start-all.sh
   创建输入文件夹:
   bin/hadoop dfs -mkdir input
   删除输出文件夹:
   bin/hadoop dfs -rmr output
   显示文件夹中内容:
   bin/hadoop dfs -ls input
   添加文件:
   bin/hadoop fs -put ./input_dir/test input
  
   运行
   bin/hadoop jar hadoop-examples-1.0.4.jar wordcount input output

   查看输出
   bin/hadoop dfs -cat output/part-r-00000

   Q: 为什么 很慢 ?虚拟机的原因?


9. 模式之间的切换:
   三种配置..
   单机 三个hadoop-site.xml : 均为空.
   伪pseudo分布式 : fs.default.name, mapred.job.tracker, dfs.replication, masters中指定SNN的位置(localhost)

,slaves中定从节点的位置(localhost)。
   全分布式 : master( namenode和jobTracker守护进程), 从节点( datanode和taskTracker守护进程 ), backup( SNN守

护进程 ).
       
   ln -s conf.cluster conf
   ln -s conf.pseudo_cluster conf
   ln -s conf.single conf
   rm conf

   使用软链接来实现各种配置文件中自由切换。