Hadoop基础入门(1)
Hadoop是一个由Apache基金会所开发的分布式系统基础架构
概述
hadoop的优势
1.高可靠性:Hadoop底层维护多个数据副本,所以即使Hadoop某个计算元素或存储出现故障,也不会导致数据的丢失
2.高扩展性:在集群间分配任务数据,可方便的扩展数以千计的节点(动态地增加服务器)
3.高效性:在MapReduce的思想下,Hadoop是并行工作的,以加快任务处理速度
4.高容错性:能够自动将失败的任务重新分配
*Hadoop1.x、2.x、3.x区别
Hadoop 运行环境搭建
本运行环境搭建教程适用于学习使用的虚拟机系统,共需3台虚拟机,推荐使用VMWare,ssh登录使用Xshell;环境搭建中虚拟机hostname,ip地址等参数需要根据自己的配置来进行修改,切勿照搬文章内容
环境准备
虚拟机配置
操作系统:CentOS-7.5
软件包安装:
yum install -y epel-release
Extra Packages for Enterprise Linux 是为“红帽系”的操作系统提供额外的软件包,适用于 RHEL、CentOS 和 Scientific Linux。相当于是一个软件仓库,大多数 rpm 包在官方repository 中是找不到的)
(如果是最小系统版,还需安装net-tool和vim编辑器:
yum install -y net-tools
yum install -y vim)
关闭防火墙
systemctl stop firewalld 关闭防火墙
systemctl status firewalld:查看防火墙状态
systemctl disable firewalld.service 禁用防火墙服务
创建用户
一般不在root用户下直接进行操作
useradd why:创建用户
passwd why:创建密码
vim /etc/sudoers ——>在%wheel下添加why ALL=(ALL) NOPASSWD:ALL:授权root权限
修改文件夹所属用户
chown why:why /opt/module:修改module文件夹的所有者和所属组均为why
卸载虚拟机自带的 JDK
首先切换到root用户
rpm -qa | grep -i java | xargs -n1 rpm -e --nodeps
环境准备完成后reboot重启虚拟机
网络设置
修改虚拟机静态IP
vim /etc/sysconfig/network-scripts/ifcfg-ens33
需要修改的内容如下:
BOOTPROTO=static #静态IP
IPADDR=192.168.10.102 #IP地址
GATEWAY=192.168.10.2 #网关地址
DNS1=192.168.10.2 #DNS地址
设置Linux中VMnet8
与虚拟机的静态IP相对应即可
时间同步
同步阿里云时钟服务器:
yum -y install ntpdate
ntpdate ntp.aliyun.com
输入date查看当前时间是否已经同步
主机设置
vim /etc/hostname:修改主机名称(根据自己需求设置即可)
vim /etc/hosts:配置主机映射(格式:主机名称 ip地址)(原有内容尽量不要动)
windows系统
进入C:\Windows\System32\drivers\etc路径,修改hosts文件,设置主机映射
JDK安装
文件格式:jdk-8u212-linux-x64.tar.gz
解压命令:tar -zxvf 压缩文件 -C 路径
配置环境变量:sudo vim /etc/profile.d/my_env.sh
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_212 #路径自定义
export PATH=$PATH:$JAVA_HOME/bin
测试是否安装成功:java -version
hadoop安装
文件格式:hadoop-3.1.3.tar.gz
配置环境变量:sudo vim /etc/profile.d/my_env.sh
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-3.1.3 #路径自定义
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
测试是否安装成功:hadoop version
hadoop文件目录:
搭建完全分布式模式集群
ssh免密登录
cd ~/.ssh:进入.ssh文件夹
.ssh的功能:
ssh-keygen -t rsa生成密钥文件和私钥文件
ssh-copy-id 目标机器:将公钥复制到目标机器的授权文件(authorized_keys)中
直接将id_rsa.pub复制到authorized_keys中也能生效
集群相关配置
NameNode 和 SecondaryNameNode 不要安装在同一台服务器
ResourceManager 也很消耗内存,不要和 NameNode、SecondaryNameNode 配置在同一台机器上
注意:集群相关配置文件中,
分割线以下的内容不是必须配置的
如需根据自己需求配置具体内容,可从gitee.com/wu-haoyi/bi…下载默认配置文件搜索查看;该默认配置文件在hadoop安装路径下的share文件夹里也有
core-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 NameNode 的地址 -->
<property>
<name>fs.defaultFS</name>
<value>hdfs://hadoop102:8020</value>
</property>
<!-- 指定 hadoop 数据的存储目录(data文件夹不用提前创建) -->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop/data</value>
</property>
<!-- 配置 HDFS 网页登录使用的静态用户为 why(这个配置是为了解决网页显示文件内容出错的问题) -->
<property>
<name>hadoop.http.staticuser.user</name>
<value>atguigu</value>
</property>
<!--配置该superUser允许通过代理访问的主机节点-->
<property>
<name>hadoop.proxyuser.why.hosts</name>
<value>*</value>
</property>
<!--配置该superUser允许通过代理访问的用户组-->
<property>
<name>hadoop.proxyuser.why.groups</name>
<value>*</value>
</property>
<!--配置该superUser允许代理的用户-->
<property>
<name>hadoop.proxyuser.why.users</name>
<value>*</value>
</property>
</configuration>
有关hadoop中的ProxyUser:
Hadoop中的ProxyUser_Ynzo的博客-CSDN博客_hadoop.proxyuser.hadoop.hosts
hdfs-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- nn web 端访问地址-->
<property>
<name>dfs.namenode.http-address</name>
<value>hadoop102:9870</value>
</property>
<!-- 2nn web 端访问地址-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>hadoop104:9868</value>
</property>
<!--///////////////////////////////////////////////-->
<!--NameNode线程池-->
<!--默认值是10,如果该值设的太小,明显的状况就是DataNode在连接NameNode的时候总是超时或者连接被拒绝,一般将其设置为集群大小的自然对数乘以20-->
<property>
<name>dfs.namenode.handler.count</name>
<value>21</value>
</property>
<!---------------------------------------->
<!--SecondaryNameNode相关-->
<!--SecondaryNameNode 每隔一小时执行一次 进行fsimage和edits文件的合并-->
<property>
<name>dfs.namenode.checkpoint.period</name>
<value>3600s</value>
</property>
<!--一分钟检查一次操作次数,当操作次数达到 1 百万时,SecondaryNameNode 执行一次-->
<property>
<name>dfs.namenode.checkpoint.txns</name>
<value>1000000</value>
<description>操作动作次数</description>
</property>
<property>
<name>dfs.namenode.checkpoint.check.period</name>
<value>60s</value>
<description> 1 分钟检查一次操作次数</description>
</property>
<!---------------------------------------->
<!--DataNode相关-->
<!--DN 向 NN 汇报当前解读信息的时间间隔,默认 6 小时-->
<property>
<name>dfs.blockreport.intervalMsec</name>
<value>21600000</value>
<description>Determines block reporting interval in milliseconds.</description>
</property>
<!--DN 扫描自己节点块信息列表的时间,默认 6 小时-->
<property>
<name>dfs.datanode.directoryscan.interval</name>
<value>21600s</value>
<description>Interval in seconds for Datanode to scan datadirectories and reconcile the difference between blocks in memory and on the disk.
Support multiple time unit suffix(case insensitive), as described in dfs.heartbeat.interval.
</description>
</property>
<!--掉线时限相关设置-->
<property>
<name>dfs.namenode.heartbeat.recheck-interval</name>
<value>300000</value>
<description>单位是ms</description>
</property>
<property>
<name>dfs.heartbeat.interval</name>
<value>3</value>
<description>单位是s</description>
</property>
</configuration>
有关dfs.namenode.handler.count的详解:
dfs.namenode.handler.count配置参数的总要性_Michealkz的博客-CSDN博客_dfs.namenode.handler.count
yarn-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MR 走 shuffle -->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property>
<!-- 指定 ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>hadoop103</value>
</property>
<!-- 环境变量的继承 -->
<property>
<name>yarn.nodemanager.env-whitelist</name>
<value>JAVA_HOME,HADOOP_COMMON_HOME,HADOOP_HDFS_HOME,HADOOP_CO
NF_DIR,CLASSPATH_PREPEND_DISTCACHE,HADOOP_YARN_HOME,HADOOP_MAP
RED_HOME</value>
</property>
<!--yarn application使用的classpath-->
<property>
<name>yarn.application.classpath</name>
<value>
/opt/module/hadoop-3.1.3/etc/hadoop,
/opt/module/hadoop-3.1.3/share/hadoop/common/lib/*,
/opt/module/hadoop-3.1.3/share/hadoop/common/*,
/opt/module/hadoop-3.1.3/share/hadoop/hdfs,
/opt/module/hadoop-3.1.3/share/hadoop/hdfs/lib/*,
/opt/module/hadoop-3.1.3/share/hadoop/hdfs/*,
/opt/module/hadoop-3.1.3/share/hadoop/mapreduce/lib/*,
/opt/module/hadoop-3.1.3/share/hadoop/mapreduce/*,
/opt/module/hadoop-3.1.3/share/hadoop/yarn,
/opt/module/hadoop-3.1.3/share/hadoop/yarn/lib/*,
/opt/module/hadoop-3.1.3/share/hadoop/yarn/*,
</value>
</property>
<!-- 开启日志聚集功能 -->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property>
<!-- 设置日志聚集服务器地址 -->
<property>
<name>yarn.log.server.url</name>
<value>http://hadoop102:19888/jobhistory/logs</value>
</property>
<!-- 设置日志保留时间为 7 天 -->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
<!--///////////////////////////////////////////////-->
<!--关闭虚拟内存检查-->
<property>
<name>yarn.nodemanager.vmem-check-enabled</name>
<value>false</value>
</property>
<property>
<name>yarn.scheduler.minimum-allocation-mb</name>
<value>4096</value>
<description>default value is 1024</description>
</property>
<property>
<name>yarn.resourcemanager.am.max-attempts</name>
<value>4</value>
<description>
The maximum number of application master execution attempts.
</description>
</property>
</configuration>
如何理解hadoop中配置项yarn.nodemanager.env-whitelist?
这是hadoop3.x版本的一个bug,这个参数就是设置了一些环境变量,如果不加的话,在3.1.3版本中可能出错
网上查找资料得知3.2版本之后该bug已修复
根据官方bug报告推测:[YARN-10511] Update yarn.nodemanager.env-whitelist value in docs - ASF JIRA
应当是修改了该参数的默认值,防止了出现bug的情况
yarn.application.classpath详解:yarn进程使用的.class文件的路径
yarn的日志聚集功能:应用运行完成以后,将程序运行日志信息上传到 HDFS 系统上
- 开启后可以在yarn模式下在命令行中使用 yarn logs -applicationId 来查看你的应用程序的运行日志
- 开启了日志聚合,本地的日志文件就会删除,节省空间
- 通过开启日志监控服务进程来解决在web页面看不了日志的问题
- 更多操作:yarn 日志聚集配置_qq_duhai的博客-CSDN博客_hdfs /tmp/logs/logs-tfile
mapred-site.xml
<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>
<configuration>
<!-- 指定 MapReduce 程序运行在 Yarn 上 -->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
<!--查看历史运行情况-->
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop102:10020</value>
</property>
<!-- 历史服务器 web 端地址 -->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>hadoop102:19888</value>
</property>
</configuration>
workers
在文件中添加集群中机器的hostname
注意:该文件中添加的内容结尾不允许有空格,文件中不允许有空行
集群启动
格式化NameNode:hdfs namenode -format
注意:格式化 NameNode,会产生新的集群 id,导致 NameNode 和 DataNode 的集群 id 不一致,集群找
不到已往数据。如果集群在运行过程中报错,需要重新格式化 NameNode 的话,一定要先停止namenode 和 datanode 进程,并且要删除所有机器的 data 和 logs 目录,然后再进行格式化
HDFS:sbin/start-dfs.sh
YARN:sbin/start-yarn.sh
历史服务器:mapred --daemon start historyserver
Web端
查看namenode:http://hadoop102:9870
查看 YARN 的 ResourceManager:http://hadoop103:8088
查看 JobHistory:http://hadoop102:19888/jobhistory