- Hadoop介绍
Hadoop部署
大数据基础平台安装实操目标
Hadoop介绍
分布式存储组件:HDFS
- 分布式存储系统
- 提供了高可靠性、高扩展性、高吞吐率和高容错率的数据存储服务
资源管理系统:YARN
- 负责集群资源的统一管理和调度
分布式计算框架:MapReduce
- 分布式计算框架
- 具有易于编程、高容错和高扩展等优点
版本技术衍进
HDFS
结构
特点
扩展性:横向无限扩展
高容错性:备份机制
适合PB级以上海量数据的存储
节点
Namenode
Datanode
基本原理
- 将文件切分成等大数据块,存储到多台机器上
- 将数据切分、容错、负载均衡等功能透明化
- 可将HDFS看成一个容量巨大、具有高容错性的磁盘
YARN
- Hadoop 2.0新增系统
- 负责集群的资源管理和调度
- 使得多种计算框架可以运行在一个集群中
节点
Resource Manager
Node Manager
MapReduce
两个阶段
map
reduce
特点
- 良好扩展性
- 高容错性
- 适合PB级以上海量的离线处理
计算流程
Zookeeper
进程:QuorumPeerMain
QJM
进程:JournalNode
汇总
HDFS: Namenode 、Datanode、JournalNode(主从Namenode数据同步)、zkfc(Namenode故障转移)
YARN: Resource Manager、Node Manager
MapReduce: map、reduce
Zookeeper: QuorumPeerMain
Hadoop部署
部署模式
- 本地模式
伪分布式模式
完全分布式模式
集群部署设置
大数据基础平台安装实操目标
mysql安装使用
1、创建安装用户及目录规划
1 | useradd -d /iddbs iddbs |
目录名称 | 作用 |
---|---|
/iddbs | MySQL程序目录 |
/iddbs/mysql-5.7.36 | MySQL执行程序目录 |
/iddbs/software | 常用软件存放目录 |
/iddbs/scripts | 常用脚本存放目录 |
/dbdata | MySQL总数据目录 |
/dbdata/$port | MySQL实例目录 |
/dbdata/$port/${port}.cfg | MySQL实例配置文件 |
/dbdata/$port/data | MySQL实例数据存放目录 |
/dbdata/$port/binlog | MySQL实例Binlog存放目录 |
/dbdata/$port/logs | MySQL error/slow/general存放目录 |
/dbdata/$port/tmp | MySQL实例临时目录 |
/dbdata/backup | MySQL备份目录 |
2、上传并解压安装包
1 | tar -zxvf mysql-5.7.36-linux-glibc2.12-x86_64.tar.gz |
3、准备my.cnf文件
4、初始化
1 | /iddbs/mysql-5.7.36/bin/mysqld --defaults-file=/dbdata/3306/3306.cfg --user=iddbs --initialize-insecure |
5、启动MySQL服务
1 | /iddbs/mysql-5.7.36/bin/mysqld_safe --defaults-file=/dbdata/3306/3306.cfg & |
6、登录MySQL数据库
1 | /iddbs/mysql-5.7.36/bin/mysql -uroot -p -S /dbdata/3306/mysql.sock |
7、创建数据库owndb
1 | create database owndb; |
8、给owndb远程登录权限
1 | grant all privileges on *.* to 'root'@'%' identified by 'N@2510las' with grant option; |
9、给owndb创建用户owndbuser
1 | create user 'owndbuser'@'%' identified by 'Polais6G'; |
10、给owndb用户owndbuser授权
1 | grant all on owndb.* to 'owndbuser'@'%'; |
大数据基础平面部署准备
IP | 主机名 | 作用 |
---|---|---|
192.168.80.132 | e3base01 | QuorumPeerMain、Namenode、datanode、zkfc、journalnode、resourcemanager、nodemanager |
192.168.80.133 | e3base02 | QuorumPeerMain、Namenode、datanode、zkfc、journalnode、resourcemanager、nodemanager |
192.168.80.134 | e3base03 | QuorumPeerMain、datanode、journalnode、nodemanager |
192.168.80.131 | mysql01 | mysql |
1、找一台主机克隆,克隆后配置好对应环境。
2、配置IP
1 | vim /etc/sysconfig/network-scripts/ifcfg-ens33 |
3、关闭防火墙
1 | systemctl disable firewalld #永久关闭 |
4、修改主机名
1 | hostnamectl set-hostname e3base01 |
5、配置/etc/hosts
1 | vim /etc/hosts |
6、创建e3base 用户,并创建对应的用数据目录/chunk1 之后授权给e3base:e3base
1 | useradd -d /e3base e3base |
7、修改ulimit 的值
1 | ulimit -u 65536 /ulimit -n 1048576 /ulimit -s 262144 /ulimit -c 65536 |
8、创建/var/run/hadoop-hdfs/ 授权给 e3base:e3base 修改权限为755
ps:只要重启虚拟机,这个路径就会消失,所以每次重新创建
1 | mkdir /var/run/hadoop-hdfs/ |
9、安装JDK
10、配置环境变量
1 | vim .bash_profile |
1 | export PATH |
1 | source .bash_profile |
测试:
1 | java -verison |
11、克隆主机
12、修改主机的IP
1 | vim /etc/sysconfig/network-scripts/ifcfg-ens33 |
13、修改主机名
1 | hostnamectl set-hostname e3base02 |
14、配置ssh免密
root模式下修改:
SELINUX=disable
1 | vi /etc/selinux/config |
三台主机执行以下命令
1 | ssh-keygen -t rsa #生成私钥和密钥 |
在e3base01 主机执行
1 | scp authorized_keys e3base02:/e3base/.ssh/ |
zookeeper部署
1、安装解压zookeeper-3.4.5-cdh5.14.0-e3base3.0.0.tar.gz到/e3base/cdh5140
2、创建软连接(快捷方式)
1 | ln -s /e3base/cdh5140/zookeeper-3.4.5-cdh5.14.0-e3base3.0.0 /e3base/zookeeper |
3、添加zookeeper相关的环境变量。
1 | vi .bash_profile |
1 | export IN_HOME=/e3base/ |
使其生效:
1 | source .bash_profile |
4、创建$E3_INFO_HOME/zookeeper/data目录。
1 | mkdir -p $E3_INFO_HOME/zookeeper/data |
5、修改/e3base/zookeeper/conf/zookeeper-env.sh
1 | export JAVA_HOME=/e3base/jdk |
6、修改/e3base/zookeeper/conf/zoo.cfg配置:
1 | dataDir=/e3base/e3-info/zookeeper/data |
参数解释:
dataDir指定了在第一步中建立的目录,作为zookeeper操作的数据目录。
clientPort指定了zookeeper客户端连接的端口。该端口可以进行配置更改。配置为11001。
server.id=host:port1:port2(如server.1=e3base04:11002:11003)中server后的数字id表示该主机是第几号服务器;host是这个服务器的 ip 地址或主机名;port1表示zookeeper服务器通信端口;port2表示选举端口。
maxClientCnxns 连接zookeeper服务的最大客户端数量,推荐20500。
7、将程序拷贝到其他2台主机:
1 | scp -r zookeeper-3.4.5-cdh5.14.0-e3base3.0.0 e3base02:/e3base/cdh5140/ |
8、在zoo.cfg 配置的dataDir目录,部署zookeeper服务的主机目录/e3base/e3-info/zookeeper/data下创建myid文件,文件中写入该主机在zoo.cfg配置信息server.id=host:port1:port2项中对应的数字id。
1 | 在e3base03上执行: echo 1 > $E3_INFO_HOME/zookeeper/data/myid |
9、zookeeper启动
登陆zookeeper集群中每台主机启动zookeeper,命令:
1 | zkServer.sh start |
通过jps查看各主机上进程是否均已启动。
主机 | 进程名 |
---|---|
在启动的对应主机上查看 | QuorumPeerMain |
启动后可以使用查看zookeeper进程状态,命令:
1 | zkServer.sh status |
正常的集群状态有两种mode:leader、follower
可使用客户端命令进行测试,是否zookeeper启动正常,命令:
1 | zkCli.sh -server e3base01:11001,e3base02:11001,e3base03:11001(-server后加参数为zookeeper集群服务的地址和端口) |
10、zookeep停止
1 | zkServer.sh stop |
HDFS部署
1、将安装程序hadoop-2.6.0-cdh5.14.0-e3base3.0.0.tar.gz在/e3base/cdh5140目录下解压
2、设置软连接
1 | ln -s /e3base/cdh5140/hadoop-2.6.0-cdh5.14.0-e3base3.0.0 /e3base/hadoop |
3、配置环境变量
1 | export IN_HOME=/e3base/ |
4、hadoop-env.sh文件配置
特别注意配置文件中的以下参数需要根据实际情况进行修改:
1 | export JAVA_HOME=/usr/java/jdk1.8 |
参数解释:
- JAVA_HOME配置上安装jdk的目录。
- HADOOP_HOME 配置hadoop应用目录。
- HADOOP_LOG_DIR指定的是Hadoop的日志路径,默认的设置是$HADOOP_HOME/logs,一般需要将其配置到一个磁盘空间比较大的目录下,设置成$E3_INFO_HOME/hadoop/logs。
- HADOOP_PID_DIR指定的是hadoop进程id的存放路径,默认在/tmp下,不修改可能导致无法正常启停,设置成$E3_INFO_HOME/hadoop/pids。
注:配置文件中HADOOP_HEAPSIZE、HADOOP_NAMENODE_OPTS、HADOOP_DATANODE_OPTS参数中的JVM堆内存大小,如在测试环境,请注意修改这些参数中的-Xms -Xms -Xmn值符合当前主机环境,如堆内存值配置过大超过系统可用内存,会导致服务启动失败。
5、core-site.xml文件配置
1 | <configuration> |
参数解释:
fs.default.name指定了HDFS的文件系统名称,value格式hdfs://xxxxxx/ 。
ha.zookeeper.quorum指定了用于hadoop namenode失效切换的zookeeper集群信息,填写格式ip:port,多个主机之间以逗号分隔。配置值与zookeeper安装部署保持一致。
hadoop.tmp.dir指定了hadoop临时文件存放目录,配置为/e3base/e3-info/hadoop/tmp/hadoop-${user.name}。
6、hdfs-site.xml文件配置
1 | <configuration> |
dfs.nameservices指定了集群服务名称,配置为drmcluster。
dfs.namenode.nn1.hostname,dfs.namenode.nn2.hostname分别指定配置namenode服务的主机名,根据实际情况修改。
dfs.ha.namenodes.drmcluster指定了第一个配置项drmcluster集群服务中用于namenode HA的节点名称,配置为nn1、nn2。
dfs.journalnode.edits.dir指定了journal node集群中各主机存储数据的本地磁盘路径,配置成/e3base/e3-info/hadoop/jn。
dfs.namenode.name.dir 配置成file:///e3base/e3-info/hadoop/nn
dfs.namenode.shared.edits.dir和dfs.namenode.name.dir指定了namenode元数据的存储目录,dfs.namenode.shared.edits.dir目录指定了QJM方式实现的元数据存储的路径(qjournal://e3base03:12007;e3base04:12007;e3base05:12007/drmcluster,e3base0*指定了journalnode集群,12007 JournalNode服务通信端口,drmcluster是dfs.nameservices指定了集群服务名称)。
dfs.datanode.data.dir指定了数据节点存放数据的目录,不做raid。(一般设置为挂载多块硬盘的路径),若值设置为/data1/hdfs,/data2/hdfs,/data3/hdfs,则需要在根目录下创建对应的目录,每个/data*目录需挂载到一块数据盘上。
7、slaves文件配置
1 | /***********************slaves文件内容***********************/ |
slaves文件中配置了hadoop集群所包含的所有datanode节点,每行对应一个主机名。HDFS和YARN公用。
8、机架感知配置
在/e3base/cdh5140/hadoop/etc/hadoop目录下,修改topology.data文件。根据datanode节点修改相应的IP和主机名,以及机架名(rack)。如果datanode都在同一机架,机架名可相同。
1 | 192.168.248.133 e3base01 /rack1 |
9、将程序拷贝到其他2台主机:
1 | scp -r hadoop-2.6.0-cdh5.14.0-e3base3.0.0 e3base02:/e3base/cdh5140 |
10、创建对应的路径(只要重启虚拟机,这个路径就会消失,所以每次重新创建)(root下)!!!
1 | mkdir -p /var/run/hadoop-hdfs/ |
11、初始化HDFS
(1)初始化zkfc
在ZK中创建znode来存储automatic Failover的数据,任选一个NN执行完成即可。在一个namenode上进入$HADOOP_HOME/bin执行:
1 | /e3base/hadoop/bin/hdfs zkfc -formatZK |
(2)先启动journal node进程。
在每一个journalnode上进入$HADOOP_HOME执行:
1 | /e3base/hadoop/sbin/hadoop-daemon.sh start journalnode |
执行完成后,通过jps查看JournalNode进程是否启动正常。
(3)初始化主namenode节点
在需要做主namenode节点主机上进入$HADOOP_HOME/bin执行如下命令实现初始化HDFS目录、文件:
1 | /e3base/hadoop/bin/hdfs namenode -format |
(4)初始化备namenode节点
启动主namenode节点:
1 | /e3base/hadoop/sbin/hadoop-daemon.sh start namenode |
在另外备namenode节点拷贝主namenode节点的元数据,保证两个节点数据一致:
1 | /e3base/hadoop/bin/hdfs namenode -bootstrapStandby |
12、启动HDFS
(1)启动hdfs
1 | /e3base/hadoop/sbin/start-dfs.sh |
(2)单节点启动namenode进程
1 | /e3base/hadoop/sbin/hadoop-daemon.sh start namenode |
(3)单节点启动zkfc进程
1 | /e3base/hadoop/sbin/hadoop-daemon.sh start zkfc |
(4)单节点启动datanode进程
1 | /e3base/hadoop/sbin/hadoop-daemon.sh start datanode |
(5)单节点启动journalnode进程
1 | /e3base/hadoop/sbin/hadoop-daemon.sh start journalnode |
(6)启动所有datanode进程
1 | /e3base/hadoop/sbin/hadoop-daemons.sh start datanode |
ps:如配置了hadoop环境变量,无需进入/e3base/hadoop/sbin/执行
13、HDFS停止
(1)停止hdfs
1 | /e3base/hadoop/sbin/stop-dfs.sh |
(2)单节点停止namenode进程
1 | /e3base/hadoop/sbin/hadoop-daemon.sh stop namenode |
(3)单节点停止zkfc进程(两个namenode单独停止)
1 | /e3base/hadoop/sbin/hadoop-daemon.sh stop zkfc |
(4)单节点停止datanode进程
1 | /e3base/hadoop/sbin/hadoop-daemon.sh stop datanode |
(5)单节点启动journalnode进程
1 | /e3base/hadoop/sbin/hadoop-daemon.sh stop journalnode |
(6)停止所有datanode进程
1 | /e3base/cdh5140/hadoop/sbin/hadoop-daemons.sh stop datanode |
ps:如配置了hadoop环境变量,无需进入/e3base/hadoop/sbin/执行
13、HDFS进程查看
jps
主机 | 进程名 |
---|---|
$HADOOP_HOME /etc/hadoop下hdfs.xml文件中dfs.namenode.rpc-address.mycluster..*对应的主机 | NameNode |
$HADOOP_HOME /etc/hadoop下hdfs.xml文件中dfs.namenode.rpc-address.mycluster..*对应的主机(同NN) | DFSZKFailoverController(zkfc) |
$HADOOP_HOME /etc/hadoop下hdfs.xml文件中dfs.namenode.shared.edits.dir配置项包含的主机 | JournalNode |
$HADOOP_HOME /etc/hadoop下slaves文件中包含的主机 | DataNode |
13、HDFS状态查看
(1) namenode状态查看
执行:
1 | hdfs haadmin -getServiceState serviceid |
如
1 | hdfs haadmin -getServiceState nn1 |
注:
两种状态:active、standby。serviceid为该主机在$HADOOP_HOME /etc/hadoop下hdfs.xml文件中dfs.namenode.rpc-address.mycluster.*对应的值。
(2) namenode状态手动切换
nn1为active,手动切换成nn2为active,执行:
1 | hadoop/bin/hdfs haadmin -DFSHAadmin -failover nn1 nn2 |
(3) namenode离开安全模式
hdfs 是否进入安全模式检查:
1 | hdfs dfsadmin -safemode get |
离开安全模式,执行:
1 | hadoop/bin/hdfs dfsadmin -safemode leave |
(4) HDFS 健康状态检查
1 | hdfs dfsadmin -report |
(5) HDFS数据块完整性检查
1 | hdfs fsck / |
14、HDFS命令使用
(1)文件列表的命令为:
1 | hdfs dfs -ls |
不指名路径,默认用户工作目录,为hdfs下的/user/$USER目录($USER为当前用户)
(2)增加文件目录:
1 | hdfs dfs -mkdir文件目录路径 |
(3)用put将文件从本地文件复制到HDFS中去:
1 | hdfs dfs -put <localsrc> ... <dst> |
(4)从HDFS中取回文件:
1 | hdfs dfs -get <localsrc> ... <dst> |
(5)删除文件:
1 | hdfs dfs -rm example.txt |
15、HDFS监控页面使用
查看namenode:
1 | http://namenodeIP or hostname:port] |
namenodeIP or hostname为状态为active的namenode对应IP或hostname
port为dfs.namenode.http-address.drmcluster.nn1 或 dfs.namenode.http-address.drmcluster.nn2 对应的端口,目前为(12003)
查看 datanode:
1 | http://datanodeIP or hostname:port] |
datanodeIP or hostname为datanode对应IP或hostname
port为dfs.datanode.http.address 对应的端口,目前为(12004)。
效果如图:
yarn部署
1、环境变量配置
1 | export IN_HOME=/e3base/cdh5140 |
2、yarn-env.sh文件配置
1 | export JAVA_HOME=/e3base/jdk |
JAVA_HOME配置上安装jdk的目录,JDK安装路径,默认情况下执行读取linux环境变量${JAVA_HOME}。。
YARN_LOG_DIR指定的是yarn的日志路径。
YARN_PID_DIR 指定的是YARN的进程的pid存放路径。
ps:配置文件中YARN_RESOURCEMANAGER_OPTS、YARN_NODEMANAGER_OPTS参数中的JVM堆内存大小,如在测试环境,请注意修改这些参数中的-Xms -Xms -Xmn值符合当前主机环境,如堆内存值配置过大超过系统可用内存,会导致服务启动失败
3、yarn-site.xml文件配置
1 | <configuration> |
4、fair-scheduler.xml文件配置
集群总容量/内核数量
1 | <queue name="root"> |
5、主机间同步
1 | scp yarn-env.sh yarn-site.xml fair-scheduler.xmle3base02:/e3base/hadoop/etc/hadoop/ |
6、在mapred-env.sh中增加配置:
1 | export HADOOP_HOME=/e3base/hadoop |
7、mapred-site.xml
1 | <configuration> |
Mapreduce.jobhistory.hostname 填写jobhistory服务主机名
mapreduce.jobhistory.address:MapReduce JobHistory Server地址,地址形式为 主机地址:端口。(注:如部署Jobhistory服务主机处于内外网环境,需配置主机地址为0.0.0.0)在YARN中执行MR代码时,作业向该服务汇报作业的执行历史,从而记录作业的执行信息,供查询用。
mapreduce.jobhistory.webapp.address:MapReduce JobHistory Server Web UI地址。通过web页面查看MR执行状态的地址。配置方式同上。
mapreduce.jobhistory.intermediate-done-dir:MapReduce作业产生的日志存放位置
mapreduce.jobhistory.done-dir:MR JobHistory Server管理的日志的存放位置
8、yarn启动
(1) 与hdfs同时启动集群
在hadoop active namenode主机上执行如下命令:
1 | start-all.sh |
启动hdfs和yarn,若配置了zookeeper,同时启动zkfc
(2)在主管理节点上运行下面指令,仅启动YARN
1 | start-yarn.sh |
(3)在resourcemanager节点启动jobhistoryserver进程
1 | mr-jobhistory-daemon.sh start historyserver |
(4) 在YARN中的两个管理节点分别启动resourcemanager进程
1 | yarn-daemon.sh start resourcemanager |
(5) 在YARN集群中的每个计算节点启动nodemanager进程
1 | yarn-daemon.sh start nodemanager |
(6) 启动YARN所有nodemanager节点
1 | yarn-daemons.sh start nodemanager |
注:YARN的HA启动在主resourcemanager节点执行start-yarn.sh
后,在备节点执行yarn-daemon.sh start resourcemanager
9、yarn停止
(1) 与hdfs同时停止hdfs集群
在hadoop active namenode主机e3base01上执行如下命令:
1 | stop-all.sh |
(2) 在主管理节点上运行下面指令,仅停止YARN
1 | stop-yarn.sh |
(3) 在namenode的备节点停止jobhistoryserver进程
1 | mr-jobhistory-daemon.sh stop historyserver |
(4) 在YARN中的两个管理节点分别停止resourcemanager进程
1 | yarn-daemon.sh stop resourcemanager |
(5) 在YARN集群中的每个计算节点停止nodemanager进程
1 | yarn-daemon.sh stop nodemanager |
(6) 停止YARN所有nodemanager节点
1 | yarn-daemons.sh stop nodemanager |
10、yarn进程查看
主机 | 进程名 |
---|---|
在$HADOOP_HOME/etc/hadoop/slaver中对应主机上查看 | NodeManager |
在主管理节点 | ResourceManager |
11、yarn指令执行
在YARN集群中的任意一个节点中执行下列指令:
1 | yarn rmadmin -getServiceState rm1 |
返回的结果是active或者stanby。只有且必须是两种状态之一,否则YARN工作不正常。
查看YARN集群的节点状态。执行下列指令
1 | yarn node -list -all |
若返回的节点数量和集群中的$HADOOP_HOME/etc/hadoop/slave的主机一样且显示RUNNING状态,则YARN的计算节点工作正常
查看所有任务
1 | yarn application -list |
12、监控页面http://${yarn.resourcemanager.rm1}: 13006
13、运行wordcount示例:
(1)创建几个HDFS目录
1 | hadoop fs -mkdir -p /zwl/wordcount (输入数据源目录) |
2.创建源数据文件 vi inputword
1 | hello abountyun |
3.将本地文件上传到HDFS
1 | hdfs dfs -put inputword /zwl/wordcount |
查看文件内容
1 | hdfs dfs -text /zwl/wordcount/inputword |
(4) 执行mapreduce程序
1 | cd /e3base/hadoop/share/hadoop/mapreduce |
等待执行完毕
(5)查看输出结果
1 | hdfs dfs -text /output/wordcout/part-r-00000 |
运行过程如下:
输出内容如下:
访问http://ResourceManager主机ip:13006/ 可查看任务执行情况