Skip to content

Instantly share code, notes, and snippets.

@greenqy
Last active December 13, 2015 12:27
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save greenqy/8908d7f95ee7e1c09e23 to your computer and use it in GitHub Desktop.
Save greenqy/8908d7f95ee7e1c09e23 to your computer and use it in GitHub Desktop.
install-hadoop.md

hadoop 安装文档

系统结构

计划部署的集群结构为一台 namenode, 4 台 datanode.

修改 hostname

以修改 namenode 为例, 永久修改 hostname:

# sudo vim /etc/hostname
namenode

同时修改当前会话的 hostname:

# sudo hostname namenode

退出登陆 ssh 以后, 再次连接, 可以看到@后面的 hostname 变成了 namenode.

datanode 节点的 hostname 分别命名为 datanode01, datanode02, datanode03, datanode04.

配置 hosts

在有些 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

在 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

同步集群时间

server端配置

安装 ntp

$ sudo apt-get install ntp
    $ sudo vi /etc/ntp.conf
    ##注释掉原来所有的 server 开头的项
    ##添加:
    server 127.127.1.0

重启 ntp 服务:

$ sudo service ntp restart

client端配置

安装 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, 说明时间已经同步。

安装 java

使用版本为 1.7 的 java, 一下两种方法任选

使用 openjdk

$ sudo apt-get install openjdk-7-jdk

使用 oracle 的 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

下载编译好的 hadoop

以 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

hadoop-env.sh

这个文件主要配置 jvm 的路径, hadoop 日志文件的路径等

export JAVA_HOME=/usr/lib/jdk1.7.0_67
export HADOOP_LOG_DIR=/hadoop/hadoop/log

core-site.xml

配置 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-site.xml

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

slaves

指明那些节点作为 datanode, 用域名表示, 每条占一行

datanode01
datanode02
datanode03
datanode04

同步集群间的配置

将配置好的 hadoop 文件夹拷贝到所有的 datanode 上, 并配置好 /etc/hosts, jdk, ~/.bashr, ntp 服务

基本操作

初次安装

重新格式化hdfs:

$ hdfs namenode -format 

启动/关闭 hdfs

$ sbin/start-dfs.sh
$ sbin/stop-dfs.sh

启动/关闭 yarn (MapReduce) 服务

$ sbin/start-yarn.sh
$ sbin/stop-yarn.sh

验证是否安装成功

查看网页

hadoop 状态网址

可在 Datanodes 标签页查看当前 datanode 的状态, 正常会在 In operation 中有 datanode 的状态信息.

shell 操作

用 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 的功能可以正常使用了.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment