hadoop集群配置文件详解

首先hadoop包放到一个程序目录下,例如我放到/usr/local下 完整路径为/usr/loca./hadoop-2.4.1

然后配环境变量,前提是jdk1.7已经安装好了。

环境变量配置:
export JAVA_HOME=/usr/local/jdk1.7
export JRE_HOME=/usr/local/jdk1.7/jre
export CLASSPATH=.:$JRE_HOME/lib:$JAVA_HOME/lib:$CLASSPATH
PATH=$JAVA_HOME/bin:$JRE_HOME/bin:$PATH

检测:source /etc/profile然后java -version

 

另外,把hadoop的环境变量提前配置好,也没什么关系。

export HADOOP_HOME=/usr/local/hadoop-2.4.1

export HADOOP_PREFIX=$HADOOP_HOME

export HADOOP_COMMON_HOME=$HADOOP_PREFIX

export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_PREFIX/lib/native

export HADOOP_CONF_DIR=$HADOOP_PREFIX/etc/hadoop

export HADOOP_HDFS_HOME=$HADOOP_PREFIX

export HADOOP_MAPRED_HOME=$HADOOP_PREFIX

#export HADOOP_ROOT_LOGGER=DEBUG,console

export LD_LIBRARY_PATH=$HADOOP_PREFIX/lib/native

PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH

 

我这里hadoop环境变量写的也比较全了,以防万一。

 

另外,所有子节点把防火墙关一下把,或者你花点功夫把防火墙这些端口都打开。(下文会详细列出那些端口)

 

 另外,免密码登陆,也提前做好吧,因为resourcemanager需要免密码登录子节点,而且namenode也要免密码登录子节点。

好吧,配置开始:

在主节点操作, cd到~用户目录,然后ls -a看是否有.ssh这个文件夹。然后ssh-keygen -t  rsa生成id_rsa私钥和id_rsa.pub公钥(一路回车)。然后进入.ssh目录,ls一下,看到已经生成了id_rsa.pub .  使用cat命令,cat id_rsa.pub > authorized_keys 把id_rsa.pub追加到authorized_keys已认证的主机列表里面。 这样本机对本机就是已认证的状态。 或者copy命令:cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_key 代替cat也可以 。  此时可以连接ssh localhost试一下是否免密码了。 

然后把authorized_key远程拷贝到所有的机器节点上。 那么,所有的子节点就把主节点机器当作已认证的状态。然后主节点去登录他们的时候,他们认证发现主节点确实是在认证列表中,则直接让他登陆不需要密码。

第二种免密码登录方法:(仅仅是使用加密方法不同而已)

ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa

第二部:导入authorized_keys

$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys

 

回忆一下启动hadoop的第一步过程:

总共要修改的配置文件有,全部都在hadoop-2.4.1/etc/hadoop目录下:

usr/hadoop-2.4.1/etc/hadoop/hadoop-env.sh

usr/hadoop-2.4.1/etc/hadoop/yarn-env.sh

/usr/hadoop-2.4.1/etc/hadoop/mapred-env.sh

usr/hadoop-2.4.1/etc/hadoop/slaves

usr/hadoop-2.4.1/etc/hadoop/core-site.xml

usr/hadoop-2.4.1/etc/hadoop/hdfs-site.xml

usr/hadoop-2.4.1/etc/hadoop/mapred-site.xml

usr/hadoop-2.4.1/etc/hadoop/yarn-site.xml

 

其中hdfs-site.xml这个文件需要设置3个目录来存放一些hadoop运行过程中的临时数据,因此,我们先创建好这3个目录。

/usr/local/hadoop-2.4.1/dfs/name

/usr/local/hadoop-2.4.1/dfs/data

/usr/local/hadoop-2.4.1/tmp

也就是在hadoop目录下,创建一个dfs和tmp,再在dfs目录下创建name和data目录。当然,你要确保目录权限全部与你要运行hadoop的用户是相同的。

 

hadoop的八个配置文件中,有3个配置文件只需要修改jdk路径。分别是hadoop-env.sh,yarn-env.sh,mapred-env.sh。

找到 export JAVA_HOME=  , 等号后面改成/usr/local/jdk1.7 即可。   当然,如果前面有#注释,可以把注释去掉(一般都没有注释)。

另外可选的添加上:

export HADOOP_COMMON_LIB_NATIVE_DIR=${HADOOP_PREFIX}/lib/native

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

 

slaves:

把所有从节点的主机名写到这儿就可以,这是告诉hadoop进程哪些机器是从节点。每行写一个,例如:

dellserver01

dellserver02

dellserver03

dellserver04

dellserver05

gt630

 

注意啊:前提是你已经为每个节点进行了hostname的命名。而且每个节点的hosts文件你修改了本地dns的指向,让这些主机指向约定好的IP。然后每个节点的hosts文件保持同步。

 

 

core-site.xml:

<configuration>

       <property>

         <!-- 这个属性用来指定namenode的hdfs协议的文件系统通信地址,可以指定一个主机+端口,也可以指定为一个namenode服务(这个服务内部可以有多台namenode实现ha的namenode服务) -->

                <name>fs.defaultFS</name>

                <value>hdfs://singlehost:9000</value>

       </property>

       <property>

        <!-- 这个属性用来执行文件IO缓冲区的大小-->

                <name>io.file.buffer.size</name>

                <value>131072</value>

        </property>

       <property>

    <!-- 指定hadoop临时目录,前面用file:表示是本地目录。有的教程上直接使用/usr/local,我估计不加file:应该也可以。hadoop在运行过程中肯定会有临时文件或缓冲之类的,必然需要一个临时目录来存放,这里就是指定这个的。当然这个目录前面我们已经创建好了。 -->

               <name>hadoop.tmp.dir</name>

               <value>file:/usr/local/hadoop-2.4.1/tmp</value>

               <description>Abase for other temporary   directories.</description>

       </property>

</configuration>

 

额外的,有的人在core-site.xml中加了如下属性:

        <property>

               <name>hadoop.proxyuser.myusrname.hosts</name>

               <value>*</value>

       </property>

       <property>

               <name>hadoop.proxyuser.myusrname.groups</name>

               <value>*</value>

       </property>

暂时不知道其含义,我在配置文件中暂时没有使用。

也有人使用zookeeper,因此,需要在hadoop核心配置文件core-site.xml中加入zookeeper的配置:

<!-- 指定zookeeper地址 。zookeeper可以感知datanode工作状态,并且提供一些高可用性的特性。-->

<property>

<name>ha.zookeeper.quorum</name>

<value>dellserver01:2181,dellserver02:2181,dellserver03:2181,dellserver04:2181,dellserver05:2181</value>

</property>

暂时不了解zookeeper,后续再说。先不加入这个配置了暂时。

 

 

HDFS-site.xml:

<configuration>

       <property>

            <!-- secondary namenode的http通讯地址,有何用呢?为何不用hdfs协议了?我还不太清楚-->

                <name>dfs.namenode.secondary.http-address</name>

               <value>singlehost:9001</value>

       </property>

     <property>

            <!-- namenode数据的存放地点。也就是namenode元数据存放的地方,记录了hdfs系统中文件的元数据-->

             <name>dfs.namenode.name.dir</name>

             <value>file:/usr/local/hadoop-2.4.1/dfs/name</value>

       </property>

      <property>

            <!-- datanode数据的存放地点。也就是block块存放的目录了-->

              <name>dfs.datanode.data.dir</name>

              <value>file:/usr/local/hadoop-2.4.1/dfs/data</value>

       </property>

       <property>

            <!-- hdfs的副本数设置。也就是上传一个文件,其分割为block块后,每个block的冗余副本个数-->

               <name>dfs.replication</name>

               <value>3</value>

        </property>

        <property>

            <!-- 开启hdfs的web访问接口。好像默认端口是50070-->

                <name>dfs.webhdfs.enabled</name>

                <value>true</value>

         </property>

</configuration>

 

如果是NameService那中种高可用的ha方式,那么hdfs-site.xml中还要配置nameservice的多个namenode节点,以及配置namenode元数据在各个journalnode存储地点等内容,这个HA的方式,我们可以在另外的博文中再详细探讨,此处我们采用namenode和secondnamenode全部放在singlehost主节点上的方式。

从上面的配置,我们可以看到:

主namenode有个hdfs协议的访问地址:singlehost:9000

secondNamenode有个http协议的访问地址:singlehsot:9001

hdfs开启了web监视后,主namenode有个默认的http访问地址:singlehost:50070 (通过他来查看hdfs状况)

 

 

mapred-site.xml:(注意要将mapred-site.xml.template重命名为 .xml的文件)

<configuration>

          <property> 

            <!---- 指定mr框架为yarn方式,Hadoop二代MP也基于资源管理系统Yarn来运行 -->

            <name>mapreduce.framework.name</name>

                <value>yarn</value>

           </property>

          <property>

        <!---- 指定mr框架jobhistory的内部通讯地址。目前还不知道是做什么的 -->

                  <name>mapreduce.jobhistory.address</name>

                  <value>singlehost:10020</value>

          </property>

          <property>

        <!---- 指定mr框架web查看的地址 -->

                <name>mapreduce.jobhistory.webapp.address</name>

                <value>singleshost:19888</value>

       </property>

</configuration>

通过,mapred-site.xml,我们又出现了2个访问地址:

MapReduce内部的一个通讯地址:singlehost:10020

MapReduce外部web访问的地址:singlehost:19888

 

之前配置hadoop的时候,我好像只指定了一个mapreduce框架运行方式为yarn,其他两个地址也没有配置就运行了。

另外,网上还有人设置l一个jobtracker的地址,不知是不是通过web查看mp的。示例如下:

<property>

        <name>mapreduce.jobtracker.http.address</name>

        <value>master.hadoop:50030</value>

</property>

 

Yarn-Site.xml

这个文件就是配置资源管理系统yarn了,其中主要指定了一些节点资源管理器nodemanager,以及总资源管理器resourcemanager的配置。 可以看到这个配置中,跟mapreduce框架是相关的。

可见yarn首先是为了支持mapreduce这个模型,之后很多其他的框架都是基于mapreduce以及yarn的功能基础上开发出来的。

        <property>

               <name>yarn.nodemanager.aux-services</name>

               <value>mapreduce_shuffle</value>

        </property>

        <property>                                                                

        <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name>

               <value>org.apache.hadoop.mapred.ShuffleHandler</value>

        </property>

        <property>

            <!--yarn总管理器的IPC通讯地址-->

               <name>yarn.resourcemanager.address</name>

               <value>singlehost:8032</value>

       </property>

       <property>

            <!--yarn总管理器调度程序的IPC通讯地址-->

               <name>yarn.resourcemanager.scheduler.address</name>

               <value>singlehost:8030</value>

       </property>

       <property>

            <!--yarn总管理器的IPC通讯地址-->

            <name>yarn.resourcemanager.resource-tracker.address</name>

             <value>singlehost:8031</value>

      </property>

      <property>

            <!--yarn总管理器的IPC管理地址-->

              <name>yarn.resourcemanager.admin.address</name>

               <value>singlehost:8033</value>

       </property>

       <property>

            <!--yarn总管理器的web http通讯地址-->

               <name>yarn.resourcemanager.webapp.address</name>

               <value>singlehost:8088</value>

       </property>

 

可以看到,yarn-site.xml 配置了很多通讯地址,除了8088都是IPC协议的通讯地址,是为了yarn的多个进程之间进行通讯的。

小知识拓展:如果2个进程在同一台机子且在同一个操作平台,可以选择IPC或TCPIP两种通讯协议,但IPC效率高于TCPIP。因为IPC通讯,2个进程直接发送通讯包,而采用TCPIP,进程要把通讯包先发给LO本地环路接口,再通过LO发给进程2.

如果2个进程在不同物理机器或不同操作平台上,则不能用IPC,只能用TCPIP了。

 

 

至此,配置结束。我们可以scp把hadoop整个完整配置好的包到所有节点了。

再次总结,我们配置文件中出现的端口:

主namenode有个hdfs协议的访问地址:singlehost:9000 (是一个IPC协议,可见是给本机hadoop进程用的)

secondNamenode有个http协议的访问地址:singlehsot:9001 (这是个secondnamenode的http地址)

hdfs开启了web监视后,主namenode有个默认的http访问地址:singlehost:50070 (通过他来查看hdfs状况)

MapReduce内部的一个通讯地址:singlehost:10020 (估计是TCP协议)

MapReduce外部web访问的地址:singlehost:19888 (肯定是http协议,不过暂时无法访问)

singlehost:8030 (Yarn的内部IPC通讯地址)

singlehost:8031 (Yarn的内部IPC通讯地址)

singlehost:8032 (Yarn的内部IPC通讯地址)

singlehost:8033 (Yarn的内部IPC通讯地址)

singlehost:8088 (Yarn的外部HTTP通讯地址)

 

  • 3
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值