Hadoop
HADOOP是apache旗下的一套开源软件平台
HADOOP提供的功能:利用服务器集群,根据用户的自定义业务逻辑,对海量数据进行分布式处理
HADOOP的核心组件有
A. HDFS(分布式文件系统)
B. YARN(运算资源调度系统)
C. MAPREDUCE(分布式运算编程框架)
广义上来说,HADOOP通常是指一个更广泛的概念——HADOOP生态圈
Hadoop核心模块
Hadoop common:支持 Hadoop 模块的常用工具
Hadoop HDFS:分布式文件系统,可以提供应用程序的高吞吐量的访问
YARN:分布式资源调度系统
MAPREDUCE:一种用于并行处理大型的数据集的计算框架,基于YARN资源调度系统
重点组件
HDFS:分布式文件系统
MAPREDUCE:分布式运算程序开发框架
HIVE:基于大数据技术(文件系统+运算框架)的SQL数据仓库工具
HBASE:基于HADOOP的分布式海量数据库
ZOOKEEPER:分布式协调服务基础组件
Mahout:基于mapreduce/spark/flink等分布式运算框架的机器学习算法库
Oozie:工作流调度框架azkaban
Sqoop:数据导入导出工具
Flume:日志数据采集框架
Spark
Storm
Hadoop三种不同安装方式
Local(Standalone)Mode (单机)
所有的进程都跑在同一个JVM虚拟机内,通常用在测试
单机版的hadoop的hdfs的根目录就是linux系统的根目录
Pseudo-Distributed Mode (伪分布式)
Fully-Distributed Mode (全分布式)
ssh免密登录
ssh-keygen -t rsa
ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa
ssh-copy-id root@hadoop02
Hadoop集群
HADOOP集群具体来说包含两个集群:HDFS集群和YARN集群,两者逻辑上分离,但物理上常在一起
HDFS集群:
负责海量数据的存储,集群中的角色主要有 NameNode / DataNode
YARN集群:
负责海量数据运算时的资源调度,集群中的角色主要有 ResourceManager /NodeManager
全分布式集群搭建步骤:
1. 集群的规划 ,确定每台机器的 IP地址,和要分配的节点
2. 先决条件:
java 运行环境
ssh 免密:master --> slave-01 \ slave-02 \ slave-03
关闭防火墙
service iptables stop
关闭防火墙
chkconfig iptables off
取消开机自启
修改静态 IP:vi /etc/sysconfig/network-scripts/ifcfg-eth0
修改节点主机名:
vi /etc/sysconfig/network
永久修改
hostname XXX 临时修改
设置机器ip地址和主机名之间的映射关系:vi /etc/hosts
节点之间时间的同步:
自己在namenode节点上配置一个时间服务器
配置ntpserver:
yum -y install ntp.x86_64
vi /etc/ntp.conf
restrict 192.168.137.0 mask 255.255.255.0 nomodify notrap
# Use public servers from the pool.ntp.org project.
# Please consider joining the pool (http://www.pool.ntp.org/join.html).
#server 0.centos.pool.ntp.org iburst
#server 1.centos.pool.ntp.org iburst
#server 2.centos.pool.ntp.org iburst
#server 3.centos.pool.ntp.org iburst
server 127.127.1.0
其他节点需要安装ntpdate
yum -y install ntpdate.x86_64
通过 ntpdate master 来校对时间
root(企业级使用不能使用root用户,需要创建hadoop用户,配置sudoer)
3. 安装Hadoop
上传并解压安装包,并配置环境变量 /etc/profile
配置hadoop运行环境 $HADOOP_HOME/etc/hadoop/hadoop-env.sh
配置hadoop核心配置文件core-site.xml vi $HADOOP_HOME/etc/hadoop/core-site.xml
< configuration>
< property>
< name> fs.defaultFS</ name>
< value> hdfs://master:9000</ value>
</ property>
< property>
< name> io.file.buffer.size</ name>
< value> 131072</ value>
</ property>
< property>
< name> hadoop.tmp.dir</ name>
< value> /usr/local/hadoop-2.7.1/tmp</ value>
</ property>
</ configuration>
配置hdfs的配置文件hdfs-site.xml vi $HADOOP_HOME/etc/hadoop/hdfs-site.xml
< configuration>
< property>
< name> dfs.namenode.name.dir</ name>
< value> /usr/local/hdpdata/name</ value>
</ property>
< property>
< name> dfs.datanode.data.dir</ name>
< value> /usr/local/hdpdata/data</ value>
</ property>
< property>
< name> dfs.replication</ name>
< value> 3</ value>
</ property>
< property>
< name> dfs.blocksize</ name>
< value> 128m</ value>
</ property>
< property>
< name> dfs.secondary.http.address</ name>
< value> gp191801:50090</ value>
</ property>
< property>
< name> fs.checkpoint.dir</ name>
< value> file:///usr/local/hdpdata/dfs/cname</ value>
</ property>
< property>
< name> fs.checkpoint.edits.dir</ name>
< value> file:///usr/local/hdpdata/dfs/cname</ value>
</ property>
< property>
< name> dfs.http.address</ name>
< value> gp191801:50070</ value>
</ property>
< property>
< name> dfs.webhdfs.enabled</ name>
< value> true</ value>
</ property>
< property>
< name> dfs.permissions</ name>
< value> false</ value>
</ property>
</ configuration>
配置其他节点的信息(小弟文件)slaves vi $HADOOP_HOME/etc/hadoop/slaves
//一个节点一行
master
slave-01
slave-02
此时HDFS集群相关配置文件完成
4. 将 hadoop 安装包 copy 到其他节点机器 scp -r hadoop-2.7.1 root@slave-02:$PWD
5. 启动 hdfs
格式化 namenode hadoop namenode -format
批量启动 start-dfs.sh
单节点启动 hadoop-daemon.sh start namenode / datanode /secondarynamenode
6. YARN 集群配置
YARN配置文件 yarn-site.xml vi $HADOOP_HOME/etc/hadoop/yarn-site.xml
< property>
< name> yarn.resourcemanager.hostname</ name>
< value> master</ value>
</ property>
< property>
< name> yarn.nodemanager.aux-services</ name>
< value> mapreduce_shuffle</ value>
</ property>
< property>
< name> yarn.resourcemanager.address</ name>
< value> master:8032</ value>
</ property>
< property>
< name> yarn.resourcemanager.scheduler.address</ name>
< value> master:8030</ value>
</ property>
< property>
< name> yarn.resourcemanager.resource-tracker.address</ name>
< value> master:8031</ value>
</ property>
< property>
< name> yarn.resourcemanager.admin.address</ name>
< value> master:8033</ value>
</ property>
< property>
< name> yarn.resourcemanager.webapp.address</ name>
< value> master:8088</ value>
</ property>
把配置文件 scp 到其他节点机器
启动 yarn 集群 start-yarn.sh
7. 配置 mapred 的参数 mapred-site.xml vi $HADOOP_HOME/etc/hadoop/mapred-site.xml
< property>
< name> mapreduce.framework.name</ name>
< value> yarn</ value>
< final> true</ final>
</ property>
< property>
< name> mapreduce.jobhistory.address</ name>
< value> master:10020</ value>
</ property>
< property>
< name> mapreduce.jobhistory.webapp.address</ name>
< value> master:19888</ value>
</ property>
8. hdfs dfsadmin -report 查看集群状态报告
hdfs dfsadmin -help 查看 dfsadmin 命令帮助
安全模式
< property>
< name> dfs.namenode.safemode.threshold-pct</ name>
< value> 0.999f</ value>
< description>
Specifies the percentage of blocks that should satisfy
the minimal replication requirement defined by dfs.namenode.replication.min.
Values less than or equal to 0 mean not to wait for any particular
percentage of blocks before exiting safemode.
Values greater than 1 will make safe mode permanent.
</ description>
</ property>
解决方案:
1、暴力法。重新格式化namenode hdfs namenode -format(需要先删除namenode.dir的配置路径)
2、使用命令强制退出安全模式
第一步:强制离开安全模式
hdfs dfsadmin -safemode leave
第二步:修复文件(一般由运维人员搞定)
hdfs fsck /
hdfs fsck / -delete(删除损坏块的block)
linux的命令来修复文件