共计 6519 个字符,预计需要花费 17 分钟才能阅读完成。
1. 前期:节点机准备,操作系统安装,配置主机名,配置各机 ip,配置 hosts 文件,配置 ssh 无密码互访,配置内网时间同步,配置 java 环境。具体过程如有不会请百度
作者这里用的环境
主机名 | 别名 | IP | OS | java | 描述 |
Ubuntu-ssd | master.Hadoop | 192.168.117.124 | ubuntu12.04 64位 | 1.7.0_45 64-bit | master |
Virtual-Slave1 | slave3.hadoop | 192.168.117.125 | CentOS6.5 mini安装x64 | 1.7.0_45 64-bit | slave虚拟机 512M 单processer |
Physical-Slave1 | slave1.hadoop | 192.168.117.120 | CentOS6.5桌面x64 | 1.7.0_45 64-bit | slave |
Physical-Slave2 | slave2.hadoop | 192.168.117.121 | CentOS6.5桌面x64 | 1.7.0_45 64-bit | slave |
liu-Lenovo-Product | master.hadoop.backup | 192.168.117.66 | ubuntu13.10 32位 | 1.7.0_25 32-bit | 普通PC,本想做HA,最后只作为ntpserver |
配置过程中一些问题的总结:
牵扯到文件分发的问题,最初笔者是使用 mout 挂载 windows 服务器的共享文件来实现资源分发的,但是当天出现了很多不稳定和中断问题,可能是因为最近更新了文件服务器的操作系统导致的,后来又使用了内网的 ftp 服务,但是能用的 ftp 也出了问题,苦逼去用 scp 了。
经过总结,这里建议就使用 scp+ 脚本来作为 hadoop 搭建过程中的文件分发方法。尤其是配好 ssh 无密码互访以后,这个方法很实用,很快。
文件 分发 脚本
touch authorized_keys
true > authorized_keys
cat *.pub > authorized_keys
scp authorized_keys hadoop@slave1.hadoop:/home/hadoop/.ssh
scp authorized_keys hadoop@slave2.hadoop:/home/hadoop/.ssh
scp authorized_keys hadoop@slave3.hadoop:/home/hadoop/.ssh
#scp authorized_keys hadoop@slave1.hadoop:/home/hadoop/.ssh
这个是笔者在 master 上的 ssh 配置用脚本,每当有新节点加入的时候,手动生成新节点的 key,并将公钥传给 master,在脚本内添加节点的接收地址,执行即可更新全部节点的 authorized_keys 文件。
ssh 第一次连接的时候要输入 yes,这个可以在启动 hdfs 的时候集体弹出,不需要手动去两两互访。(笔者很 2 的一组一组的 ssh 了一下。。。)
同理对于 hosts 文件、以及 hadoop 及相关组件的分发,也可以用同样的脚本将 master 的 hosts 文件分发给所有节点
ubuntu 网络配置遇到的一些问题总结
问题的发现:笔者在配置 master 节点的时候发现通过 UI 界面的配置工具无法生效。后来发现如下情况:
配置 centos 的网络,需要修改 /etc/sysconfig/network,重启网卡后生效
而对于 ubuntu 有 NetworkManager 和 /etc/network 两处配置文件。
由于 ubuntu-ssd 这台机器之前的用户在 /etc/network 手动修改了网络配置,导致 NetManager 相关配置全部失效,而界面显示的配置工具实际是 NetworkManager 的 UI。
ubuntu修正使用 UI 配置网络,需要修改一下 ubuntu 的 /etc/NetworkManager/NetworkManager.conf,重启后,转至 Manager 策略下。
一些比较久远的帖子会建议删除 NetworkManager
ntp 配时工具
ntpserver 要是内网设备,所有节点要定时更 server 同步。
注意使用 crontab。
Java 环境配置
这个资料很多
对于 ubuntu,有写 /etc/environment 的,有写 /home/userdir/bashrc 的,有写 /etc/profile 的
centOS 一般都是写在 /etc/profile
建议:关于 java 环境变量统一修改在 /etc/profile 文件,方便维护
另外值得注意的是,Apache hadoop 社区放出的直接用的 hadoop 是针对 32bit jdk 的,笔者由于无知,面对启动 hdfs 找不到库,使用 buildin java 的情况迷茫了好久,一直怀疑是 java 环境不对。
使用 64bit jdk 需要根据源码重新编译 hadoop 文件。同样,hbase 也是
另外要注意 updata-alternative 工具的使用(只是方便切换默认 java 版本,不用亦可,不过还是建议使用)
ssh 配置中遇到的值得注意的情况:
一般来说,authorized_keys 要限定只有其 owner 可见才能生效,对于 CentOS, 只有服从该规则才能配置生效,也就是说要 chown,chmod600 或者 700 或者 400
但是对于 Ubuntu 则不然,笔者发现不需要限定文件读写权限即可生效。
要注意 ssh 密钥针对的用户,如果你打算用 root 用户运行 Hadoop,那就配置 root 用户之间的 ssh 无密码互访,如果不是,请注意密钥用户
关于 hosts 文件
这个文件的存在是作为一个本地的 DNS 解析。对于部署 hadoop 应该注意到:可以不修改特异的主机名,但是,主机名一定要在 hosts 文件内找到映射。
主要原因是 mapreduce 部分可能通过 配置文件 slaves 通过别名找到主机,但是如果主机名没有 IP 映射的话,mapreduce 模块会给节点指定一个 IP 作为主机名,请注意,这个 IP 肯定不是你内网的 IP。接下来的任务分发会通过这个”乱码“hostname 分发,你后边的工作都展不开了。所以,要注意 hosts 文件的配置。
这里的笔者的 hosts 文件,因为笔者实在是懒得改主机名了(要重启),且不是长久使用的集群,只为练手,就写了个非主流的 hosts 配置。
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
192.168.117.66 master.hadoop.backup
192.168.117.66 liu-Lenovo-Product
192.168.117.124 master.hadoop
192.168.117.124 ubuntu-ssd
192.168.117.120 slave1.hadoop
192.168.117.120 Physical-Slave1
192.168.117.121 slave2.hadoop
192.168.117.121 Physical-Slave2
192.168.117.125 slave3.hadoop
192.168.117.125 Virtual-Slave1
192.168.117.126 slave4.hadoop
不建议模仿,只是希望读者能真正明白修改 /etc/hosts 文件的意义。
实际应用的集群,最好建立内网的 DNS 服务
SSH,DNS,NTP 都应该算是内网的基础设施建设吧,ssh 无密码访问的大规模配置方法有相关的工具,有此需求的读者应该比笔者更了解这方面的东西。
2. 结束了纷纷扰扰的前期准备,切入正题,hadoop 和 hbase 的编译和配置
这里不是写教程,只是在总结问题。
hadoop 编译
前期的环境没有问题之后,主要是 JAVA 配置完成之后,可以着手 hadoop 编译工作,至于为什么要重新编译 hadoop,前面已经介绍过,当然,如果你用的是 32-bit 的 java,那可以直接从社区下编译好的文件,直接按照网上放出的教程写参数即可。
编译主要参考的链接为:
http://www.linuxidc.com/Linux/2014-01/94848.htm
http://www.linuxidc.com/Linux/2013-11/93079.htm
这个是介绍 CentOS 下的,下面的链接是介绍 Ubuntu 下的编译教程
http://www.linuxidc.com/Linux/2014-01/94847.htm
需要注意的是,yum 和 apt-get 源不一样,ubuntu 大部分依赖软件可以通过命令下载,而 yum 下,有较多的组件需要手动编译安装
在 ubuntu 下,尤其注意,protobuf 要用 2.5.0 版本,需要手动下载编译。其他的全部可以通过 apt 命令获取。通过 apt 只能得到 2.4.0 的 protobuf,而编译 hadoop2.2.0,需要较高版本的 protobuf。
maven 是边下载边编译的,要有耐心,可能会很慢(笔者一次成功运行 mvn 耗费了 1 小时以上)
细心观察出错提示,大多数是缺少依赖软件。部分情况会是网络延迟导致的,只需要重新运行编译命令,并祈求网速即可。
1. 前期:节点机准备,操作系统安装,配置主机名,配置各机 ip,配置 hosts 文件,配置 ssh 无密码互访,配置内网时间同步,配置 java 环境。具体过程如有不会请百度
作者这里用的环境
主机名 | 别名 | IP | OS | java | 描述 |
Ubuntu-ssd | master.Hadoop | 192.168.117.124 | ubuntu12.04 64位 | 1.7.0_45 64-bit | master |
Virtual-Slave1 | slave3.hadoop | 192.168.117.125 | CentOS6.5 mini安装x64 | 1.7.0_45 64-bit | slave虚拟机 512M 单processer |
Physical-Slave1 | slave1.hadoop | 192.168.117.120 | CentOS6.5桌面x64 | 1.7.0_45 64-bit | slave |
Physical-Slave2 | slave2.hadoop | 192.168.117.121 | CentOS6.5桌面x64 | 1.7.0_45 64-bit | slave |
liu-Lenovo-Product | master.hadoop.backup | 192.168.117.66 | ubuntu13.10 32位 | 1.7.0_25 32-bit | 普通PC,本想做HA,最后只作为ntpserver |
配置过程中一些问题的总结:
牵扯到文件分发的问题,最初笔者是使用 mout 挂载 windows 服务器的共享文件来实现资源分发的,但是当天出现了很多不稳定和中断问题,可能是因为最近更新了文件服务器的操作系统导致的,后来又使用了内网的 ftp 服务,但是能用的 ftp 也出了问题,苦逼去用 scp 了。
经过总结,这里建议就使用 scp+ 脚本来作为 hadoop 搭建过程中的文件分发方法。尤其是配好 ssh 无密码互访以后,这个方法很实用,很快。
文件 分发 脚本
touch authorized_keys
true > authorized_keys
cat *.pub > authorized_keys
scp authorized_keys hadoop@slave1.hadoop:/home/hadoop/.ssh
scp authorized_keys hadoop@slave2.hadoop:/home/hadoop/.ssh
scp authorized_keys hadoop@slave3.hadoop:/home/hadoop/.ssh
#scp authorized_keys hadoop@slave1.hadoop:/home/hadoop/.ssh
这个是笔者在 master 上的 ssh 配置用脚本,每当有新节点加入的时候,手动生成新节点的 key,并将公钥传给 master,在脚本内添加节点的接收地址,执行即可更新全部节点的 authorized_keys 文件。
ssh 第一次连接的时候要输入 yes,这个可以在启动 hdfs 的时候集体弹出,不需要手动去两两互访。(笔者很 2 的一组一组的 ssh 了一下。。。)
同理对于 hosts 文件、以及 hadoop 及相关组件的分发,也可以用同样的脚本将 master 的 hosts 文件分发给所有节点
ubuntu 网络配置遇到的一些问题总结
问题的发现:笔者在配置 master 节点的时候发现通过 UI 界面的配置工具无法生效。后来发现如下情况:
配置 centos 的网络,需要修改 /etc/sysconfig/network,重启网卡后生效
而对于 ubuntu 有 NetworkManager 和 /etc/network 两处配置文件。
由于 ubuntu-ssd 这台机器之前的用户在 /etc/network 手动修改了网络配置,导致 NetManager 相关配置全部失效,而界面显示的配置工具实际是 NetworkManager 的 UI。
ubuntu修正使用 UI 配置网络,需要修改一下 ubuntu 的 /etc/NetworkManager/NetworkManager.conf,重启后,转至 Manager 策略下。
一些比较久远的帖子会建议删除 NetworkManager
ntp 配时工具
ntpserver 要是内网设备,所有节点要定时更 server 同步。
注意使用 crontab。
Java 环境配置
这个资料很多
对于 ubuntu,有写 /etc/environment 的,有写 /home/userdir/bashrc 的,有写 /etc/profile 的
centOS 一般都是写在 /etc/profile
建议:关于 java 环境变量统一修改在 /etc/profile 文件,方便维护
另外值得注意的是,Apache hadoop 社区放出的直接用的 hadoop 是针对 32bit jdk 的,笔者由于无知,面对启动 hdfs 找不到库,使用 buildin java 的情况迷茫了好久,一直怀疑是 java 环境不对。
使用 64bit jdk 需要根据源码重新编译 hadoop 文件。同样,hbase 也是
另外要注意 updata-alternative 工具的使用(只是方便切换默认 java 版本,不用亦可,不过还是建议使用)
另外特别注意,源码内的 一个文件要手动修改。
编译完成后在 /Hadoop-2.2.0-src/hadoop-dist 下可以找到编译好的文件,cp 出来使用即可
hadoop 的配置文件
需要修改的配置文件有 7 个。特别需要注意的有 4 个
~/hadoop-2.2.0/etc/hadoop/hadoop-env.sh 修改 JAVA 路径
~/hadoop-2.2.0/etc/hadoop/yarn-env.sh 修改 JAVA 路径
~/hadoop-2.2.0/etc/hadoop/slaves 填入 slaves 主机名
~/hadoop-2.2.0/etc/hadoop/core-site.xml
~/hadoop-2.2.0/etc/hadoop/hdfs-site.xml
~/hadoop-2.2.0/etc/hadoop/mapred-site.xml
~/hadoop-2.2.0/etc/hadoop/yarn-site.xml
这里不做赘述,笔者主要参考了:Hadoop2.2.0 安装配置手册!完全分布式 Hadoop 集群搭建过程 http://www.linuxidc.com/Linux/2013-11/93077p2.htm
按照上述链接配置 2.2.0hadoop 运行正常
值得一提的地方,yarn-site 可以配置 mapreduce 使用 slave 节点的内存和 cpu 资源,如果不做配置,则默认为 8G 内存(如上述链接,并未对 yarn 做更进一步配置,包括 jvm 内存使用等)。