`

第一章:小朱笔记hadoop之环境配置以及集群部署-集群环境配置

 
阅读更多

第一章:小朱笔记hadoop之环境配置以及集群部署

第一节.集群环境配置

(1)hadoop部署注意项

(a)hadoop各节点的分布:namenode和jobtracker部署:namenode与jobtracker分离.tasktracker与datanode配对.
(b)Trash:  hadoop回收站功能默认是禁止的,删除文件,就是直接删除了,所以要记得配置好trash。当rm后,它会move到当前文件夹下的.Trash目录下,误删文件后,可以恢复文件。参考配置属性fs.trash.interval。
(c)map和reduce任务的JVM选项:mapred.child.java.opts配置map和reduce子进程的JVM属性,如果内存充裕,可以改为 -Xmx2400m.
(d)Tasktracker的map和reducer数量配置: 属性mapred.tasktracker.map.tasks.maximum配置这个tasktracker同时可以最多跑多少个map task,要根据tracker的内存和磁盘情况规划。还有属性mapred.tasktracker.reduce.tasks.maximum配置这个tasktracker同时可以最多跑多少个reduce task.同理也是要根据tracker的内存和磁盘情况规划。例如8核的机器,8个map和8个reducer。map中间结果开启压缩操作(尤其是snappy和LZO)的时候,cpu的负载会比较高,map和reducer的数量可以根据自己的业务情况灵活调节。
(e)缓冲区大小:io.file.buffer.size默认是4KB,作为hadoop缓冲区,用于hadoop读hdfs的文件和写hdfs的文件,还有map的输出都用到了这个缓冲区容量,对于现在的硬件很保守,可以设置为128k(131072),甚至是1M(太大了map和reduce任务可能会内存溢出)。

 

(2)hadoop配置文件说明

写道
dfs.hosts:记录即将作为datanode加入集群的机器列表
mapred.hosts :记录即将作为tasktracker加入集群的机器列表
dfs.hosts.exclude mapred.hosts.exclude: 分别包含待移除的机器列表
master:记录运行辅助namenode的机器列表
slave:记录运行datanode和tasktracker的机器列表
hadoop-env.sh:记录脚本要用的环境变量,以运行hadoop
core-site.xml:hadoop core的配置项,例如hdfs和mapreduce常用的i/o设置等
hdfs-site.xml: hadoop守护进程的配置项,包括namenode、辅助namenode和datanode等
mapred-site.xml: mapreduce守护进程的配置项,包括jobtracker和tasktracker
hadoop-metrics.properties: 控制metrics在hadoop上如何发布的属性
log4j.properties: 系统日志文件、namenode审计日志、tasktracker子进程的任务日志的属性

 

(3)hadoop集群配置步骤

   采用4台安装Linux环境的机器来构建一个小规模的分布式集群,hadoop采用官网hadoop-1.0.3

 

   第一步:4台机器建立统一的用户hadoop 注意:一定要建立相同的用户名,ssh需要无密码登录

 

   第二步:安装jdk

    下载jdk,安装并配置环境变量
    修改/etc/profile:

#jdk配置
JAVA_HOME=/opt/java
JRE_HOME=/opt/java/jre
CLASSPATH=$CLASSPATH:.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin:$HOME/bin
export JAVA_HOME JRE_HOME CLASSPATH PATH

            保存,并执行source /etc/profile

 

   第三步:配置host

/etc/hosts 这个文件是用来配置主机将用的DNS服务器信息,是记载LAN内接续的各主机的对应[HostName和IP]用的。当用户在进行网络连接时,首先查找该文件,寻找对应主机名(或域名)对应的IP地址。

我们要测试两台机器之间知否连通,一般用"ping 机器的IP",如果想用"ping 机器的主机名"发现找不见该名称的机器,解决的办法就是修改"/etc/hosts"这个文件,通过把LAN内的各主机的IP地址和HostName的一一对应写入这个文件的时候,就可以解决问题。
修改/etc/hosts ,保证100、101、102、103 四台机器 hosts文件相同
192.168.1.100    master 
192.168.1.101    slaveA 
192.168.1.102    slaveB
192.168.1.103    slaveC

 

   第四步:SSH无密码验证配置

      Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个DataNode上的各种守护进程的。这就必须在节点之间执行指令的时候是不需要输入密码的形式,故我们需要配置SSH运用无密码公钥认证的形式,这样NameNode使用SSH无密码登录并启动DataName进程,同样原理,DataNode上也能使用SSH无密码登录到NameNode。如果只是通过master控制集群的话,就不必配置slave访问master的无密码登录了。
SSH无密码原理
  Master(NameNode | JobTracker)作为客户端,要实现无密码公钥认证,连接到服务器Salve(DataNode | Tasktracker)上时,需要在Master上生成一个密钥对,包括一个公钥和一个私钥,而后将公钥复制到所有的Slave上。当Master通过SSH连接Salve时,Salve就会生成一个随机数并用Master的公钥对随机数进行加密,并发送给Master。Master收到加密数之后再用私钥解密,并将解密数回传给Slave,Slave确认解密数无误之后就允许Master进行连接了。这就是一个公钥认证过程,其间不需要用户手工输入密码。重要过程是将客户端Master复制到Slave上。
master机器:

写道
hadoop@master:ssh-keygen -t rsa
hadoop@master:ssh-add ~/.ssh/id_rsa
hadoop@master:cp ~/.ssh/id_rsa.pub authorized_keys
hadoop@master:cd .ssh
hadoop@master:~/.ssh# chmod 600 authorized_keys

 
slave机器:

写道
hadoop@slaveA:mkdir .ssh
hadoop@slaveB:mkdir .ssh
hadoop@slaveC:mkdir .ssh

 
master机器:

 

写道
hadoop@master:scp ~/.ssh/authorized_keys slaveA:~/.ssh/
hadoop@master:scp ~/.ssh/authorized_keys slaveB:~/.ssh/
hadoop@master:scp ~/.ssh/authorized_keys slaveC:~/.ssh/

 

   第五步:配置hadoop环境

(1)修改/etc/profile:
 

#hadoop配置
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin 

 
(2)配置hadoop-env.sh

 

 

# set java environment
export JAVA_HOME=/opt/java

 

(3)配置core-site.xml文件
 

       <property> 
                <name>fs.default.name</name> 
                <value>hdfs://master:9000</value> 
        <description> 
            NameNode的URI路径,格式:hdfs://主机名:端口/ 
        </description> 
        </property> 
        <property> 
                <name>fs.checkpoint.period</name> 
                <value>3600</value> 
        <description> 
            进行checkpoint的周期时间间隔,单位:秒 
        </description> 
        </property> 
        <property> 
                <name>fs.checkpoint.size</name> 
                <value>67108864</value> 
        <description> 
            日志文件达到这个上限值时,将进行一次强制checkpoint操作,单位:byte   
        </description> 
        </property> 
        <property> 
                <name>hadoop.tmp.dir</name> 
                <value>/opt/hadoop/var/tmp</value> 
        <description> 
            Hadoop的默认临时路径,这个最好配置,如果在新增节点或者其他情况下莫名其妙的DataNode启动不了,
        就删除此文件中的tmp目录即可。不过如果删除了NameNode机器的此目录,那么就需要重新执行NameNode格式化的命令。
        /hadoopRun/tmp这里给的路径不需要创建会自动生成。 
        </description> 
        </property> 
    <property>
      <name>fs.trash.interval</name>
      <value>1</value>
      <description>Number of minutes between trash checkpoints.回收站一定要配置的,不然后果很可怕。
      If zero, the trash feature is disabled.
      </description>
    </property>

 

(4)配置hdfs-site.xml文件

 

     <property>
      <name>dfs.replication</name>
      <value>3</value>
    </property>
    <property>
      <name>dfs.permissions</name>
      <value>false</value>
    </property>
    <property>
      <name>dfs.name.dir</name>
      <value>/opt/hadoop/var/hdfs/name</value>
    </property>
    <property>
      <name>dfs.data.dir</name>
      <value>/opt/hadoop/var/hdfs/data</value>
    </property>
    <property> 
       <name>dfs.hosts.exclude</name> 
       <value>/opt/hadoop/conf/excludes</value> 
       <description>Names a file that contains a list of hosts that are  
       not permitted to connect to the namenode.  The full pathname of the  
       file must be specified.  If the value is empty, no hosts are  
       excluded.</description>
    </property>

 

   (5)配置mapred-site.xml文件

        <property> 
        <name>mapred.job.tracker</name> 
                <value>master:9001</value> 
        </property> 
        <property> 
                <name>mapred.local.dir</name> 
                <value>/opt/hadoop/var/mapred</value> 
        </property>

 

  (6)修改conf/masters
   

写道
master

 
  (7)修改conf/slaves
  

slavesA
slavesB
slavesC

 

 

   第六步:分发hadoop到所有节点

     将配置好的hadoop拷贝到所有的datanode
 

写道
scp -r /opt/hadoop/ slavesA:/opt/
scp -r /opt/hadoop/ slavesB:/opt/
scp -r /opt/hadoop/ slavesC:/opt/

 

 

   第七步:格式化hdfs文件系统的namenode

   

写道
hadoop namenode -format

 

生产环境都是根据自己的数据类型、集群配置进行定制,这里只是一个简单的demo配置。
生产环境辅助配置以及一些注意事项:
1、配置分发脚本file-dispatcher.sh(简单的分发配置脚本,稍后我会分享供同学们下载)
a、将该脚本放置到hadoop/bin 目录下
b、建立hadoop/conf/configs文件,列入需要分发的配置文件名称。
运行脚本则会自动分发配置到slaves主机的hadoop/conf目录

 

 

 

 

 

 

分享到:
评论
2 楼 slipper-jay 2014-01-22  
ssh无密码登陆失败
Slave执行$chmod 700 ~/.ssh 登陆成功

参考来源:
可能遇到的问题:

1.进行ssh登录时,出现:”Agent admitted failure to sign using the key“ .

   执行: $ssh-add

   强行将私钥 加进来。

2.如果无任何错误提示,可以输密码登录,但就是不能无密码登录,在被连接的主机上(如A向B发起ssh连接,则在B上)执行以下几步:

  $chmod o-w ~/

   $chmod 700 ~/.ssh

   $chmod 600 ~/.ssh/authorized_keys

3.如果执行了第2步,还是不能无密码登录,再试试下面几个

  $ps -Af | grep agent

        检查ssh代理是否开启,如果有开启的话,kill掉该代理,然后执行下面,重新打开一个ssh代理,如果没有开启,直接执行下面:

       $ssh-agent

  还是不行的话,执行下面,重启一下ssh服务

       $sudo service sshd restart

4. 执行ssh-add时提示“Could not open a connection to your authenticationh agent”而失败

执行: ssh-agent bash
1 楼 slipper-jay 2014-01-15  
文思敏捷,才华横溢  老大!  

相关推荐

Global site tag (gtag.js) - Google Analytics