目录

第1章 大数据概论

第2章 从Hadoop框架讨论大数据生态

第3章 Hadoop运行环境搭建(开发重点)

第4章 Hadoop运行模式

本地模式:默认配置

伪分布式模式:按照完全分布式模式配置,但是只有一个节点

完全分布式模式(开发重点)

第5章 Hadoop编译源码(面试重点)


第1章 大数据概论

第2章 从Hadoop框架讨论大数据生态

  • 大发行版本:Apache Hadoop、Coudera Hadoop、Hortonworks Hadoop
  • Hadoop组成:MapReduce(计算)、Yarn(资源调度)、HDFS(存储)、Common(辅助工具)
    • 1.x中计算和资源调度都是MapReduce
    • HDFS:NameNode、DataNode、SecondaryNameNode
    • YARN:ResourceManage、NodeManage、ApplicationMaster、Container
    • MapReduce:Map阶段、Reduce阶段
  • 大数据生态体系:
    • 数据来源:数据库(结构化数据)、半结构化数据
    • 数据传输:Sqoop数据传递,Flume日志收集
    • 数据存储:HDFS文件存储,Hbase非关系型数据库
    • 资源管理:Yarn
    • 数据计算:MapReduce离线计算,Spark Core内存计算,(Hive数据查询,Spark R数据分析,Spark Sql数据查询,Spark Stream实时计算,Flink)
    • 任务调度:Oozie任务调度,Azkaban任务调度,ZooKeeper数据平台配置和调度
    • 业务模型:数据可视化、业务应用

第3章 Hadoop运行环境搭建(开发重点)

  • 1,虚拟机环境

    • 准备:vmware,centos7
    • 创建虚拟机,安装centos7
    • 虚拟机克隆,修改IP地址
  • 2,安装JDK,(rpm -qa | grep java查看已安装jdk,yum -y remove java-1.7.0-openjdk*删除已安装的,java -version验证)
  • 3,安装Hadoop
解压到指定目录:
tar -xzvf hadoop-2.7.2.tar.gz -C /opt/module
tar -xzvf jdk-8u241-linux-x64.tar.gz -C /opt/module 配置环境变量 vi /etc/profile.d/env.sh更好一点 远程登录时会加载所有profile.d下的.sh文件
vi /etc/profile
-------------------------------------------
## JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_241
export PATH=$JAVA_HOME/bin:$PATH ## HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$HADOOP_HOME/bin:$HADOOP_HOME/sbin:$PATH source生效

第4章 Hadoop运行模式

本地模式:默认配置

伪分布式模式:按照完全分布式模式配置,但是只有一个节点

启动HDFS并运行MapReduce程序(本地运行)

  • 配置:hadoop-env.sh,JAVA_HOME修改为绝对路径
  • 配置:core-site.xml,HDFS中namenode地址,Hadoop运行时产生文件的目录
  • 配置:hdfs-site.xml,指定HDFS副本数量
core-cite.xml  # 设置后本地模式不可用,因为namenode地址修改为Hdfs了,默认是file:///

<!-- 指定HDFS 中NameNode 的地址-->
<property>
<name>fs.defaultFS</name>
<value>hdfs://localhost101:9000</value>
</property> <!-- 指定Hadoop 运行时产生文件的存储目录-->
<property>
<name>hadoop.tmp.dir</name>
<value>/opt/module/hadoop-2.7.2/data/tmp</value>
</property> hdfs-site.xml <!-- 指定HDFS 副本的数量-->
<property>
<name>dfs.replication</name>
<value>1</value>
</property> <!-- 指定Hadoop 辅助名称节点主机配置-->
<property>
<name>dfs.namenode.secondary.http-address</name>
<value>localhost104:50090</value>
</property>

注意:hadoop.tmp.dir需要谨慎设置,否则数据迁移比较麻烦

  • 启动集群

    • 格式化NameNode:hdfs namenode -format
    • 启动NameNode:hadoop-daemon.sh start namenode
    • 启动DataNode:hadoop-daemon.sh start datanode
  • 查看集群
    • jps
    • web端查看hdfs:localhost101:50070,(yarn是8088),无法访问参考
    • 查看log日志:/hadoop-2.7.2/logs

注意:为什么不能一直格式化namenode?

格式化NameNode,会产生新的集群id,导致NameNode 和DataNode 的集群id 不一致,集群找不到已往数据。所以,格式NameNode 时,一定要先删除data数据和log 日志,然后再格式化NameNode。(必须先关掉namenode和datanode的进程,否则删掉后又会产生data数据和log日志)

  • 操作集群

    • 执行wordcount,此时是在local运行mapreduce程序
    • hdfs dfs -xxx,(hadoop -dfs已弃用,内部也是转化为hdfs -dfs,hadoop fs更通用,可以处理其他的FS)
    • ls、cat、rm -r、put、get

启动Yarn并运行MapReduce程序(在Yarn上运行)

  • 配置:yarn-env.sh,JAVA_HOME修改为绝对路径
  • 配置:yarn-site.xml,Reducer获取数据的方式,Yarn的ResourceManage的地址
  • 配置:mapred-env.sh,JAVA_HOME修改为绝对路径
  • 配置:mapred-site.xml,指定MR在Yarn上运行
yarn-site.xml

<!-- Reducer 获取数据的方式-->
<property>
<name>yarn.nodemanager.aux-services</name>
<value>mapreduce_shuffle</value>
</property> <!-- 指定YARN 的ResourceManager 的地址-->
<property>
<name>yarn.resourcemanager.hostname</name>
<value>localhost101</value>
</property> mapred-site.xml <!-- 指定MR 运行在YARN 上-->
<property>
<name>mapreduce.framework.name</name>
<value>yarn</value>
</property>
  • 启动集群

    • 启动前必须保证NameNode和DataNode已经启动
    • 启动ResourceManager:yarn-daemon.sh start resourcemanager
    • 启动NodeManager:hadoop-daemon.sh start nodemanager
  • 查看集群
  • 操作集群
    • 删除output
    • 执行MapReduce程序

配置历史服务器

  • 配置mapred-site.xml
<!-- 历史服务器端地址-->
<property>
<name>mapreduce.jobhistory.address</name>
<value>localhost101:10020</value>
</property>
<!-- 历史服务器web 端地址-->
<property>
<name>mapreduce.jobhistory.webapp.address</name>
<value>localhost101:19888</value>
</property>

配置日志聚集

日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS 系统上。
日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。

  • 配置:yarn-site.xml
<!-- 日志聚集功能使能-->
<property>
<name>yarn.log-aggregation-enable</name>
<value>true</value>
</property> <!-- 日志保留时间设置7 天-->
<property>
<name>yarn.log-aggregation.retain-seconds</name>
<value>604800</value>
</property>
  • 重启NodeManager 、ResourceManager 和HistoryManager

    • yarn-daemon.sh start resourcemanager
    • yarn-daemon.sh start nodemanager
    • mr-jobhistory-daemon.sh start historyserver
  • 运行MapReduce程序

完全分布式模式(开发重点),配置汇总

虚拟机准备

编写集群分发脚本xsync

  • scp(secure copy), 安全拷贝

    • scp -r src dst,src,dst可以是xxx@xxx:/xxx/xxx,user@localhost101:/xxx
    • 拷贝module目录,/etc/profile环境变量,source生效
    • 注意:dst中如目录是已存在目录则创建目录,名为src中目录;若不存在目录,则将src中目录重命名为dst中目录
  • rsync,远程同步工具
    • rsync -rvl src dst
    • 注意:src中同步目录不加/表示同步文件,会在dst中创建新的目录;若要同步目录则加/
  • xsync,集群分发脚本
    • 修改脚本xsync 具有执行权限:chmod 777 xsync
    • 放在home/xxx/bin目录下,或放在/usr/local/bin下可以直接执行
    • xsync 要同步的文件

#!/bin/bash
#1 获取输入参数个数,如果没有参数,直接退出
pcount=$#
if((pcount==0)); then
echo no args;
exit;
fi #2 获取文件名称
p1=$1
fname=`basename $p1`
echo fname=$fname #3 获取上级目录到绝对路径
pdir=`cd -P $(dirname $p1); pwd`
echo pdir=$pdir #4 获取当前用户名称
user=`whoami` #5 循环
for((host=103; host<105; host++)); do
echo ------------------- localhost$host --------------
rsync -rvl $pdir/$fname $user@localhost$host:$pdir
done

集群配置

  • 集群部署规划
JAVA_HOME     localhost102 localhost103 localhost104
hadoop-env.sh

core-site.xml

hdfs-site.xml

HDFS

NameNode

DataNode

DataNode

SecondaryNameNode

DataNode

yarn-env.sh yarn-site.xml Yarn

NodeManager

ResourceManager

NodeManager

NodeManager

mapred-env.sh mapred-site.xml MapReduce   HistoryServer  
  • 配置集群:

    • hadoop-env.sh(JAVA_HOME)
      core-site.xml(NameNode地址,Hadoop运行产生文件存储地址)
      hdfs-site.xml(SecondaryNameNode地址,副本数)
    • yarn-env.sh(JAVA_HOME)
      yarn-site.xml(ResourceManager地址,Reducer获取数据方式)
    • mapred-env.sh
      mapred-site.xml(JobHistory Server地址,MR运行在Yarn上)
    • xsync etc/hadoop 分发脚本

单节点启动

  • 删除所有节点上的data、logs目录,格式化NameNode,hdfs namenode -format
  • 在NameNode节点上启动NameNode、DataNode
  • 在其他节点上启动DataNode

配置SSH免密登录(为了群起集群,使用系统自带的脚本)

  • 用法:ssh 主机IP
  • 原理:主机1生成私钥和公钥,公钥发送给主机2,主机1发送主机2的信息用公钥解密,主机2发送给主机1的信息用私钥解密,主机1就可以在本机上登录主机2与其进行通信
    • 生成公钥和私钥:cd,cd .ssh/,ssh-keygen -t rsa,三次回车生成私钥id_rsa和公钥id_rsa.pub
    • 拷贝公钥到目标主机上:ssh-copy-id localhost102,103,104,自己主机也要拷贝,NameNode要和每一个主机通信
  • 102(运行NameNode)、102root(很多操作需要root用户完成)、103(运行ResourceManager)都需要设置ssh免密登录

群起集群

  • 配置etc/hadoop/slaves,文件中是所有DataNode节点主机,注意:该文件中添加的内容结尾不允许有空格,不允许有空行。
  • 同步所有节点(调用start-dfs.sh的节点配置slaves就可以启动slaves中所有DataNode)
  • 启动集群(注意格式化之前,一定要先停止上次启动的所有namenode 和datanode 进程,然后再删除data 和log 数据)
    • 启动HDFS:start-dfs.sh(任何节点都可以调用,如果没有配置ssh,需要输入节点密码;如果启动节点没有配置slaves,则只会启动本节点;slaves配置在启动节点上就可以)
    • 启动YARN:start-yarn.sh,(必须在Yarn所在的节点上启动,否则ResourceManager不会启动
    • 启动JobHistory Server:mr-jobhistory-daemon.sh start historyserver(必须在historyserver上启动
  • Web端查看NameNode102:50070,SecondaryNameNode104:50090,Yarn103:8088,历史服务器103:19888
  • 基本测试:上传大文件、小文件

集群启动、停止方式总结

  • 各个服务组件单独启动、停止

    • HDFS:hadoop-daemon.sh start / stop  namenode / datanode / secondarynamenode
    • YARN:yarn-daemon.sh start / stop resourcedmanager / nodemanager
    • HistoryServer:mr-jobhistory-daemon.sh start historyserver
  • 各个模块分开启动、停止
    • HDFS:start-dfs.sh / stop-dfs.sh,(在任何一个节点上都可以启动集群,但是必须配置slaves
    • YARN:start-yarn.sh / stop-yarn.sh,(必须在RM上启动,才会启动RM,否则只会启动NodeMananger

集群时间同步

  • crontab定时任务,需要开启crond服务(service crond status 查看状态,service crond start 启动服务)

    • 用法:***** 执行命令;表示:分钟(0-59)、小时(0-23)、天(1-31)、月(1-12)、周(0-7) 
      【*】代表所有可能的值,【,】指定不连续的值,【-】表示整数范围,【/】指定间隔的时间频率
    • crontab -e:编辑定时任务,-l显示当前用户的定时任务,-r删除定时任务
  • 找一个机器,作为时间服务器,所有的机器与这台集群时间进行定时的同步,比如,每隔十分钟,同步一次时间。
  • 时间服务器配置(root用户操作)
    • 检查ntp是否安装:rpm -qa|grep ntp
    • 修改ntp配置文件 /etc/ntp.conf

      1. 授权网段上的所有机器可以从这台机器同步时间:restrict 192.168.1.0 mask 255.255.255.0 nomodify notrap 
      2. 集群在局域网上,不使用互联网上的时间:注释掉所有server 0.xxx
      3. 当该节点丢失,依然可以采用本地时间作为时间服务器为集群中的其他节点提供时间同步,添加两行
      server  127.127.1.0     
      fudge 127.127.1.0 stratum 10

    • 修改/etc/sysconfig/ntpd,让硬件时间与系统时间一起同步,增加:YNC_HWCLOCK=yes
    • 重新启动ntpd 服务:service ntpd status 查看状态,service ntpd start 启动,chkconfig ntpd on 设置开机启动
  • 其他机器配置(root用户操作)
    • 配置每10分钟与时间服务器同步一次,crontab -e:*/10 * * * * /usr/sbin/ntpdate localhost102

第5章 Hadoop编译源码(面试重点)

Hadoop - 入门学习笔记(详细)的更多相关文章

  1. Hadoop入门学习笔记---part3

    2015年元旦,好好学习,天天向上.良好的开端是成功的一半,任何学习都不能中断,只有坚持才会出结果.继续学习Hadoop.冰冻三尺,非一日之寒! 经过Hadoop的伪分布集群环境的搭建,基本对Hado ...

  2. Hadoop入门学习笔记---part2

    在<Hadoop入门学习笔记---part1>中感觉自己虽然总结的比较详细,但是始终感觉有点凌乱.不够系统化,不够简洁.经过自己的推敲和总结,现在在此处概括性的总结一下,认为在准备搭建ha ...

  3. Hadoop入门学习笔记---part4

    紧接着<Hadoop入门学习笔记---part3>中的继续了解如何用java在程序中操作HDFS. 众所周知,对文件的操作无非是创建,查看,下载,删除.下面我们就开始应用java程序进行操 ...

  4. Hadoop入门学习笔记---part1

    随着毕业设计的进行,大学四年正式进入尾声.任你玩四年的大学的最后一次作业最后在激烈的选题中尘埃落定.无论选择了怎样的选题,无论最后的结果是怎样的,对于大学里面的这最后一份作业,也希望自己能够尽心尽力, ...

  5. Hadoop入门学习笔记(一)

    Week2 学习笔记 Hadoop核心组件 Hadoop HDFS(分布式文件存储系统):解决海量数据存储 Hadoop YARN(集群资源管理和任务调度框架):解决资源任务调度 Hadoop Map ...

  6. Hadoop入门学习笔记总结系列文章导航

    一.为何要学习Hadoop? 这是一个信息爆炸的时代.经过数十年的积累,很多企业都聚集了大量的数据.这些数据也是企业的核心财富之一,怎样从累积的数据里寻找价值,变废为宝炼数成金成为当务之急.但数据增长 ...

  7. Hadoop入门学习笔记之一

    http://hadoop.apache.org/docs/r1.2.1/api/index.html 适当的利用 null 在map中可以实现对文件的简单处理,如排序,和分集合输出等. 需要关心的内 ...

  8. Hadoop入门学习笔记(二)

    Yarn学习 YARN简介 YARN是一个通用资源管理系统和调度平台,可为上层应用提供统一的资源管理和调度 YARN功能说明 资源管理系统:集群的硬件资源,和程序运行相关,比如内存.CPU等. 调度平 ...

  9. Hadoop入门学习笔记-第一天 (HDFS:分布式存储系统简单集群)

    准备工作: 1.安装VMware Workstation Pro 2.新建三个虚拟机,安装centOS7.0 版本不限 配置工作: 1.准备三台服务器(nameNode10.dataNode20.da ...

随机推荐

  1. presence_of_element_located对比visibility_of_element_located

    presence_of_element_located和visibility_of_element_located都是selenium里判断元素展示的方法,相信做ui自动化的小伙伴一定被这俩困扰过,本 ...

  2. 简单socket服务器编程

    package socket; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; ...

  3. python变量系列--1

    所以这里需要注意变量的使用,print(message),直接去引用,和shell略有不同 1.变量名只能包含字母,数字,下划线,但不能以数字开头 2.变量名不能含有空格

  4. 中文分词,自然语言处理器NLP。 新版本已上线,增加二级行业分类。

    一  cacl2新版本上线,在一级行业的基础上深度挖掘,新增了对应的二级分类. 可以查看一级行业[农林牧渔],下面对应的所有二级行业的词库.这里拿[林业]来观察效果. 具体分词的效果. 二    Gi ...

  5. 如何在pyqt中使用 QStyle 重绘 QSlider

    前言 使用 qss 可以很方便地改变 QSlider 的样式,但是有些情况下 qss 无法满足我们的需求.比如下图所示样式: 如果直接使用 qss 将 handle 的内圆设置为透明背景,会看到 ha ...

  6. SQL 中进行递归

    很多时候,我们做Tree的时候会用到递归.但是一般都是从数据库中拿到数据然后再程序中进行递归.昨天一个巧合,一位同事给我看了数据库中的递归,乍一看还不太明白. 表结构是这样的 CREATE TABLE ...

  7. docker的使用 (2)

    使用Docker 想要玩转Docker,最简单的办法就是马上用Docker创建一些自己学习和工作中需要用到的容器,下面我们带着大家一起来创建这些容器. 运行Nginx Nginx是高性能的Web服务器 ...

  8. table 增加或删除一行

    转载请注明来源:https://www.cnblogs.com/hookjc/ <HTML><SCRIPT LANGUAGE="JScript">funct ...

  9. autorelease注意事项

    1.autorelease使用注意 并不是放到自动释放池代码中,都会自动加入到自动释放池 @autoreleasepool { // 因为没有调用 autorelease 方法,所以对象没有加入到自动 ...

  10. Git配置多个github账号免密登录

    在公司开发中,有时候会存在公司账户跟私人账户共存,并随时需要切换的情况,这种情况下git可以配置多个ssh-key,无缝切换账号. 假如有两个github账号,一个是私人github账号,一个是公司g ...