# Hadoop 安装部署

# 一、安装 Cloudera Enterprise 6.3.x

视频教程手摸手教你在Ubuntu 18.04中部署Cloudera Enterprise 6.2.x 跟你聊聊企业部署Hadoop的注意事项CDH (opens new window)

# 1.1 安装Ubuntu 18.04.4 LTS

前往https://ubuntu.com/download/desktop 下载最新版本的Ubuntu 18.04.4 LTS (opens new window)

做一些必要配置

# 安装ssh
sudo apt-get install ssh
service sshd start

# 替换163源
sudo cp /etc/apt/sources.list /etc/apt/sources.list.bak

# 在/etc/apt/sources.list文件前面添加如下条目
deb http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-security main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-updates main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-proposed main restricted universe multiverse
deb-src http://mirrors.163.com/ubuntu/ bionic-backports main restricted universe multiverse

# 更新
sudo apt-get update
sudo apt-get upgrade
apt install net-tools

# 关闭防火墙
systemctl stop ufw
systemctl disable ufw

# 允许root用户登录
vim /etc/ssh/sshd_config

# 设置 PermitRootLogin 为yes
PermitRootLogin yes
PasswordAuthentication yes
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34

# 1.2 配置CDH源

因为国内访问官方镜像实太慢,我们需要把安装包下载到本地然后在本地启一个镜像站点。

下载Cloudera Manager 6包并解压

mkdir -p cloudera-repos/cm6
wget https://archive.cloudera.com/cm6/6.3.1/repo-as-tarball/cm6.3.1-ubuntu1804.tar.gz
tar xvfz cm6.3.1-ubuntu1804.tar.gz -C cloudera-repos/cm6 --strip-components=1
chmod -R ugo+rX cloudera-repos/cm6
1
2
3
4

下载CDH 6的包

wget --recursive --no-parent --no-host-directories https://archive.cloudera.com/cdh6/6.3.2/ubuntu1804/ -P cloudera-repos
wget --recursive --no-parent --no-host-directories https://archive.cloudera.com/gplextras6/6.3.2/ubuntu1804/ -P cloudera-repos
chmod -R ugo+rX cloudera-repos/cdh6
chmod -R ugo+rX cloudera-repos/gplextras6
1
2
3
4

临时起一个Http服务

python3 -m SimpleHTTPServer 8900
1

在Ubuntu中创建资源文件,并指向我们临时创建的http服务

vim /etc/apt/sources.list.d/cloudera-repo.list

#内容如下
deb [arch=amd64] http://192.168.50.76:8900/cloudera-repos/cm6/ bionic-cm6.3.1 contrib
1
2
3
4

添加GPG key

wget https://archive.cloudera.com/cm6/6.3.1/ubuntu1604/apt/archive.key
apt-key add archive.key
1
2

最后更新一下源即可

apt-get update
1

# 1.3 安装 Cloudera Manager Server

# 安装JDK
apt-get install openjdk-8-jdk
# 或 apt-get install oracle-j2sdk1.8

apt-get install cloudera-manager-daemons cloudera-manager-agent cloudera-manager-server
1
2
3
4
5

# 1.4 安装mariadb数据库

apt-get install mariadb-server

# 系统启动的时候自动启动 mariadb
systemctl enable mariadb

# 设置root账号密码
/usr/bin/mysql_secure_installation
1
2
3
4
5
6
7

以下是官方需要数据库的服务清单

Databases for Cloudera Software
Service Database User
Cloudera Manager Server scm scm
Activity Monitor amon amon
Reports Manager rman rman
Hue hue hue
Hive Metastore Server metastore hive
Sentry Server sentry sentry
Cloudera Navigator Audit Server nav nav
Cloudera Navigator Metadata Server navms navms
Oozie oozie oozie

根据实际情况创建即可

CREATE DATABASE scm DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON scm.* TO 'scm'@'%' IDENTIFIED BY 'scm';
CREATE DATABASE hue DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hue.* TO 'hue'@'%' IDENTIFIED BY 'hue';
CREATE DATABASE hive DEFAULT CHARACTER SET utf8 DEFAULT COLLATE utf8_general_ci;
GRANT ALL ON hive.* TO 'hive'@'%' IDENTIFIED BY 'hive';
FLUSH PRIVILEGES;
1
2
3
4
5
6
7

# 1.5 初始化 Cloudera Manager的数据库

安装Jdbc驱动

apt-get install libmysql-java
1

初始化

/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm
1

# 1.6 安装CDH

启动 CM Server,日志路径/var/log/cloudera-scm-server/cloudera-scm-server.log

注意把host文件多余指向127.0.0.1的记录删掉,否则会出现 Unable to retrieve non-local non-loopback IP address 错误

systemctl start cloudera-scm-server
1

接着访问 CM的管理页面 http://localhost:7180/ 默认用户名密码 admin admin

因为网络的关系,我们还是要实现下好CDH的Parcel

wget https://archive.cloudera.com/cdh6/6.3.2/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel
wget https://archive.cloudera.com/cdh6/6.3.2/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel.sha1
wget https://archive.cloudera.com/cdh6/6.3.2/parcels/CDH-6.3.2-1.cdh6.3.2.p0.1605554-bionic.parcel.sha256
wget https://archive.cloudera.com/cdh6/6.3.2/parcels/manifest.json
1
2
3
4

# 1.7 Cloudera Manager许可证管理

在前面的安装时,在版本说明页面有三个选项:Cloudera Express、Cloudera Enterprise数据集线器60天试用版和Cloudera Enterprise。Cloudera Express版本不需要许可证,试用版使用的是60天的试用许可证;Cloudera Enterprise需要许可证。我们选择的是默认配置的60天试用版。如果到了60天期限,是不是Cloudera Manager就完全不能用了呢?本小节就来介绍一下Cloudera Manager的许可证管理。

Cloudera Enterprise,也就是所谓的企业版有如下Express版本不具有的特性:

  • 支持LDAP(Lightweight Directory Access Protocol,轻量级目录访问协议)和SAML(Security Assertion Markup Language,安全声明标记语言)身份认证。Cloudera Manager可以依赖内部数据库进行身份认证,企业版还支持通过LDAP和SAML等外部服务进行身份认证。
  • 浏览和还原配置历史。无论何时,当你改变并保存了一系列关于服务、角色或主机的配置信息,Cloudera Manager都会自动保存前一个版本的配置和更改配置的用户名。这样就可以浏览以前的配置,并且在需要时可以回滚到以前的配置状态。
  • 支持SNMP traps报警和用户定制的报警脚本。当预制定阈值越界等情况出现时,可以在任何时候向SNMP管理器报告错误情况,而不用等待SNMP管理器的再次轮询。
  • 备份与崩溃恢复。Cloudera Manager企业版提供了一套集成的、易用的、Hadoop平台上的数据保护解决方案。Cloudera Manager允许跨数据中心的数据复制,包括HDFS里的数据、Hive表中的数据、Hive元数据、Impala元数据等。即使遇到一个数据中心都当掉的情况,仍然可以保证这些关键数据是可用的。
  • 能够建立操作报告。在企业版Cloudera Manager的报告页面,可以建立HDFS的使用报告,包括每个用户、组或者目录的文件数及数据大小等信息,还可以报告MapReduce的操作情况。
  • 支持Cloudera导航。Cloudera导航是一个与Hadoop平台完全集成的数据管理和安全系统,包括数据的审计、可视化、加密、搜索、分析等数据管理功能。
  • 只有企业版支持Rolling Restart、History and Rollback和Send Diagnostic Data操作命令。
  • 提供集群使用报告。企业版Cloudera Manager的集群使用报告页面显示汇总的YARN和Impala作业使用信息。报告还显示CPU、内存的使用情况,基于YARN fair调度器的资源分配情况,Impala查询等,可以配置报告的时间范围。

登录Cloudera Manager后,选择“管理”→“许可证”菜单,就访问到许可证页面。如果已经安装了许可证,该页面将显示许可证的状态(如当前是否有效)和许可证的属主、密钥、过期时间等细节信息。

如果企业版的许可证过期,Cloudera Manager仍然可以使用,只是企业版特性将不可用。试用版许可证只能使用一次,当60天试用期满,或者手工结束试用,将不能再次开启试用。试用结束后,企业版特性立即不可用,但是被禁用功能的相关数据和配置并不删除,一旦安装了企业版许可证,这些功能会再次生效。

# 二、安装开源版Hadoop

系统:CentOS 7

组件 hdp1 hdp2 hdp3
HDFS NameNode DataNode DataNode SecondaryNameNode DataNode
YARN NodeManager JobHistoryServer ResourceManager NodeManager NodeManager

# 2.1 前置配置

传送门

# 2.2 Hadoop 下载

Hadoop (opens new window)官方下载最新版,然后解压

tar -zxvf  hadoop.tar.gz
1

/etc/profile.d/my_env.sh中增加hadoop相关变量

#HADOOP_HOME
export HADOOP_HOME=/opt/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
1
2
3
4

# 2.3 配置用户sudo权限

传送门

# 2.4 ssh免密登陆

传送门

# 2.5 复制文件清单

xsync /etc/environment
xsync /etc/profile.d/my_env.sh
xsync /opt/jdk1.8.0_301
xsync /etc/hosts
xsync /opt/hadoop/
1
2
3
4
5

# 2.6 配置文件

默认配置文件

默认文件 jar包中的位置
core-default.xml hadoop/share/hadoop/common/hadoop-common-3.3.1.jar
hdfs-default.xml hadoop/share/hadoop/hdfs/hadoop-hdfs-3.3.1.jar
yarn-default.xml hadoop/share/hadoop/yarn/hadoop-yarn-common-3.3.1.jar
mapred-default.xml hadoop/share/hadoop/mapreduce/hadoop-mapreduce-client-core-3.3.1.jar

自定义配置文件

core-site.xmlhdfs-site.xmlyarn-site.xmlmapred-site.xml四个配置文件存放在$HADOOP_HOME/etc/hadoop这个路径上

# 2.7 核心配置

/opt/hadoop/etc/hadoop/core-site.xml 核心文件

<configuration>
    <!-- 指定 NameNode 的地址 --> 
    <property>
        <name>fs.defaultFS</name>
        <value>hdfs://hdp1:8020</value> 
    </property>
    <!-- 指定 hadoop 数据的存储目录 -->
    <property>
        <name>hadoop.tmp.dir</name>
        <value>/opt/hadoop/data</value>
    </property>
    <!-- 配置 HDFS 网页登录使用的静态用户为 tpxcer --> 
    <property>
        <name>hadoop.http.staticuser.user</name>
        <value>tpxcer</value> 
    </property>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

/opt/hadoop/etc/hadoop/hdfs-site.xml

<configuration>
    <!-- nn web端访问地址--> 
    <property>
        <name>dfs.namenode.http-address</name>
        <value>hdp1:9870</value> 
    </property>
    <!-- 2nn web 端访问地址--> 
    <property>
        <name>dfs.namenode.secondary.http-address</name>
        <value>hdp2:9868</value> 
    </property>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12

/opt/hadoop/etc/hadoop/yarn-site.xml

<configuration>
    <!-- 指定 MR 走 shuffle --> 
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value> 
    </property>
    <!-- 指定 ResourceManager 的地址--> 
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>hdp1</value> 
    </property>
    <!-- 环境变量的继承 -->
    <property>
        <name>yarn.nodemanager.env-whitelist</name>
        <value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CONF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAPRED_HOME</value>
    </property>
</configuration>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17

/opt/hadoop/etc/hadoop/mapred-site.xml

<configuration>
    <!-- 指定 MapReduce 程序运行在 Yarn 上 --> 
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
   </property>
</configuration>
1
2
3
4
5
6
7

分发配置好的文件

xsync /opt/hadoop/etc/hadoop/
1

# 2.8 配置workers

2.x系列文件名叫slaves

[root@hdp1 etc]# cat /opt/hadoop/etc/hadoop/workers
hdp1
hdp2
hdp3

[root@hdp1 etc]# xsync /opt/hadoop/etc/hadoop/workers
1
2
3
4
5
6

# 2.9 启动集群

(1) 初始化

仅第一次启动需要该步骤,初始化以后目录新增datalogs目录

hdfs namenode -format

# BTW 日志目录可以单独设置
hdp1-➜ vim /opt/hadoop/etc/hadoop/hadoop-env.sh
export HADOOP_LOG_DIR=/opt/hdp-data/hadoop-hdp1/logs
1
2
3
4
5

(2) 启动HDFS

sbin/start-dfs.sh
1

如果出现以下错误,说明你是用root启动的,可以参考这里 (opens new window)解决

ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
1
2

jps看下进程

[tpxcer@hdp1 hadoop]$ jps
77456 NameNode
77625 DataNode
78763 Jps

[tpxcer@hdp1 .ssh]$ jps
55728 Jps
53439 DataNode

[tpxcer@hdp2 .ssh]$ jps
53506 DataNode
53650 SecondaryNameNode
56323 Jps
1
2
3
4
5
6
7
8
9
10
11
12
13

访问HDFS WebUI http://hdp1:9870/

(3) 启动 YARN

登陆salve01启动yarn

[tpxcer@hdp1 hadoop]$ sbin/start-yarn.sh
1

jps查看

================current host is hdp1=================
--> excute command "jps"
6928 NodeManager
7243 Jps
6812 ResourceManager
6351 NameNode
6495 DataNode
================current host is hdp2=================
--> excute command "jps"
3299 DataNode
3413 SecondaryNameNode
3642 Jps
3516 NodeManager
================current host is hdp3=================
--> excute command "jps"
3009 NodeManager
2870 DataNode
3135 Jps
excute successfully !
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19

查看YARN的WebUI http://hdp1:8088/cluster

# 2.10 群集基本测试

(1) 上传文件到群集

hadoop fs -mkdir /input
hadoop fs -put README.txt /input
1
2

(2) 拼接数据

二进制文件可以通过cat拼接

cat blk_xxxx1 >> tmp.tar.gz
cat blk_xxxx2 >> tmp.tar.gz
cat blk_xxxx3 >> tmp.tar.gz

tar xzf tmp.tar.gz
1
2
3
4
5

(3) 执行wordcount

[tpxcer@hdp1 subdir0]$ cd /opt/hadoop/
hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.1.jar wordcount /input /wcoutput
1
2

# 2.11 配置历史服务器

mapred-site.xml配置历史服务器

    <!-- 历史服务器端地址 --> 
    <property>
        <name>mapreduce.jobhistory.address</name>
        <value>hdp1:10020</value> 
    </property>
    <!-- 历史服务器 web 端地址 --> 
    <property>
        <name>mapreduce.jobhistory.webapp.address</name>
        <value>hdp1:19888</value> 
    </property>
1
2
3
4
5
6
7
8
9
10

分发配置

[tpxcer@hdp1 hadoop]$ xsync mapred-site.xml
1

启动历史服务器

# 先把yarn关掉
[tpxcer@hdp1 hadoop]$ sbin/stop-yarn.sh
# 再启动yarn后,接着启动historyserver
[tpxcer@hdp1 hadoop]$ sbin/start-yarn.sh
[tpxcer@hdp1 hadoop]$ bin/mapred --daemon start historyserver
# 如果是Hadoop2.0用以下命令启动
[tpxcer@hdp1 hadoop]$ sbin/mr-jobhistory-daemon.sh start historyserver
[tpxcer@hdp1 hadoop]$ jps
77456 NameNode
110944 Jps
108740 NodeManager
77625 DataNode
110799 JobHistoryServer
1
2
3
4
5
6
7
8
9
10
11
12
13

访问历史服务器WebUI:http://hdp1:19888/

# 2.12 配置日志聚集

配置yarn-site.xml

    <!-- 开启日志聚集功能 --> 
    <property>
        <name>yarn.log-aggregation-enable</name>
        <value>true</value>
    </property>
    <!-- 设置日志聚集服务器地址 --> 
    <property>
        <name>yarn.log.server.url</name> 
        <value>http://hdp1:19888/jobhistory/logs</value>
    </property>
    <!-- 设置日志保留时间为 7 天 --> 
    <property>
        <name>yarn.log-aggregation.retain-seconds</name>
        <value>604800</value>
    </property>
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15

分发配置

[tpxcer@hdp1 hadoop]$ xsync etc/hadoop/yarn-site.xml
1

重启服务

[tpxcer@hdp1 hadoop]$ mapred --daemon stop historyserver
[tpxcer@hdp1 hadoop]$ sbin/stop-yarn.sh
[tpxcer@hdp1 hadoop]$ sbin/start-yarn.sh
[tpxcer@hdp1 hadoop]$ mapred --daemon start historyserver
1
2
3
4

# 2.13 群集启动/停止方式总结

  1. 各个模块分开启动

整体启动/停止HDFS

start-dfs.sh/stop-dfs.sh
1

整体启动/停止YARN

start-yarn.sh/stop-yarn.sh
1
  1. 各个服务组件逐一启动/停止

分别启动/停止HDFS 组件

hdfs --daemo start/stop namenode/datanode/secondarynamenode
1

启动/停止YARN

yarn --daemon start/stop resourcemanager/nodemanager
1

# 2.14 Hadoop 群集启停脚本

[tpxcer@hdp1 script]$ cat myhadoop.sh
#!/bin/bash
if [ $# -lt 1 ]
then
   echo "No Args Input..."
exit ;
fi

case $1 in
"start")
    echo " =================== 启动 hadoop 集群 ==================="
    echo " --------------- 启动 hdfs ---------------"
    ssh hdp1 "/opt/hadoop/sbin/start-dfs.sh"
    echo " --------------- 启动 yarn ---------------"
    ssh hdp1 "/opt/hadoop/sbin/start-yarn.sh"
    echo " --------------- 启动 historyserver ---------------"
    ssh hdp1 "/opt/hadoop/bin/mapred --daemon start historyserver"
    ;;
"stop")
    echo " =================== 关闭 hadoop 集群 ==================="
    echo " --------------- 关闭 historyserver ---------------"
    ssh hdp1 "/opt/hadoop/bin/mapred --daemon stop historyserver"
    echo " --------------- 关闭 yarn ---------------"
    ssh hdp1 "/opt/hadoop/sbin/stop-yarn.sh"
    echo " --------------- 关闭 hdfs ---------------"
    ssh hdp1 "/opt/hadoop/sbin/stop-dfs.sh"
    ;;
*)
    echo "Input Args Error..."
;; esac
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
更新时间: 1/20/2022, 6:52:58 PM