CentOS7 搭建 Hadoop 2.6.0 集群

原创 hadoopcentos

我主要是做数据抽取和文本分析的工作,最近因为要支持 Hive 数据的抽取,所以准备搭建一个 Hadoop + Hive 的集群平台,原来准备直接用 CDH 的,但是由于公司网络或者其它原因,我试了几遍都没有成功。索性还是单独来搭建和手动配置,我记得以前这么做其实是很简单的。

我这里最终搭建用的包是 CDH 5.10.0 的包 hadoop-2.6.0-cdh5.10.0.tar.gz,我看了 CDH 5.x 的版本的 Hadoop 都是 2.6.0 的版本,原来觉得很奇怪,后来在加入其它组件的时候才发现,Hadoop 2.x 的话目前来说,是兼容性最好的,很多组件的默认测试的环境都是 Hadoop 2.6.0,所以如果你要搭建 Hadoop 2.x 的集群,最好就选用这个版本。

然后 CDH 的 Hadoop 包和 apache 的原生包搭建、配置和使用其实是一样的,没有多少区别,最大的不同就是 CDH 的包之间兼容性好,比如你如果要搭建原生的 Hadoop + Hive 平台,就算你选择的版本的 CDH 一样的,搭建的过程中你也需要适配各种 jar 包的兼容性,而 CDH 做的工作就是把这些兼容性适配好了,做到了开箱即用。这两种环境我都搭建和使用过,所以比较有体会,

CDH 的 Hadoop 包下载地址:hadoop-2.6.0-cdh5.10.0.tar.gz,其他组件比如 Hive 什么的,可以在 http://archive.cloudera.com/cdh5/cdh/5/ 目录下搜索到 tar.gz 的压缩包。

apache Hadoop 包下载地址 hadoop-2.6.0.tar.gz

环境

hd-node1 为 NameNode 主节点。

192.190.20.13    hd-node1
192.190.20.14    hd-node2
192.190.20.15    hd-node3

我搭建的不是生产环境,为了快速方便,没有新建用户,全部在 root 用户下操作。

准备好三台 CentOS 7 虚拟机,全部安装配置好 JDK,我选用了 JDK 1.8.0_112 的版本。

[root@hd-node1 ~]# java -version
java version "1.8.0_112"
Java(TM) SE Runtime Environment (build 1.8.0_112-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.112-b15, mixed mode)
[root@hd-node1 ~]#

需要注意的是,不管用哪种方式搭建 Hadoop 集群,在安装准备虚拟机的时候最好不要使用最小模式或者服务器模式,先安装桌面环境,然后切换到服务器模式。这样的话,省去了系统依赖的排查和安装的时间,因为 Hadoop 一整套东西依赖的系统包还是蛮多的。

网络配置

装好虚拟机后,设置虚拟机为静态 IP,并修改一下虚拟机的主机名和 IP 地址,还需要增加 IP 与主机映射,每个节点都需要对应配置。

修改主机名

分别修改各个节点的虚拟机主机名为 hd-node1、hd-node2、hd-node3。

# vim /etc/hostname

hd-node1

设置静态 IP

集群的 IP 地址肯定不能使用 DHCP 自动获取 IP,需要修改 IP 地址并设置为静态。

vim /etc/sysconfig/network-scripts/ifcfg-ens33

现在虚拟机 CentOS 的网卡名称一般都是 ifcfg-ens** 的样子,不是 eth。

主要的几个配置项:

BOOTPROTO="static"  # 设置为静态IP
ONBOOT=yes    #  启动系统的时候打开网卡
IPADDR="192.190.20.13"        # 设置IP
NETMASK="255.255.255.0"         # 设置子网掩码
GATEWAY="192.190.20.1"     # 设置网关
DNS1="61.134.1.4"   # 设置 DNS
DNS2="8.8.8.8"

然后重启网络服务,查看配置生效。

systemctl restart network

配置 IP 与主机映射

# vim /etc/hosts

192.190.20.13    hd-node1
192.190.20.14    hd-node2
192.190.20.15    hd-node3

ssh 免密登录

在每台虚拟机的根目录 root 下,创建 ssh 公钥:

ssh-keygen –t rsa

连续回车,默认生成路径为当前用户的 home 目录,提示输入密码的时候不要输入,一直默认、回车,系统自动生成图形公钥。

在主节点 hd-node1 中,进入 /root/.ssh 目录,并将公钥写到 authorized_keys 文件中。

cd ~/.ssh
cat id_rsa.pub >> authorized_keys

然后其它节点 hd-node2 和 hd-node3 分别进入 .ssh 目录,把 id_rsa.pub 拷贝到 hd-node1 中,注意重命名以区分。

# hd-node2 上
scp /root/.ssh/id_rsa.pub hd-node1:/root/.ssh/id_rsa.pub.node2

# hd-node3 上
scp /root/.ssh/id_rsa.pub hd-node1:/root/.ssh/id_rsa.pub.node3

拷贝过来后,再在 hd-node1 上面把其它节点的公钥写入到我们刚刚写进去的 authorized_keys 文件中。

# hd-node1 上

cat id_rsa.pub.node2 >> authorized_keys
cat id_rsa.pub.node3 >> authorized_keys

我们查看一下 authorized_keys 文件,包含了三台虚拟机的公钥文件。

更改 authorized_keys 文件属性,使之不能被修改:

chmod 600 authorized_keys

在主节点 hd-node1 的 .ssh 目录下,将生成的 authorized_keys 复制到各个从节点:

scp /root/.ssh/authorized_keys hd-node2:/root/.ssh/
scp /root/.ssh/authorized_keys hd-node3:/root/.ssh/

然后在每台主机上,使用 ssh 对方主机名 验证是否互相免密码登录(包括自己也验证一下),如果不需要密码,则设置成功。

ssh hd-node1
ssh hd-node2
ssh hd-node3

注意登录成功后,注意 logout 退出对方登录,以免误操作。

如果不成功,则要修改 ssh 配置。

# vim /etc/ssh/ssh_config

RSAAuthentication yes
PubkeyAuthentication yes
StrictModes no

如果你生成密钥文件不是在默认的用户目录下的 .ssh 目录,则需要修改 AuthorizedKeysFile 项。

修改好后重启 ssh 服务。

systemctl restart sshd

Hadoop 2.6.0 的解压安装与配置

我是从 cloudera 官网下载 hadoop-2.6.0-cdh5.10.0.tar.gz 版本的压缩包。

主节点 hd-node1 中,解压 Hadoop 压缩包到 /opt/ 中:

tar -zxvf hadoop-2.6.0-cdh5.10.0.tar.gz -C /opt

创建缓存数据存储目录

在 Hadoop 目录下创建 data 目录。

cd /opt/hadoop-2.6.0-cdh5.10.0/
mkdir data
cd data
mrdir tmp
mkdir dfs
cd dfs
mkdir data
mkdir name

进入到 Hadoop 的配置目录:

cd /opt/hadoop-2.6.0-cdh5.10.0/etc/hadoop

现在修改配置文件。

core-site.xml

vim core-site.xml

修改配置:

<configuration>
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop-2.6.0-cdh5.10.0/data/tmp</value>
    </property>
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hd-node1:8020</value>
    </property>
</configuration>

hdfs-site.xml

vim hdfs-site.xml

配置 HDFS 相关信息:

<configuration>
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hd-node1:50070</value>
    </property>
    <property>
        <name>dfs.replication</name>
        <value>1</value>
    </property>
    <property>
        <name>dfs.namenode.name.dir</name>
        <value>/opt/hadoop-2.6.0-cdh5.10.0/data/dfs/name</value>
    </property>
    <property>
        <name>dfs.datanode.data.dir</name>
        <value>/opt/hadoop-2.6.0-cdh5.10.0/data/dfs/data</value>
    </property>
</configuration>

mapred-site.xml

vim mapred-site.xml

配置 Mapreduce 与 YARN。

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
</configuration>

yarn-site.xml

vim yarn-site.xml

配置 YARN。

<configuration>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hd-node1</value>
    </property>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
</configuration>

hadoop-env.sh

找到 #export JAVA_HOME=${JAVA_HOME} 修改 Java home 目录。

分发

在主节点上配置好后,将 Hadoop 复制到各个节点对应位置上。

scp -ra /opt/hadoop-2.6.0-cdh5.10.0 hd-node1:/opt/
scp -ra /opt/hadoop-2.6.0-cdh5.10.0 hd-node2:/opt/

Hadoop 环境变量配置

在 /etc/profile 中配置 Hadoop 环境变量,可以方便的使用 hdfs 等命令。

启动

进入主节点 hd-node1 的 hadoop 的目录下。

格式化 NameNode

第一次启动,先格式化 NameNode,相当于格式化逻辑磁盘。

./bin/hdfs namenode -format

启动集群

按顺序,先启动 DFS,然后启动 YARN。

./sbin/start-dfs.sh
./sbin/start-yarn.sh

然后在主节点 hd-node1 输入 jps 可以查看到 NameNode、Jps 和 ResourceManager 进程。

在从节点 hd-node2 输入 jps 可以查看到 Jps、NodeManager 和 DataNode 进程。

尝试使用一下 HDFS。

OK,没问题。到目前为止,集群就正式搭建好了。

关闭集群

按照启动的顺序倒过来关闭服务,先关闭 YARN,在关闭 DFS。

./sbin/stop-dfs.sh
./sbin/stop-yarn.sh
如果觉得这对你有用,请随意赞赏,给与作者支持
评论 0
最新评论