2_大数据之Hadoop入门

一 大数据概论

1️⃣概念
  大数据是指无法在一定时间范围内用常规的软件工具进行捕捉,管理和处理的数据集合,是需要新处理模式才能具有更强的决策力,洞察发现力和流程优化能力的海量,高增长率和多样化的信息资产.
2️⃣解决的问题
  海量数据的存储和海量数据的分析计算问题.
3️⃣存储单位(按照从小到大的顺序排列)
  单位 : bit<Byte<K<MB<GB<TB<PB<EB<ZB<YB<BB<NB<DB
4️⃣进制换算
  1bit * 8 = 1Byte * 1024 = 1K * 1024 = 1MB * 1024 = 1GB ......
5️⃣大数据特点
1.大量 : 截止目前,人类生产的所有印刷材料的数据量大约200PB,而历史上全人类总共说过的话的数据量大约是5EB.当前,典型个人计算机硬盘的容量为TB量级,而一些大企业的数据量已经接近EB量级;
2. 高速 : 这是大数据区分于传统挖掘的最显著特征.根据IDC的”数字宇宙”的报告,预计到2020年,全球数据使用量将达到35.2ZB.在如此海量的数据面前,处理数据的效率就是企业的生命.
3. 多样 : 这种类型的多样性也让数据被分为结构化数据和非结构化数据.相对于以往便于存储的以数据库,文本为主的结构化数据,非结构化数据越来越多,包括网络日志,音频,视频,图片,地理位置信息等这些多类型的数据对数据的处理能力提出了更高的要求.
4. 低价值密度 : 价值密度的高低与数据总量的大小成反比.比如在一天的监控视频中我们只关心其中某一个时间段所发生的事情,如何快速对有价值的数据"提纯"称为目前大数据背景下待解决的难题.
6️⃣大数据应用场景
1. 物流仓储 :大数据分析系统助力商家精细化运营,提升销量,节约成本.
2. 零售 : 分析用户消费习惯,为用户购买商品提供方便,从而提升商品销量.
3. 旅游 : 深度结合大数据能力与旅游行业需求,共建旅游产业智慧管理,智慧服务和智慧营销的未来.
4. 商品广告推荐 : 给用户推荐可能喜欢的商品.
5. 保险 : 海量数据挖掘及风险预测,助力保险行业精准营销,提升精细化定价能力.
6. 金融 : 多维度体现用户特征,帮助金融机构推荐优质客户,防范欺诈风险.
7. 人工智能 : 无人驾驶,BI等.
8. 其他行业 : 比如房产等.
7️⃣大数据部门常见组织结构(适用于部分企业)

《2_大数据之Hadoop入门》

二 Hadoop简介

1️⃣Hadoop是什么?

《2_大数据之Hadoop入门》

2️⃣Hadoop发展历史

  
Hadoop百度百科

3️⃣Hadoop三大发行版本介绍

 1. Hadoop三大发行版本:
Apache
Cloudera
Hortonworks

  
Apache版本最原始(最基础)的版本,对于入门学习最好。

  
Cloudera在大型互联网企业中用的较多。

  
Hortonworks文档较好。

 2.
Apache Hadoop

  官网地址:
http://hadoop.apache.org/releases.html

  下载地址:
https://archive.apache.org/dist/hadoop/common/

 3.
Cloudera Hadoop

  官网地址:
https://www.cloudera.com/downloads/cdh/5-10-0.html

  下载地址:
http://archive-primary.cloudera.com/cdh5/cdh/5/

 4.
Hortonworks Hadoop

  官网地址:
https://hortonworks.com/products/data-center/hdp/

  下载地址:
https://hortonworks.com/downloads/#data-platform

4️⃣Hadoop的优势
《2_大数据之Hadoop入门》 5️⃣Hadoop的组成
《2_大数据之Hadoop入门》  1.
HDFS架构概述

《2_大数据之Hadoop入门》  2.
YARN架构概述
《2_大数据之Hadoop入门》  3.
MapReduce架构概述

  
MapReduce将计算过程分为两个阶段:
Map
Reduce.

  1)
Map阶段并行处理输入数据

  2)
Reduce阶段对
Map结果进行汇总
《2_大数据之Hadoop入门》 6️⃣大数据技术生态体系
《2_大数据之Hadoop入门》  图中涉及的技术名词解释如下:

 1)
Sqoop
Sqoop是一款开源的工具,主要用于在
Hadoop
Hive与传统的数据库(
MySql)间进行数据的传递,可以将一个关系型数据库(例如 :
MySQL
Oracle 等)中的数据导进到
Hadoop
HDFS中,也可以将
HDFS的数据导进到关系型数据库中。

 2)
Flume
Flume
Cloudera提供的一个高可用的,高可靠的,分布式的海量日志采集、聚合和传输的系统,
Flume支持在日志系统中定制各类数据发送方,用于收集数据;同时,
Flume提供对数据进行简单处理,并写到各种数据接受方(可定制)的能力。

 3)
Kafka
Kafka是一种高吞吐量的分布式发布订阅消息系统,有如下特性:

  (1)通过
O(1)的磁盘数据结构提供消息的持久化,这种结构对于即使数以TB的消息存储也能够保持长时间的稳定性能。

  (2)高吞吐量:即使是非常普通的硬件
Kafka也可以支持每秒数百万的消息。

  (3)支持通过
Kafka服务器和消费机集群来分区消息。

  (4)支持
Hadoop并行数据加载。

 4)
Storm
Storm用于“连续计算”,对数据流做连续查询,在计算时就将结果以流的形式输出给用户。

 5)
Spark
Spark是当前最流行的开源大数据内存计算框架。可以基于
Hadoop上存储的大数据进行计算。

 6)
Oozie
Oozie是一个管理
Hdoop作业(
job)的工作流程调度管理系统。

 7)
Hbase
HBase是一个分布式的、面向列的开源数据库。
HBase不同于一般的关系数据库,它是一个适合于非结构化数据存储的数据库。

 8)
Hive
Hive是基于
Hadoop的一个数据仓库工具,可以将结构化的数据文件映射为一张数据库表,并提供简单的
SQL查询功能,可以将
SQL语句转换为
MapReduce任务进行运行。 其优点是学习成本低,可以通过类
SQL语句快速实现简单的
MapReduce统计,不必开发专门的MapReduce应用,十分适合数据仓库的统计分析。

 9)
R语言:
R是用于统计分析、绘图的语言和操作环境。
R是属于
GNU系统的一个自由、免费、源代码开放的软件,它是一个用于统计计算和统计制图的优秀工具。

 10)
Mahout
Apache Mahout是个可扩展的机器学习和数据挖掘库。

 11)
ZooKeeper
Zookeeper
Google
Chubby一个开源的实现。它是一个针对大型分布式系统的可靠协调系统,提供的功能包括:配置维护、名字服务、 分布式同步、组服务等。
ZooKeeper的目标就是封装好复杂易出错的关键服务,将简单易用的接口和性能高效、功能稳定的系统提供给用户。

7️⃣推荐系统框架图
《2_大数据之Hadoop入门》

三 Hadoop运行环境搭建

1️⃣虚拟机环境初始化

  1. 克隆虚拟机
  2. 修改克隆虚拟机的静态IP
  3. 修改主机名
  4. 关闭防火墙
  5. 创建一般用户
  6. 配置一般用户具有root权限
  7. 在/opt目录下创建文件夹
     ① 在/opt目录下创建module、software文件夹
     ② 修改module、software文件夹的所有者及组
#!/bin/bash

#环境初始化脚本
#读取用户输入
read -t 10 -p "Enter your user name in 10 seconds " username
read -t 10 -p "Enter your folder name in 10 seconds " foldernameone
read -t 10 -p "Enter your folder name in 10 seconds " foldernametwo
read -t 10 -p "Enter your starting value in 10 seconds " minvalue
read -t 10 -p "Enter your end value in 10 seconds " maxvalue
read -t 10 -p "Enter your ip number in 10 seconds " ip


#关闭防火墙
echo "关闭防火墙"
service iptables stop
chkconfig iptables off

#创建一个一般用户
echo "创建一般用户"
useradd $username
echo "123456" | passwd $username --stdin

#创建目录
echo "创建目录"
mkdir /opt/$foldernameone /opt/$foldernametwo
chown $username:$username /opt/$foldernameone /opt/$foldernametwo

#加入Sudoers
echo "加入Sudoers"
sed -i "/^root/a $username ALL=(ALL)       NOPASSWD: ALL" /etc/sudoers


lan=`ifconfig | grep Bcast | cut -d . -f 3`
#改Host
echo "修改hosts"
for ((i=$minvalue;i<$maxvalue;i++))
do
    echo "192.168.$lan.$i hadoop$i" >> /etc/hosts
done

#改网卡
echo "修改网卡"
cat <<EOF >/etc/sysconfig/network-scripts/ifcfg-eth0
DEVICE=eth0
TYPE=Ethernet
ONBOOT=yes
BOOTPROTO=static
IPADDR=192.168.$lan.$ip
PREFIX=24
GATEWAY=192.168.$lan.2
DNS1=192.168.$lan.2
NAME=eth0
EOF

#改主机名
echo "修改主机"
sed -i "s/HOSTNAME=.*/HOSTNAME=hadoop$ip/g" /etc/sysconfig/network

#改网卡脚本
echo "修改网卡"
sed -i '/eth0/d' /etc/udev/rules.d/70-persistent-net.rules 
sed -i 's/eth1/eth0/g' /etc/udev/rules.d/70-persistent-net.rules

#重启使配置生效
reboot

2️⃣安装JDK

  1. 查询是否安装JDKrpm -qa | grep java
  2. 卸载系统自带JDKrpm -e software_name
  3. 下载JDK到指定目录/opt/sofrware
  4. 解压JDK到指定目录/opt/module目录下tar -zxvf software_name -C /opt/module
  5. 配置JDK环境变量
     5.1 获取JDK路径pwd
     5.2 打开/etc/profile文件
     5.3 在profile文件末尾添加JDK路径
#JAVA_HOME
export JAVA_HOME=/opt/module/jdk1.8.0_144
export PATH=$PATH:$JAVA_HOME/bin
  1. 保存退出:wq
  2. 重新加载配置文件使修改生效source /etc/profile
  3. 测试JDK是否安装成功java -version
  4. 如果以上步骤没有问题第8步不能正常使用则重启尝试

3️⃣安装Hadoop

  1. 下载Hadoop到/opt/software目录此处版本为2.7.2
  2. 进入到Hadoop安装包路径下cd /opt/software/
  3. 解压安装文件到/opt/module下tar -zxvf software_name -C /opt/module
  4. 配置Hadoop环境变量
     4.1 获取Hadoop安装路径 pwd
     4.2 打开/etc/profile文件 vim /etc/profile
     4.3 在profile文件末尾添加环境变量
#HADOOP_HOME
export HADOOP_HOME=/opt/module/hadoop-2.7.2
export PATH=$PATH:$HADOOP_HOME/bin
export PATH=$PATH:$HADOOP_HOME/sbin
  1. 保存后退出 :wq
  2. 重新加载配置文件使修改生效source /etc/profile
  3. 测试是否安装成功hadoop version
  4. 如果以上步骤没有问题第7步不能正常使用则重启尝试

4️⃣Hadoop目录结构

  1. 查看Hadoop目录结构
ll /opt/module/hadoop-2.7.2
总用量 52
drwxr-xr-x. 2 xxx xxx  4096 5月  22 2017 bin
drwxr-xr-x. 3 xxx xxx  4096 5月  22 2017 etc
drwxr-xr-x. 2 xxx xxx  4096 5月  22 2017 include
drwxr-xr-x. 3 xxx xxx  4096 5月  22 2017 lib
drwxr-xr-x. 2 xxx xxx  4096 5月  22 2017 libexec
-rw-r--r--. 1 xxx xxx 15429 5月  22 2017 LICENSE.txt
-rw-r--r--. 1 xxx xxx   101 5月  22 2017 NOTICE.txt
-rw-r--r--. 1 xxx xxx  1366 5月  22 2017 README.txt
drwxr-xr-x. 2 xxx xxx  4096 5月  22 2017 sbin
drwxr-xr-x. 4 xxx xxx  4096 5月  22 2017 share
  1. 重要目录简介
    (1)bin目录:存放对Hadoop相关服务(HDFS,YARN)进行操作的脚本;
    (2)etc目录:Hadoop的配置文件目录,存放Hadoop的配置文件;
    (3)lib目录:存放Hadoop的本地库(对数据进行压缩解压缩功能);
    (4)sbin目录:存放启动或停止Hadoop相关服务的脚本;
    (5)share目录:存放Hadoop的依赖jar包、文档、和官方案例;
四 Hadoop运行模式

Hadoop运行模式包括 : 本地模式 伪分布式模式以及完全分布式模式.
Hadoop官方网站 : http://hadoop.apache.org

1️⃣本地运行模式

  1. 官方Grep案例
    ① 在hadoop-2.7.2文件下面创建一个input文件夹
mkdir input

 ② 将hadoopxml配置文件复制到input

cp etc/hadoop/*.xml input

 ③ 执行share目录下的MapReduce程序

bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar grep input output 'dfs[a-z.]+'

 ④ 查看输出结果

cat output/*
  1. 官方WordCount案例
    ① 在hadoop-2.7.2文件下面创建一个wcinput文件夹
mkdir wcinput

 ② 在wcinput文件下创建一个wc.input文件

touch wc.input

 ③ 编辑wc.input文件

vim wc.input
# 在文件中输入如下内容
hadoop yarn
hadoop mapreduce
test
test
# : wq 保存退出

 ④ 回到Hadoop目录/opt/module/hadoop-2.7.2
 ⑤ 执行程序

hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount wcinput wcoutput

 ⑥ 查看结果

cat wcoutput/part-r-00000
# 以下为输出内容
test 2
hadoop  2
mapreduce       1
yarn    1

2️⃣伪分布式运行模式

  1. 启动HDFS并运行MapReduce程序
  1. 分析
    (1)配置集群
    (2)启动、测试集群增、删、查
    (3)执行WordCount案例
  2. 执行步骤
    (1)配置集群
     (a)配置:hadoop-env.sh
      Linux系统中获取JDK的安装路径:echo $JAVA_HOME
      修改路径:export JAVA_HOME=/opt/module/jdk1.8.0_144
     (b)配置:core-site.xml 《2_大数据之Hadoop入门》  (c)配置:hdfs-site.xml 《2_大数据之Hadoop入门》
    (2)启动集群
     (a)格式化NameNode(第一次启动时格式化,以后就不要总格式化): bin/hdfs namenode -format
     (b)启动NameNode : sbin/hadoop-daemon.sh start namenode
     (c)启动DataNode : sbin/hadoop-daemon.sh start datanode
    (3)查看集群
     (a)查看是否启动成功 : jps(注意:jpsJDK中的命令,不是Linux命令。不安装JDK不能使用jps)
     (b)web端查看HDFS文件系统 : http://hadoop101:50070/dfshealth.html%23tab-overview注意:如果不能查看,看如下帖子处理http://www.cnblogs.com/zlslch/p/6604189.html
     (c)查看产生的Log日志
      当前目录:/opt/module/hadoop-2.7.2/logs
     (d)思考:为什么不能一直格式化NameNode,格式化NameNode,要注意什么?
      注意:格式化NameNode,会产生新的集群id,导致NameNode和DataNode的集群id不一致,集群找不到已往数据。所以,格式NameNode时,一定要先删除data数据和log日志,然后再格式化NameNode。
    (4)操作集群
     (a)在HDFS文件系统上创建一个input文件夹 : bin/hdfs dfs -mkdir -p /user/xxx/input
     (b)将测试文件内容上传到文件系统上 : bin/hdfs dfs -put wcinput/wc.input
     (c)查看上传的文件是否正确 : bin/hdfs dfs -ls /user/xxx/input/ bin/hdfs dfs -cat /user/xxx/ input/wc.input
     (d)运行MapReduce程序 : bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/xxx/input/ /user/xxx/output
     (e)查看输出结果 : bin/hdfs dfs -cat /user/xxx/output/*
  1. 启动YARN并运行MapReduce程序
  1. 分析
    (1)配置集群在YARN上运行MR
    (2)启动、测试集群增、删、查
    (3)在YARN上执行WordCount案例
  2. 执行步骤
    (1)配置集群
     (a)配置yarn-env.sh配置一下JAVA_HOME : export JAVA_HOME=/opt/module/jdk1.8.0_144
     (b)配置yarn-site.xml 《2_大数据之Hadoop入门》  (c)配置:mapred-env.sh配置一下JAVA_HOME : export JAVA_HOME=/opt/module/jdk1.8.0_144
     (d)配置: (对mapred-site.xml.template重新命名为) mapred-site.xml
mv mapred-site.xml.template mapred-site.xml
vim mapred-site.xml
<!-- 指定MR运行在YARN上 -->
<property>
     <name>mapreduce.framework.name</name>
     <value>yarn</value>
</property>

(2)启动集群
 (a)启动前必须保证NameNodeDataNode已经启动
 (b)启动ResourceManager : sbin/yarn-daemon.sh start resourcemanager
 (c)启动NodeManager : sbin/yarn-daemon.sh start nodemanager
(3)集群操作
 (a)YARN的浏览器页面查看 : http://hadoop101:8088/cluster

《2_大数据之Hadoop入门》  (b)删除文件系统上的
output文件 :
bin/hdfs dfs -rm -R /user/xxx/output

 (c)执行
MapReduce程序
bin/hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/xxx/input /user/xxx/output

 (d)查看运行结果 :
bin/hdfs dfs -cat /user/xxx/output/*
《2_大数据之Hadoop入门》

  1. 配置历史服务器 : 为了查看程序的历史运行情况,需要配置一下历史服务器。具体配置步骤如下
  1. 配置mapred-site.xml : vim mapred-site.xml
# 在该文件里面增加如下配置
<!-- 历史服务器端地址 -->
<property>
<name>mapreduce.jobhistory.address</name>
<value>hadoop101:10020</value>
</property>
<!-- 历史服务器web端地址 -->
<property>
   <name>mapreduce.jobhistory.webapp.address</name>
   <value>hadoop101:19888</value>
</property>
  1. 启动历史服务器 : sbin/mr-jobhistory-daemon.sh start historyserver
  2. 查看历史服务器是否启动 : jps
  3. 查看JobHistory : http://hadoop101:19888/jobhistory
  1. 配置日志的聚集
    日志聚集概念:应用运行完成以后,将程序运行日志信息上传到HDFS系统上。
    日志聚集功能好处:可以方便的查看到程序运行详情,方便开发调试。
    注意:开启日志聚集功能,需要重新启动NodeManager 、ResourceManager和HistoryManager。
    开启日志聚集功能具体步骤如下:
  1. 配置yarn-site.xml : vim 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>
  1. 关闭NodeManagerResourceManagerHistoryServer
sbin/yarn-daemon.sh stop resourcemanager
sbin/yarn-daemon.sh stop nodemanager
sbin/mr-jobhistory-daemon.sh stop historyserver
  1. 启动NodeManagerResourceManagerHistoryServer
sbin/yarn-daemon.sh start resourcemanager
sbin/yarn-daemon.sh start nodemanager
sbin/mr-jobhistory-daemon.sh start historyserver
  1. 删除HDFS上已经存在的输出文件 : bin/hdfs dfs -rm -R /user/xxx/output
  2. 执行WordCount程序 : hadoop jar share/hadoop/mapreduce/hadoop-mapreduce-examples-2.7.2.jar wordcount /user/xxx/input /user/xxx/output
  3. 查看日志 : http://hadoop101:19888/jobhistory 《2_大数据之Hadoop入门》 《2_大数据之Hadoop入门》 《2_大数据之Hadoop入门》
  1. 配置文件说明
    Hadoop配置文件分两类:默认配置文件和自定义配置文件,只有用户想修改某一默认配置值时,才需要修改自定义配置文件,更改相应属性值。

(1)默认配置文件:

《2_大数据之Hadoop入门》 (2)自定义配置文件:

  
core-site.xml
hdfs-site.xml
yarn-site.xml
mapred-site.xml四个配置文件存放在
$HADOOP_HOME/etc/hadoop这个路径上,用户可以根据项目需求重新进行修改配置。

    原文作者:十丈_红尘
    原文地址: https://www.jianshu.com/p/1f52b0e0a610
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞