1.Hadoop
广义:以hadoop软件为主的生态圈
狭义:hadoop软件
hadoop 1.x
hdfs 存储数据
mapreduce 分布式计算以及任务调度
hadoop 2.x
hdfs 存储数据 分布式文件系统
mapreduce 分布式计算 开发难度高、计算慢(使用磁盘shuffle) 生产使用hive/spark
yarn 资源+job调度管理系统
在部署hadoop的过程中,一般不使用源码部署,使用CDH、ambari、hdp部署
CDH的hadoop与Apache的 Hadoop的区别:CDH修复Hadoop的bug。
2.安装部署hadoop
添加hadoop用户
[root@i-8ejfksrr ~]# useradd hadoop
配置hadoop的无密码登陆
[root@i-8ejfksrr ~]# cat /etc/sudoers |grep hadoop
[root@i-8ejfksrr ~]# vim /etc/sudoers
在文件中添加:hadoop ALL=(ALL) NOPASSWD: ALL
修改主机名称
[root@i-8ejfksrr ~]# vim /etc/hosts
修改内容为:127.0.1.1 hadoop001
[root@i-8ejfksrr ~]# vim /etc/sysconfig/network
修改内容如下:
NETWORKING=yes
HOSTNAME=hadoop001
登陆hadoop用户:
[root@hadoop001 ~]# su - hadoop
创建存放hadoop文件的目录
[hadoop@hadoop001 ~]$ mkdir app
下载hadoop文件
[root@hadoop001 app]# wget http://archive-primary.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz
解压文件:
[hadoop@hadoop001 app]$ tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz
移动到hadoop内部修改环境变量文件
[hadoop@hadoop001 app]$ cd hadoop-2.6.0-cdh5.7.0/etc/hadoop
[hadoop@hadoop001 hadoop]$ vim hadoop-env.sh
添加的内容如下:
export JAVA_HOME=/usr/java/jdk1.8.0_181 (java一定要配置,在jps时会出现错误)
export HADOOP_PREFIX=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
启动hadoop 有三种模式
Local (Standalone) Mode: 单机 没有进程 不用
Pseudo-Distributed Mode: 伪分布式 1台机器 进程 学习
Fully-Distributed Mode: 分布式 进程 生产
修改core-site.xml文件
[hadoop@hadoop001 hadoop]$ vim core-site.xml
<configuration>
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop001:9000</value> <!--hadoop@hadoop001为主机名-->
</property>
</configuration>
修改配置文件设置文本的复制数量
[hadoop@hadoop001 hadoop]$ vim hdfs-site.xml
修改内容如下:
<configuration>
<property>
<name>dfs.replication</name>
<value>1</value>
</property>
</configuration>
设置无密码登陆
如果有.ssh 文件要先删除
[hadoop@hadoop001 ~]$ rm -rf .ssh/
[hadoop@hadoop001 ~]$ ssh-keygen -t dsa -P '' -f ~/.ssh/id_dsa
添加信任
[hadoop@hadoop001 ~]$ cat ~/.ssh/id_dsa.pub >> ~/.ssh/authorized_keys
修改文件权限
[hadoop@hadoop001 .ssh]$ ls
[hadoop@hadoop001 .ssh]$ chmod 600 authorized_keys
下载相关软件:
[hadoop@hadoop001 app]$ wget http://mirrors.tuna.tsinghua.edu.cn/apache/maven/maven-3/3.5.4/binaries/apache-maven-3.5.4-bin.tar.gz
[hadoop@hadoop001 app]$ wget http://prdownloads.sourceforge.net/findbugs/findbugs-3.0.1.tar.gz
[hadoop@hadoop001 app]$ wget https://github.com/protocolbuffers/protobuf/releases/download/v3.6.1/protobuf-all-3.6.1.tar.gz
解压文件修改配置,添加环境变量
[hadoop@hadoop001 ~]# vim .bash_profile
export MVN_HOME=/home/hadoop/app/apache-maven-3.5.4
export PROTOC_HOME=/home/hadoop/app/protobuf-3.6.1
export FINDBUGS_HOME=/home/hadoop/app/findbugs-3.0.1
export HADOOP_PREFIX=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0
export PATH=$HADOOP_PREFIX/bin:$JAVA_HOME/bin:$PATH
登陆hadoop001
[hadoop@hadoop001 ~]$ ssh hadoop001
切换到相应目录:
[hadoop@hadoop001 ~]$ cd ~/app/hadoop-2.6.0-cdh5.7.0/
格式化namenode
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ bin/hdfs --format
启动dfs
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ sbin/start-dfs.sh
使用jps查看启动的进程
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ jps
5953 NameNode
6227 SecondaryNameNode
6777 Jps
6074 DataNode
通过页面查看自己部署是否成功: http://ip:50070
可以看到界面,就表示已经安装完成。
修改yarn的配置文件
修改etc/hadoop/mapred-site.xml
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ vi etc/hadoop/mapred-site.xml
修改的内容如下:
<configuration>
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
</configuration>
修改etc/hadoop/yarn-site.xml:
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ vi etc/hadoop/yarn-site.xml
修改内容如下:
<configuration>
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
</configuration>
启动yarn
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ sbin/start-yarn.sh
查看yarn是否启动成功:
http://ip:8088/
3.jps命令解析
jps命令的位置:
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ which jps
/usr/java/jdk1.8.0_181/bin/jps
使用hadoop用户查看jps
[hadoop@hadoop001 hadoop-2.6.0-cdh5.7.0]$ jps
16188 DataNode
16379 SecondaryNameNode
16566 Jps
16094 NameNode
使用其他用户(root)查找jps
[root@hadoop001 ~]$ jps
16188 process information unavailable
16379 process information unavailable
16566 Jps
16094 process information unavailable
出现process information unavailable的处理方法
1.查找进程号 pid
2.ps -ef|grep pip 查看当前进程是否存在
3.假如不存在,清空残留信息
rm -f /tmp/hsperfdata_${user}/pid文件
4.假如存在,可以看到进程属于的用户,切换到相应的用户
假如删除rm -f /tmp/hsperfdata_${user}/pid文件
进程不挂,但是jps命令不显示了,所依赖的脚本都会有问题
相关介绍
1.数据块大小
dfs.blocksize 默认值为134217728字节(128M)
在存储的时候,一个数据大小为128M,这个可以根据具体情况修改
需要修改hdfs-default.xml,如下:
<configuration>
<property>
<name>dfs.blocksize</name>
<value>134217728</value>
</property>
</configuration>
如果存储260M的文件,假设每个文件的副本数为3,文件大小为128M,实际的存储空间为780M,数据块的大小为6个。
2.HDFS架构设计
主从架构:一个主节点(NameNode,NN)和多个从数据节点(DataNode,DN),还有一个备份节点(SecondaryNameNode,SNN)
NameNode(NN)
含义:文件系统的命令空间
包含:
1.存储文件名称
2.存储文件目录结构
3.文件属性(文件创建时间,文件的权限,文件的副本数)
4.文件与数据块之间的对应关系,在读写文件时,查找那个DN节点,这个映射关系通过blockmap存储
NameNode节点不会持久化存储blockmap(映射关系),集群在启动时和运行时,DataNode发送blockreport给NameNode,以此NameNode在内存中动态存储blockmap。
作用:
1.管理文件系统的命名空间,维护文件系统树,以两种文件永久保存在磁盘。
2.命名空间镜像文件fsimage
3.编辑日志editlog
属性:
1.设置检查点的目录:
<configuration>
<property>
<name>dfs.namenode.checkpoint.dir</name>
<value>file://${hadoop.tmp.dir}/dfs/namesecondary</value>
</property>
</configuration>
2.设置检查点操作目录:
<configuration>
<property>
<name>dfs.namenode.checkpoint.edits.dir</name>
<value>${dfs.namenode.checkpoint.dir}</value>
</property>
</configuration>
3.设置检查点检查的周期
<configuration>
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60</value> <!--默认为60s,可以根据需要设置-->
</property>
</configuration>
SecondaryNameNode
为了存储fsimage+editlog,并且定期合并fsimage(镜像)+editlog(操作日志),形成新的fsimage,将结果推送给NameNode,作为一个检查点(checkpoint)
DataNode
存储数据块和数据块的校验和
DataNodeN与NameNode的底层通信使用netty,DataNode向NameNode每3秒发送一个心跳包,表明自己还存活,并且每10秒发送一个blockreport到NameNode
副本存放策略
Hadoop的默认布局策略是在运行客户端的节点上存放第一个副本(如果客户端在集群之外,就随机选择一个节点,不过系统会避免选择哪些存储太慢或者太忙的节点)。第二个副本放在与第一个不同且随机选择的机架节点上。第三个副本与第二个副本放在同一个机架上,且随机选择另外一个节点。