Hadoop 安装部署
Hadoop 安装部署
一、安装 Cloudera Enterprise 6.3.x
视频教程手摸手教你在Ubuntu 18.04中部署Cloudera Enterprise 6.2.x 跟你聊聊企业部署Hadoop的注意事项CDH
1.1 安装Ubuntu 18.04.4 LTS
前往https://ubuntu.com/download/desktop
下载最新版本的Ubuntu 18.04.4 LTS
做一些必要配置
# 安装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 配置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
下载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
临时起一个Http服务
python3 -m SimpleHTTPServer 8900
在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
添加GPG key
wget https://archive.cloudera.com/cm6/6.3.1/ubuntu1604/apt/archive.key
apt-key add archive.key
最后更新一下源即可
apt-get update
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.4 安装mariadb数据库
apt-get install mariadb-server
# 系统启动的时候自动启动 mariadb
systemctl enable mariadb
# 设置root账号密码
/usr/bin/mysql_secure_installation
以下是官方需要数据库的服务清单
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.5 初始化 Cloudera Manager的数据库
安装Jdbc驱动
apt-get install libmysql-java
初始化
/opt/cloudera/cm/schema/scm_prepare_database.sh mysql scm scm
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
接着访问 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.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
组件 | node01 | node02 | node03 |
---|---|---|---|
HDFS | NameNode DataNode | DataNode | SecondaryNameNode DataNode |
YARN | NodeManager JobHistoryServer | ResourceManager NodeManager | NodeManager |
2.1 前置配置
2.2 Hadoop 下载
从Hadoop官方下载最新版,然后解压
[root@node01 ~]$ wget https://dlcdn.apache.org/hadoop/common/hadoop-3.3.5/hadoop-3.3.5.tar.gz
[root@node01 ~]# tar -xzf hadoop-3.3.5.tar.gz
[root@node01 hadoop]# xcall chown hadoop:hadoop -R /opt/hadoop-3.3.5
[root@node01 ~]# ln -s hadoop-3.3.5 hadoop
在/etc/profile.d/my_env.sh
中增加hadoop相关变量
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
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/
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.xml
、hdfs-site.xml
、yarn-site.xml
、mapred-site.xml
四个配置文件存放在$HADOOP_HOME/etc/hadoop
这个路径上
2.7 核心配置
/opt/hadoop/etc/hadoop/core-site.xml
核心文件
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://node01: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>hadoop</value>
</property>
</configuration>
/opt/hadoop/etc/hadoop/hdfs-site.xml
<configuration>
<!-- nn web端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>node01:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>node02:9868</value>
</property>
</configuration>
/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>node01</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_HOME,PATH,LANG,TZ,HADOOP_MAPRED_HOME</value>
</property>
</configuration>
/opt/hadoop/etc/hadoop/mapred-site.xml
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<property>
<name>mapreduce.application.classpath</name>
<value>/opt/hadoop/share/hadoop/mapreduce/*</value>
</property>
</configuration>
分发配置好的文件
xsync /opt/hadoop/etc/hadoop/
2.8 配置workers
2.x系列文件名叫slaves
[root@node01 etc]# cat /opt/hadoop/etc/hadoop/workers
node01
node02
node03
[root@node01 etc]# xsync /opt/hadoop/etc/hadoop/workers
2.9 启动集群
(1) 初始化
仅第一次启动需要该步骤
,初始化以后目录新增data
和logs
目录
$HADOOP_HOME/bin/hdfs namenode -format
# BTW 日志目录可以单独设置
node01-➜ vim /opt/hadoop/etc/hadoop/hadoop-env.sh
export HADOOP_LOG_DIR=/opt/hdp-data/hadoop-node01/logs
(2) 启动HDFS
$HADOOP_HOME/sbin/start-dfs.sh
如果出现以下错误,说明你是用root启动的,可以参考这里解决
ERROR: Attempting to operate on hdfs namenode as root
ERROR: but there is no HDFS_NAMENODE_USER defined. Aborting operation.
打jps
看下进程
[root@node01 ~]# xcall jps
================current host is node01=================
--> excute command "jps"
11488 DataNode
16178 Jps
11299 NameNode
================current host is node02=================
--> excute command "jps"
5635 SecondaryNameNode
17833 Jps
5483 DataNode
================current host is node03=================
--> excute command "jps"
4950 DataNode
9101 Jps
excute successfully !
访问HDFS WebUI http://node01:9870/
(3) 启动 YARN
登陆salve01启动yarn
[hadoop@node01 ~]$ $HADOOP_HOME/sbin/start-yarn.sh
jps查看
[tpxcer@node01 root]$ xcall jps
================current host is node01=================
--> excute command "jps"
11488 DataNode
11299 NameNode
16900 ResourceManager
17064 NodeManager
17563 Jps
================current host is node02=================
--> excute command "jps"
17986 NodeManager
5635 SecondaryNameNode
5483 DataNode
18207 Jps
================current host is node03=================
--> excute command "jps"
9476 Jps
4950 DataNode
9255 NodeManager
excute successfully !
查看YARN的WebUI http://node01:8088/cluster
2.10 群集基本测试
(1) 上传文件到群集
hadoop fs -mkdir /input
hadoop fs -put README.txt /input
(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
(3) 执行wordcount
[tpxcer@node01 ~]$ cd /opt/hadoop
[tpxcer@node01 hadoop]$ hadoop jar $HADOOP_HOME/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.3.5.jar wordcount /input /wcoutput
2.11 配置历史服务器
在/opt/hadoop/etc/hadoop/mapred-site.xml
配置历史服务器
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>node01:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>node01:19888</value>
</property>
分发配置
[tpxcer@node01 hadoop]$ xsync /opt/hadoop/etc/hadoop/mapred-site.xml
启动历史服务器
# 先把yarn关掉
[tpxcer@node01 hadoop]$ stop-yarn.sh
# 再启动yarn后,接着启动historyserver
[tpxcer@node01 hadoop]$ start-yarn.sh
[tpxcer@node01 hadoop]$ mapred --daemon start historyserver
# 如果是Hadoop2.0用以下命令启动
[tpxcer@node01 hadoop]$ sbin/mr-jobhistory-daemon.sh start historyserver
[tpxcer@node01 hadoop]$ jps
77456 NameNode
110944 Jps
108740 NodeManager
77625 DataNode
110799 JobHistoryServer
访问历史服务器WebUI:http://node01:19888/
2.12 配置日志聚集
配置/opt/hadoop/etc/hadoop/yarn-site.xml
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://node01:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
分发配置
[tpxcer@node01 hadoop]$ xsync /opt/hadoop/etc/hadoop/yarn-site.xml
重启服务
[tpxcer@node01 hadoop]$ mapred --daemon stop historyserver
[tpxcer@node01 hadoop]$ stop-yarn.sh
[tpxcer@node01 hadoop]$ start-yarn.sh
[tpxcer@node01 hadoop]$ mapred --daemon start historyserver
2.13 Web UI访问汇总
服务 | URL |
---|---|
HDFS | http://node01:9870/ |
YARN | http://node01:8088/cluster |
YARN 历史服务 | http://node01:19888/ |
2.14 Hadoop 群集启停脚本
[tpxcer@node01 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 node01 "$HADOOP_HOME/sbin/start-dfs.sh"
echo " --------------- 启动 yarn ---------------"
ssh node01 "$HADOOP_HOME/sbin/start-yarn.sh"
echo " --------------- 启动 historyserver ---------------"
ssh node01 "$HADOOP_HOME/bin/mapred --daemon start historyserver"
;;
"stop")
echo " =================== 关闭 hadoop 集群 ==================="
echo " --------------- 关闭 historyserver ---------------"
ssh node01 "$HADOOP_HOME/bin/mapred --daemon stop historyserver"
echo " --------------- 关闭 yarn ---------------"
ssh node01 "$HADOOP_HOME/sbin/stop-yarn.sh"
echo " --------------- 关闭 hdfs ---------------"
ssh node01 "$HADOOP_HOME/sbin/stop-dfs.sh"
;;
*)
echo "Input Args Error..."
;; esac
三、最佳实践
3.1 HDFS 参数调优
- 节点间数据均衡
对于参数10,代表的是集群中各个节点的磁盘空间利用率相差不超过10%,可根据实际情况进行调整。
start-balancer.sh -threshold 10
停止数据均衡命令:
stop-balancer.sh
- 磁盘间数据均衡
# 生成均衡计划(只有一块磁盘,不会生成计划)
hdfs diskbalancer -plan node01
# 执行均衡计划
hdfs diskbalancer -execute node01.plan.json
# 查看当前均衡任务的执行情况
hdfs diskbalancer -query node01
# 取消均衡任务
hdfs diskbalancer -cancel node01.plan.json
- 在
hdfs-site.xml
文件中配置多目录
HDFS的DataNode节点保存数据的路径由dfs.datanode.data.dir
参数决定,其默认值为 file://${hadoop.tmp.dir}/dfs/data
,若服务器有多个磁盘,必须对该参数进行修改。如服务器磁盘如上图所示,则该参数应修改为如下的值。
<property>
<name>dfs.datanode.data.dir</name>
<value>file:///dfs/data1,file:///hd2/dfs/data2,file:///hd3/dfs/data3,file:///hd4/dfs/data4</value>
</property>
注意:每台服务器挂载的磁盘不一样,所以每个节点的多目录配置可以不一致。单独配置即可。
- HDFS参数调优
hdfs-site.xml
NameNode有一个工作线程池,用来处理不同DataNode的并发心跳以及客户端并发的元数据操作。对于大集群或者有大量客户端的集群来说,通常需要增大参数dfs.namenode.handler.count的默认值10。
<property>
<name>dfs.namenode.handler.count</name>
<value>10</value>
</property>
可以通过导数公式计算,例如群集规模为8,则需要设置为41,公式如下,以python为例
>>> import math
>>> print int(20*math.log(8))
41
>>> quit()
3.2 YARN 参数调优 yarn-site.xml
- 单节点可用内存
<!-- NodeManager 使用内存数,默认 8G,修改为 4G 内存 -->
<property>
<description>Amount of physical memory, in MB, that can be allocated for containers. If set to -1 and yarn.nodemanager.resource.detect-hardware-capabilities is true, it is automatically calculated(in case of Windows and Linux). In other cases, the default is 8192MB.</description>
<name>yarn.nodemanager.resource.memory-mb</name>
<value>4096</value>
</property>
- 单个任务可申请的最多物理内存量
<property>
<name>yarn.scheduler.maximum-allocation-mb</name>
<value>2048</value>
</property>