hadoop2.2安装配置日志(完全分布式)

总结:

     2014年五一节放假三天,我用了整个假期的时间去研究这个hadoop的配置,总数皇天不负有心人,在最后一天的下午终于配置成功了。做事成功真不容易,对自己要有信心。

    我都是在看前人的经验分享为基础去尝试的。但前人写的文档也会存在错误的地方,不可以照搬来用。在此过程中遇到的问题都是靠自己慢慢分析查找原因解决。

    因为官方只发布了32位的hadoop,并没有提供64位版的。需要自己下载官方的源码,搭建环境在64位linux系统中编译。


hadoop 安装 有 三 种模式 : 单 机 模式 , 伪分布式 ,完 全分布式

1 、单机模式 : 没意义 , pass 掉 ,不讨论 。

2 、 伪分布式 : 就 是在一台机器 上模拟 namenode 、 datanode 、 jobtracker 、tasktracker 、 secondaryname 。 每 一个 存 在的 形式 是一个 java 进 程。 

3 、完全分布式: 就是一个 hadoop 集群 , 有 n 台机器 组成 ,一 般组织方式 是:一台机 器作为 master , 上面 运行 namenode和 jobtracker, 另外 的机器作为 slave , 上面 运行 datanode 和 tasktracker , 至于secondaryname , 可以 运行在 master 上 , 也可以 运行在 另 外 一台机器 上 。 secondaryname 是namenode 的一个备 份里面同样保存了名字空间 , 和 文件 到文件 块 的 map 关系 。建 议 运行在 另外 一台机器 上 ,这样 master 死掉 之后, 还可以 通过 secondaryname 所 在的机器 找回名字空间 , 和 文件到文件 块得 map关系数据 , 恢复 namenode 。


准备环境:

物理机器 总 共3台,想配置基于物理机的hadoop集群中包括 3 个 节点: 1 个 Master , 2个 Salve , 节点之间局域网连接,可以相互 ping 通
Ip分布 为:
192.168.11.7     master
192.168.11.8     slave1
192.168.11.9     slave2

操作系 统为 CentOS 6.3  64bit


Master机器主要配置NameNode和JobTracker的角色, 负责总 管分布式数据和分解任 务 的 执 行;

2个Salve机器配置DataNode和TaskTracker的角色, 负责 分布式数据存 储 以及任 务 的 执 行。其 实应该还应该 有1个Master机器,用来作 为备 用,以防止Master服 务 器宕机, 还 有一个 备 用 马 上 启 用。(后 续经验积 累一定 阶 段后 补 上一台 备 用Master机器。)


创建账户

使用root登 陆 所有机器后,所有的机器都 创建 hadoop 用 户
useradd hadoop
passwd hadoop

此 时 在 /home/ 下就会生成一个 hadoop 目 录 ,目 录 路径 为 /home/hadoop


创建相关的目录

定 义 需要数据及目 录 的存放路径

定 义 代 码及工具 存放的路径
mkdir -p /home/hadoop/source
mkdir -p /home/hadoop/tools

定 义 数据 节 点存放的路径到跟目 录 下的hadoop文件夹, 这 里是数据 节 点存放目 录 需要有足够的空 间 存放
mkdir -p /hadoop/hdfs
mkdir -p /hadoop/tmp
mkdir -p /hadoop/log
设 置可写权限
chmod -R 777 /hadoop

定 义 java安装程序路径
mkdir -p /usr/java


安装JDK(这个步骤所有机器都必须安装)

http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
在以上 连接 下 载 linux 64 下的 jdk 的安装文件: jdk-7u55-linux-x64.tar.gz
1、将jdk解压到 /usr/java 目录下

2、配置 环境变量,执行 cd /etc 命令后 执行 vi profile ,在行末尾添加

export JAVA_HOME=/usr/jdk1.7.0_55

export PATH=$JAVA_HOME/bin:$PATH

export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

3、 执行 chmod +x profile 将其 变成可执行文件
4、 执行 source profile 使其配置立即生效
         source /etc/profile
5、 执行 java -version 查看是否安装成功


修改主机名

修改主机名,所有 节点均一样配置
1 、连接到主节点 192.168.11.7 ,修改 network , 执行 vim /etc/sysconfig/network ,修改 HOSTNAME=master
2、修改 hosts 文件, 执行 cd /etc 命令后 执行 vi hosts ,在行末尾添加 :

192.168.11.7   master
192.168.11.8   slave1
192.168.11.9   slave2

3 、 执行 hostname hadoop1
4 、 执行 exit 后重新 连接可看到主机名以修改 OK

其他 节点 也修改主机名后添加 Host, 或者 host 文件可以在后面 执行 scp 覆盖操作。


配置SSH无密码登陆(要求每个节点都能跟自己及其他节点互相登录)



hadoop2.2安装配置日志(完全分布式)_第1张图片

SSH 无密 码原理简介 :
    首先在 master上生成一个密 钥对,包括一个公钥和一个私钥,并将公钥复制到所有的 slave(slave1~slave2) 上。
然后当 master 通 过 SSH 连接 slave 时, slave 就会生成一个随机数并用 master 的公 钥对随机数进行加密,并发送给 master 。
最后 master 收到加密数之后再用私 钥解密,并将解密数回传给 slave , slave 确 认解密数无误之后就允许 master 不 输入密码进行连接了

配置过程在我另外一篇博文有详细记载:http://blog.csdn.net/foart/article/details/24890657


源码下载

HADOOP 版本
下 载官网地址 :http://www.apache.org/dyn/closer.cgi/hadoop/common/

官方只发布了32位版的。我是下载源码,然后搭建好环境自己再编译为64位版的。

整个编译源码的过程:http://blog.csdn.net/foart/article/details/24871053


最后得到了hadoop-2.2.0.tar_x64.gz

tar zxvf hadoop-2.2.0.tar_x64.gz
把hadoop-2.2.0.tar_x64.gz解压到/home/hadoop/source/目录


创建软连接(可选)
cd /home/hadoop
ln -s /home/hadoop/source/hadoop-2.2.0/ ./hadoop


源码配置修改 

/etc/profile


配置 环境变量: vim /etc/profile
添加
export HADOOP_DEV_HOME=/home/hadoop/hadoop
export PATH=$PATH:$HADOOP_DEV_HOME/bin
export PATH=$PATH:$HADOOP_DEV_HOME/sbin
export HADOOP_MAPARED_HOME=${HADOOP_DEV_HOME}
export HADOOP_COMMON_HOME=${HADOOP_DEV_HOME}
export HADOOP_HDFS_HOME=${HADOOP_DEV_HOME}
export YARN_HOME=${HADOOP_DEV_HOME}
export HADOOP_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
export HDFS_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop
export YARN_CONF_DIR=${HADOOP_DEV_HOME}/etc/hadoop


创建并配置 hadoop-env.sh

vim /usr/hadoop/hadoop-2.0.0-alpha/etc/hadoop/hadoop-env.sh
在末尾添加 export JAVA_HOME=/usr/java/jdk1.6.0_27


配置core-site.xml

在 configuration 节点 里面添加属性

<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/tmp</value>
<description>A base for other temporary directories.</description>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://192.168.1.201:9000</value>
</property>

添加 httpfs 的 选项
<property>
<name>hadoop.proxyuser.root.hosts</name>
<value>192.168.1.201</value>
</property>
<property>
<name>hadoop.proxyuser.root.groups</name>
<value>*</value>
</property>


slave配置

vim /home/hadoop/hadoop/etc/hadoop/slaves
添加 slave 的 IP
192.168.1.202
192.168.1.203
192.168.1.204


配置hdfs-site.xml

vim /home/hadoop/hadoop/etc/hadoop/hdfs-site.xml
添加 节点

<property>
<name>dfs.replication</name>
<value>3</value>
</property>

<property>
<name>dfs.namenode.name.dir</name>
<value>file:/hadoop/hdfs/name</value>
<final>true</final>
</property>

<property>
<name>dfs.federation.nameservice.id</name>
<value>ns1</value>
</property>

<property>
<name>dfs.namenode.backup.address.ns1</name>
<value>192.168.11.7:50100</value>
</property>

<property>
<name>dfs.namenode.backup.http-address.ns1</name>
<value>192.168.11.7:50105</value>
</property>

<property>
<name>dfs.federation.nameservices</name>
<value>ns1</value>
</property>

<property>
<name>dfs.namenode.rpc-address.ns1</name>
<value>192.168.11.7:9000</value>
</property>
<property>
<name>dfs.namenode.rpc-address.ns2</name>
<value>192.168.11.7:9000</value>
</property>

<property>
<name>dfs.namenode.http-address.ns1</name>
<value>192.168.11.7:23001</value>
</property>

<property>
<name>dfs.namenode.http-address.ns2</name>
<value>192.168.11.7:13001</value>
</property>

<property>
<name>dfs.dataname.data.dir</name>
<value>file:/hadoop/hdfs/data</value>
<final>true</final>
</property>

<property>
<name>dfs.namenode.secondary.http-address.ns1</name>
<value>192.168.11.7:23002</value>
</property>

<property>
<name>dfs.namenode.secondary.http-address.ns2</name>
<value>192.168.11.7:23002</value>
</property>

<property>
<name>dfs.namenode.secondary.http-address.ns1</name>
<value>192.168.11.7:23003</value>
</property>

<property>
<name>dfs.namenode.secondary.http-address.ns2</name>
<value>192.168.11.7:23003</value>
</property>

<property>
<name>dfs.permissions</name>
  <value>false</value>
  <description>是否对dfs文件系统使用权限控制</description>
</property>


配置yarn-site.xml(注意,在hadoop2.2下<value>mapreduce.shuffle</value>不能用“.”应该改为<value>mapreduce_shuffle</value>否则会报错)

添加 节点

<property>
<name>yarn.resourcemanager.address</name>
<value>192.168.11.7:18040</value>
</property>

<property>
<name>yarn.resourcemanager.scheduler.address</name>
<value>192.168.11.7:18030</value>
</property>

<property>
<name>yarn.resourcemanager.webapp.address</name>
<value>192.168.11.7:18088</value>
</property>

<property>
<name>yarn.resourcemanager.resource-tracker.address</name>
<value>192.168.11.7:18025</value>
</property>

<property>
<name>yarn.resourcemanager.admin.address</name>
<value>192.168.11.7:18141</value>
</property>

<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>


在 /etc/hadoop 使用以下内容创建一个文件mapred-site.xml
<?xml version="1.0"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
</property>

<property>
        <name>mapred.system.dir</name>
        <value>file:/hadoop/mapred/system</value>
        <final>true</final>
</property>

<property>
        <name>mapred.local.dir</name>
        <value>file:/hadoop/mapred/local</value>
        <final>true</final>
</property>

<property>
        <name>mapred.job.tracker</name>
        <value>192.168.11.7:9001</value>
</property>

<property>
  <name>mapred.map.tasks</name>
  <value>10</value>

<description>
As a rule of thumb, use 10x the number of slaves(i.e., number of tasktrackers).
</description>
</property>

<property>
  <name>mapred.reduce.tasks</name>
  <value>2</value>


<description>
As a rule of thumb, use 2x the number of slaveprocessors (i.e., number of tasktrackers).
</description>
</property>

</configuration>


配置httpfs-site.xml

添加 httpfs的选项

<?xml version="1.0" encoding="UTF-8"?>
<configuration>

<property>
        <name>hadoop.proxyuser.root.hosts</name>
        <value>192.168.11.7</value>
</property>
<property>
        <name>hadoop.proxyuser.root.groups</name>
        <value>*</value>
</property>

</configuration>


同步代码到其他机器

1、同步配置代 码
先在 slaves 的机器上也 创 建
mkdir -p /home/hadoop/source
部署hadoop2.2代 码 , 创 建 软连接 (可选),然后只要同步修改 过 的 etc/hadoop下的配置文件即可。
2、同步 /etc/profile
3、同步 /etc/hosts
scp -r /etc/profile root@hadoop2:/etc/profile
scp -r /etc/hosts root@hadoop2:/etc/hosts

其他机器以此操作


启动hadoop

格式化集群

hadoop namenode -format -clusterid clustername


启动hdfs

执行
start-dfs.sh

开 启 hadoop dfs服 务     


启动Yarn

开 启 yarn 资 源管理服 务
start-yarn.sh

 

启动httpfs

开 启 httpfs 服 务
httpfs.sh start
使得 对外 可以提高 http 的restful接口服 务


测试,安装结果验证

验证hdfs

在各台机器 执行 jps 看 进程 是否都已 经启动 了

[root@master ~]# jps
2659 SecondaryNameNode
3706 Jps
2820 ResourceManager
3089 Bootstrap
2499 NameNode


[root@slave1 ~]# jps
1270 DataNode
1943 Jps
1366 NodeManager
1876 Bootstrap

[root@slave2 ~]# jps
1337 NodeManager
1510 Jps
1241 DataNode


进程启动 正常

验证 是否可以登 陆
hadoop fs -ls hdfs://192.168.11.7:9000/
hadoop fs -mkdir hdfs://192.168.11.7:9000/testfolder
hadoop fs -copyFromLocal ./xxxx hdfs://192.168.11.7:9000/testfolder
hadoop fs -ls hdfs://192.168.11.7:9000/ testfolder


参考博文:

http://www.cnblogs.com/scotoma/archive/2012/09/18/2689902.html

http://www.linuxidc.com/Linux/2014-01/95566.htm

http://www.blogjava.net/changedi/archive/2013/08/12/402696.html

http://blog.csdn.net/bluishglc/article/details/24591185


你可能感兴趣的:(hadoop2.2安装配置日志(完全分布式))