转载:仅仅是为了个人学习使用,记录问题,绝无他意。
网址:http://old.cuiyongjian.com/post-600.html
网上配置文件也是千奇百怪,各有异同,我们来对比总结学习下。
首先hadoop包放到一个程序目录下,例如我放到/usr/local下 完整路径为/usr/loca./hadoop-2.4.1
然后配环境变量,前提是jdk1.7已经安装好了。
检测: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:
额外的,有的人在core-site.xml中加了如下属性:
暂时不知道其含义,我在配置文件中暂时没有使用。
也有人使用zookeeper,因此,需要在hadoop核心配置文件core-site.xml中加入zookeeper的配置:
暂时不了解zookeeper,后续再说。先不加入这个配置了暂时。
HDFS-site.xml:
如果是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的文件)
通过,mapred-site.xml,我们又出现了2个访问地址:
MapReduce内部的一个通讯地址:singlehost:10020
MapReduce外部web访问的地址:singlehost:19888
之前配置hadoop的时候,我好像只指定了一个mapreduce框架运行方式为yarn,其他两个地址也没有配置就运行了。
另外,网上还有人设置l一个jobtracker的地址,不知是不是通过web查看mp的。示例如下:
Yarn-Site.xml
这个文件就是配置资源管理系统yarn了,其中主要指定了一些节点资源管理器nodemanager,以及总资源管理器resourcemanager的配置。 可以看到这个配置中,跟mapreduce框架是相关的。
可见yarn首先是为了支持mapreduce这个模型,之后很多其他的框架都是基于mapreduce以及yarn的功能基础上开发出来的。
可以看到,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通讯地址)
下面操作hdfs:
http://old.cuiyongjian.com/post-257.html