计划部署的集群结构为一台 namenode, 4 台 datanode.
以修改 namenode 为例, 永久修改 hostname:
# sudo vim /etc/hostname
namenode
同时修改当前会话的 hostname:
# sudo hostname namenode
退出登陆 ssh 以后, 再次连接, 可以看到@后面的 hostname 变成了 namenode.
datanode 节点的 hostname 分别命名为 datanode01, datanode02, datanode03, datanode04.
在有些 ubuntu 版本中, 在 /etc/hosts 文件中, 会有一个 127.0.1.1 的项, 这会导致 hadoop 的安装失败, 确保把这一条删除.
配置 hosts 文件包含下面的项(实际情况根据集群的配置调整):
127.0.0.1 localhost
10.10.245.219 namenode
10.10.245.224 datanode01
10.10.245.218 datanode02
10.10.245.217 datanode03
10.10.245.223 datanode04
往后在配置文件中使用 hostname 取代 ip 来称呼各个节点.
保证 namenode 可以免密码登陆各个 datanode, 以及 namenode 登陆自己也不需要密码.
在 namenode 上生成密钥对
$ ssh-keygen
配置 namenode 免密码登陆 localhost
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
将 ~/.ssh/id_rsa.pub 传到各个 datanode 上, 添加到 ~/.ssh/authorized_keys 中
$ scp ~/.ssh/id_rsa.pub ubuntu@datanode01:
$ ssh ubuntu@datanode01
$ cat id_rsa.pub >> ~/.ssh/authorized_keys
安装 ntp
$ sudo apt-get install ntp
$ sudo vi /etc/ntp.conf
##注释掉原来所有的 server 开头的项
##添加:
server 127.127.1.0
重启 ntp 服务:
$ sudo service ntp restart
安装 ntp
$ sudo apt-get install ntp
修改配置文件
$ sudo vim /etc/ntp.conf
## 注释掉所有的以 server 开头的项
## 添加:
server namenode prefer
## namenode 替换为作为 ntp server 的主机名
重启 ntp 服务:
$ sudo service ntp restart
查看时间偏移:
$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
namenode LOCAL(0) 6 u 3 64 1 0.431 -30573. 0.000
## 其中的 offset 是 本机 和 server 之间的时间差, 单位为 ms, 此时差了大概 30s。
强制同步
$ sudo ntpdate -u namenode
## namenode 替换成 ntp server 主机名
## 一段时间后(30s),client 就会和 server 保持同步
$ ntpq -p
remote refid st t when poll reach delay offset jitter
==============================================================================
namenode LOCAL(0) 6 u 45 64 17 0.459 -2.732 17650.1
## 偏差只有 2.7ms, 说明时间已经同步。
使用版本为 1.7 的 java, 一下两种方法任选
$ sudo apt-get install openjdk-7-jdk
去 oracle 官网下载 jdk, 解压并放到 /usr/lib 目录下
$ vim ~/.bashrc
export JAVA_HOME=/usr/lib/jdk1.7.0_67
#export JAVA_HOME=/usr/lib/jvm/java-7-openjdk-amd64
export JRE_HOME=${JAVA_HOME}/jre
export PATH=${JAVA_HOME}/bin:${JRE_HOME}/bin:$PATH
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib
以 2.5.2 版本的 hadoop 为例
默认将所有 hadoop 相关的组件都安装到 /hadoop 目录, 且默认所有操作都以 linux 下的 ubuntu 用户执行.
新建 /hadoop:
$ sudo mkdir /hadoop
$ sudo chown ubuntu:ubuntu /hadoop
解压:
$ tar xvf hadoop-2.5.2.tar.gz
$ mv hadoop-x.x.x /hadoop/hadoop
配置环境变量:
$ vim ~/.bashrc
export HADOOP_HOME=/hadoop/hadoop
配置文件的路径为: $HADOOP_HOME/etc/hadoop
这个文件主要配置 jvm 的路径, hadoop 日志文件的路径等
export JAVA_HOME=/usr/lib/jdk1.7.0_67
export HADOOP_LOG_DIR=/hadoop/hadoop/log
配置 hdfs 的地址, 临时文件夹的路径
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://namenode:9000</value>
</property>
<property>
<name>hadoop.tmp.dir</name>
<value>/hadoop/tmp</value>
</property>
</configuration>
临时目录 /hadoop/tmp 目录会由 hadoop 自动创建, 不用手工创建.
hdfs 更进详细的配置
configuration>
<!-- name node configuration -->
<property>
<name>dfs.namenode.name.dir</name>
<value>/data/hadoop/namespace</value>
</property>
<property>
<name>dfs.blocksize</name>
<value>67108864</value><!-- 64MB as default -->
</property>
<property>
<name>dfs.namenode.handler.count</name>
<value>20</value>
</property>
<!-- data node configuration -->
<property>
<name>dfs.datanode.data.dir</name>
<value>/data/hadoop/data</value>
</property>
<property>
<name>dfs.datanode.max.xcievers</name>
<value>4096</value>
</property>
</configuration>
配置中将 hdfs 安装到了 /data/hadoop/data 目录下, 需要新建这些目录, 确保用户和组为当前用户. 集群中的所有节点都要创建这几个目录.
$ sudo mkdir /data
$ sudo chown ubuntu:ubuntu /data
## 此处不要用 root 账户
$ mkdir /data/hadoop
$ mkdir /data/hadoop/data
$ mkdir /data/hadoop/namespace
指明那些节点作为 datanode, 用域名表示, 每条占一行
datanode01
datanode02
datanode03
datanode04
将配置好的 hadoop 文件夹拷贝到所有的 datanode 上, 并配置好 /etc/hosts, jdk, ~/.bashr, ntp 服务
重新格式化hdfs:
$ hdfs namenode -format
$ sbin/start-dfs.sh
$ sbin/stop-dfs.sh
$ sbin/start-yarn.sh
$ sbin/stop-yarn.sh
可在 Datanodes 标签页查看当前 datanode 的状态, 正常会在 In operation 中有 datanode 的状态信息.
用 shell 来执行几个简单的文件系统操作来验证是否可用
$ hadoop fs -mkdir /user
$ hadoop fs -mkdir /user/ubuntu
$ hadoop fs -put $HADOOP_HOME/etc/hadoop /user/ubuntu
这几条命令在 hdfs 上建立了目录 /user/ubuntu, 并将 hadoop 的配置文件夹放到了 hdfs 上的 /user/ubuntu 目录下.
如果能够执行这几条命令, 可以认为 hdfs 的功能可以正常使用了.