引言:最近实验室一直在用hadoop集群跑实验,原来一直感觉搭建老版本集群是有点复杂的(现在网上教程一般都是hadoop2.X),所以想通过这篇文章温故一下当初的搭建过程(在ubuntu linux环境下)

一.检查本机java环境

在linux终端下键入以下命令

1
$ java -version

如果你的机器已经配好java环境,那么将会出现你的java版本号

如果显示无效指令,则需要安装JDK(推荐OpenJDK)详见链接:https://blog.csdn.net/u011495642/article/details/83067316

二.设置集群专用账户

添加用户和用户组

如果有必要,可以先添加hd用户组,然后在这个用户组中添加hadoop用户

1
2
$ sudo addgroup hd
$ sudo adduser --ingroup hd hadoop

然后为新的用户添加sudo权限

1
$ sudo visudo

打开etc/sudoers vim打开,为用户添加sudo权限

找到以下内容

1
2
## User privilege specification
root ALL=(ALL:ALL) ALL

在其的下方添加:

1
hadoop ALL=(ALL:ALL) ALL

之后就可以通过su hadoop 切换到该用户

三.配置host文件将不同主机链接起来

由于分布式系统拥有主节点与从节点,那么对应的命名以及对应ip配置是必不可少的,假设我们的集群有四个节点,那么分别命名为master,slave1,slave2,以及slave3(通过修改hostname)

在每台机器的上键入

1
$ sudo vim /etc/hostname

然后进行对主机名的重命名,例如在主节点的主机上我们可以修改为:

1
hostname  master

修改/etc/hosts 使得每台机器的ip与对应的hostname一一对应,默认将出现在第二行的127.0.0.1 修改为如下(分布式):

1
2
3
4
master的ip master
slave1的ip slave1
slave2的ip slave2
slave3的ip slave3

四.建议关闭防火墙以及IPV6

五.配置ssh进行节点之间无密码交互

由于hadoop分布式结构,其中namenode以及各个datanode之间都会进行ipc网络通信,在每次进行交互式,为了避免每次都输入密码,因此都设置成ssh无密码来交互

检查openssh-server(每台机器上)

1
$ sudo apt-get install openssh-server

生成密钥(每台机器上)

1
$ ssh-keygen -t rsa -P ''

一路回车即可,最后会在~/.ssh目录下生成一对公私密钥,之后对生成的公钥进行授权

1
$ cat id_rsa.pub >> authorized_keys

赋予权限

1
2
$ chmod 600 ~/.ssh/authorized_keys
$ chmod 700 ~/.ssh

分发公钥

最后要求每台机器上都有其他节点机器的公钥信息,(小窍门:对从节点上的公钥都复制汇聚到主节点master上,可以将每台机器上的id_rsa.pub内容复制到master机器authorized_keys文件的尾部,也可以用下面的命令,最后将主节点master上的authorized_keys文件分发复制给各个从节点的authorized_keys文件中)

下面命令每台从节点机器上运行

1
$ ssh-copy-id -i id_rsa.pub master

最后在主节点master机器上运行覆盖操作

1
$ scp ~/.ssh/authorized_keys hadoop@slave1:~/.ssh/authorized_keys

最后检验(hostname为master,slave1…)

1
$ ssh hostname

六.安装配置Hadoop

去到官网下载安装包,安装路径随意,按照Linux的惯例可以自己看着装到/opt或者/usr/local,或者直接安装在用户home下。

如果想设置hadoop为全局环境变量可以通过下面命令(每台)

1
$ vi ~/.bashrc

添加(每台)

1
2
export HADOOP_HOME=/your/install/path/hadoop
export PATH=$PATH:$HADOOP_HOME/bin

接下来找到hadoop目录下conf目录下的脚本文件hadoop-env.sh

找到export JAVA_HOME=…,将本地的java路径填入

配置hadoop 主从节点(每台)

在hadoop/conf目录下找到masters以及slaves文件,用vi打开编辑

在masters中配置主节点的hostname

1
master

在slaves中配置从节点的hostname

1
2
3
slave1
slave2
slave3

七.配置**_site.xml(简单应用的话配置三个xml即可)注意是每台上都配置

配置hadoop/conf/下core-site.xml

1
2
3
4
5
6
7
8
9
10
<configuration>
<property>
<name>hadoop.tmp.dir</name>
<value>/usr/local/hadoop/tmp</value>
</property>
<property>
<name>fs.default.name</name>
<value>hdfs://master:9000</value>
</property>
</configuration>

配置hadoop/conf/下hdfs-site.xml(最好将副本数量设为1,即不进行备份)

1
2
3
4
5
6
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
<configuration>

配置hadoop/conf/下mapred-site.xml(指定运行job时从节点去主节点master9001端口查找)

1
2
3
4
5
6
<configuration>
<property>
<name>mapred.job.tracker</name>
<value>http://master:9001</value>
</property>
</configuration>

八.基本配置已经完成,现在进行运行hadoop(主节点机器上)

开始时需要初始化主节点上的namenode(保证/tmp文件夹下每台机器都是空的)

1
hadoop namenode -format

启动

1
2
$ start-dfs.sh
$ start-mapred.sh

检查

1
jps
1
hadoop dfsadmin -report

测试例子(或者wordcount)

1
hadoop jar hadoop-examples-1.0.4.jar pi 10 100