1. 程式人生 > >第1章 初探大資料

第1章 初探大資料

1、1導學

功能實現

統計imooc(慕課網)主站最受歡迎的課程/手記的Top N訪問次數

按地市統計imooc主站最受歡迎的Top N課程

按流量統計imocc主站最受歡迎的Top N課程

大資料的到來

 

 

任職要求

.熟悉Linux作業系統,熟悉Linux shell 程式設計

.熟悉Java或者scala語言,具有一年以上實際開發經驗

.熟悉spark sql 或 spark streaming 或spark core等程式設計,具有實際開發經驗

.熟悉Hadoop生態環境或分散式儲存與計算技術

.具有良好的開發習慣

.思維敏捷,學習能力強,具有良好的邏輯分析能力

技能:對Hadoop生態或者spark的掌握程度

快速突破口

掌握Hadoop,Hive的基本使用

重點突破Spark

明確DataFrame/Dataset在整個Spark框架中的核心地位

課程安排

Hadoop部分

1、大資料概述

2、零基礎學習Hadoop框架三大核心元件的使用

3、Hive快速入門及使用

Spark SQL部分

1、認知Spark及生態圈

2、零基礎搭建Spark環境(原始碼編譯、Spark部署)

3、Spark SQL概述

4、如何從hive平滑的過渡到Spark SQL

5、DataFrame/Dataset操作詳解

6、外部資料來源詳解

7、Spark SQL的願景深度剖析

8、慕課網日誌分析專案實戰

前置基礎知識要求

  • 熟悉基本SQL的使用
  • 熟悉常用的Liunx的命令’
  • 熟悉一門程式語言(Java/Scala/Python)均可

選擇Scala作為開發語言的原因

  • Spark核心原始碼採用Scala開發的
  • Spark相對Java開發更加優雅和方便
  • 主站有Scala基礎課程的視訊
  • http://www.imooc.com/learn/613

 

環境引數

  • Liunx版本:CentOS(6.4)
  • Hadoop版本:CDH(hadoop-2.6.0-cdh5.7.0)
  • Hive版本:CDH(hive-1.1.0-cdh5.7.0)
  • Scala版本:2.11.8
  • Spark版本:spark-2.1.0
  • 開發工具:IDEA

1、2如何學好大資料

 

  • 官網、官網、官網
  • 英文、英文、英文
  • 專案實戰對知識點進行鞏固和融會貫通
  • 社群活動:Meetup、開源社群大會、線下沙龍等
  • 切記:多動手、多練習、貴在堅持

 

1、3開發環境

liunx版本對應

  • CentOS(本課程選擇的是6.4)
  • Ubuntu
  • Redhat
  • 會提供純淨版的安裝映象檔案

Hadoop版本對比及選擇

  • Apache社群
  • CDH版本(本課程選擇是cdh5.7.0系列)
  • HDP版本
  • 會提供OOTB的整套課程的開發環境

課程整套CDH相關軟體下載地址:http://archive.cloudera.com/cdh5/cdh/5/

在生產或者測試環境選擇對應的CDH版本時,一定要採用相同尾號的版本

 

開發工具對比選擇

  • IDEA(本課程的選擇)
  • Eclipse

1、4 ooptb映象檔案使用介紹

1、軟體包

2、安裝路徑

 

 

3、spark原始碼編譯

 

4、課程指令碼檔案

 

1、5大資料概述

大資料帶來的技術變革

  • 技術瓶頸
  • 儲存瓶頸
  • 資料庫瓶頸

大資料公司現存的模式

  • 手握大資料,但是沒有利用好
  • 沒有大資料,但是知道如何幫助有資料的人利用它
  • 既有資料,又有大資料思維

1、6 Hadoop概述

Hadoop的由來

是一個虛構名稱

Hadoop專案作者的孩子給一個棕黃色的大象樣子的填充玩具的命名

對於Apache的頂級專案來說,projectname.apache.org

Hadoop:hadoop.apache.org

Hive:hive.apache.org

Spark:spark.apache.org

HBase:hbase.apache.org

什麼是Hadoop

一個分散式系統基礎架構,由Apache基金會開發。使用者可以在不瞭解分散式底層細節的情況下,開發分散式程式。充分利用叢集的威力高速執行和儲存。

  • Distributed File System(HDFS)
  • YARN
  • MapReduce

The project includes these modules:

  • Hadoop Common: The common utilities that support the other Hadoop modules.
  • Hadoop Distributed File System (HDFS™): A distributed file system that provides high-throughput access to application data.
  • Hadoop YARN: A framework for job scheduling and cluster resource management.
  • Hadoop MapReduce: A YARN-based system for parallel processing of large data sets.

 

狹義Hapdoop VS 廣義Hapdoop

狹義的Hapdoop:是一個適合大資料分散式儲存(HDFS)、分散式計算(MapRuduce)和資源排程(YARN)的平臺 ;

廣義的Hadoop:指的就是Hapdoop生態系統,Hapdoop生態系統是一個龐大的概念,Hadoop是最重要最基礎的一個部分;生態系統中的每一個系統只解決某一個特定的問題域(甚至可能很窄),不搞統一型的一個全能系統,而是小而精的多個小系統;

 

為什麼很多公司選擇Hadoop作為大資料平臺的解決方案?

1)、原始碼開源

2)、社群活躍、參與者很多 Speak

3)、涉及到分散式儲存和計算的方方面面:

flume 進行資料採集

Speak/MR/Hive等進行資料處理

HDFS/HBASE進行資料儲存

4)、已得到企業界的驗證

 

1、7 HDFS概述及設計目標

分散式檔案系統(HDFS)

什麼是HDFS

Hadoop實現了一個分散式檔案系統(Hadoop DIstributed File System),簡稱HDFS

源來於Google的GFS論文

發表於2003年,HDFS是GFS克隆版

HDFS的設計目標

  • 非常巨大的分散式檔案系統
  • 執行在普通廉價的硬體上
  • 易擴充套件,為使用者提供效能不錯的檔案儲存服務

 

1、8HDFS架構

1 Master(NameNode/NN)  帶 N個Slaves(DataNode/DN)

包括:HDFS,YARS/HBase都是這種架構

http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-hdfs/HdfsDesign.html

 

1個檔案會被拆分成多個Block

blocksize:128M

130M ==> 2個Block: 128M 和 2M

NN:

1)負責客戶端請求的響應

2)負責元資料(檔案的名稱、副本系數、Block存放的DN)的管理

DN:

1)儲存使用者的檔案對應的資料塊(Block)

2)要定期向NN傳送心跳資訊,彙報本身及其所有的block資訊,健康狀況

A typical deployment has a dedicated machine that runs only the NameNode software.

Each of the other machines in the cluster runs one instance of the DataNode software.

The architecture does not preclude running multiple DataNodes on the same machine but in a real deployment that is rarely the case.

建議:NN和DN是部署在不同的節點上

 

1、9HDFS副本機制

 

The File System Namespace

HDFS supports a traditional hierarchical file organization. A user or an application can create directories and store files inside these directories. The file system namespace hierarchy is similar to most other existing file systems; one can create and remove files, move a file from one directory to another, or rename a file. HDFS supports user quotas and access permissions. HDFS does not support hard links or soft links. However, the HDFS architecture does not preclude implementing these features.

The NameNode maintains the file system namespace. Any change to the file system namespace or its properties is recorded by the NameNode. An application can specify the number of replicas of a file that should be maintained by HDFS. The number of copies of a file is called the replication factor of that file. This information is stored by the NameNode.

Data Replication

HDFS is designed to reliably store very large files across machines in a large cluster. It stores each file as a sequence of blocks. The blocks of a file are replicated for fault tolerance. The block size and replication factor are configurable per file.

All blocks in a file except the last block are the same size, while users can start a new block without filling out the last block to the configured block size after the support for variable length block was added to append and hsync.

An application can specify the number of replicas of a file. The replication factor can be specified at file creation time and can be changed later. Files in HDFS are write-once (except for appends and truncates) and have strictly one writer at any time.

The NameNode makes all decisions regarding replication of blocks. It periodically receives a Heartbeat and a Blockreport from each of the DataNodes in the cluster. Receipt of a Heartbeat implies that the DataNode is functioning properly. A Blockreport contains a list of all blocks on a DataNode.

 

replication factor:副本系數、副本因子

 

All blocks in a file except the last block are the same size

 

1、10 Hadoop下載jdk

 

 

 Hadoop環境搭建

使用版本:hadoop-2.6.0-cdh5.7.0

  • 1)jdk 環境搭建
  • 2)liunx機器常用引數設定
  • 3)hadoop-env.sh
  • 4)core-site.xml hdfs-site.xml
  • 5-7)格式化HDFS 啟停HDFS

1) 下載Hadoop

wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz

本課程軟體存放目錄

hadoop

/home/hadoop

/software:存放的是安裝的軟體包

安裝到 /app:存放的是所以軟體安裝目錄

/data:存放的是課程所有使用的測試資料目錄

/source:存放都的是軟體原始碼目錄 比如spark

2)、JDK安裝

解壓:tar -zxvf jdk-7u79-linux-x64.tar.gz -C ~/app

建議把bin目錄配置到系統環境變數

新增到系統環境變數: ~/.bash_profile  

   export JAVA_HOME=/home/hadoop/app/jdk1.7.0_79

   export JAVA_HOME=$JAVA_HOME/bin:$PATH

 使得環境變數生效  source ~/.bash_profile  

 驗證java是否配置成功: java  -version

 

 

1、11 機器引數的設定

Hadoop環境搭建

使用版本:Hadoop-2.6.0-cdh5.7.0

jdk環境搭建

linux機器常用引數設定

3)機器引數設定

hostname:hadoop001

修改機器名 vi /etc/sysconfig/network

NETWORKING=yes

HOSTNAME=hadoop001

設定ip和hostname的對映關係:/etc/hosts

192.169.199.200 hadoop001

127.0.0.1 localhost

ssh 免密碼登入(本步驟可以省略,但是後面重啟hadoop程序時需要手工輸入密碼才行)

ssh-keygen -t rsa

執行後檢視ssh : cd ~/.ssh/

cp ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

1-12 hdfs核心配置檔案內容配置

 

1、安裝hadoop的步驟

1) 安裝完jdk以後開始按照Hadoop

2)先下載hadoop

wget http://archive.cloudera.com/cdh5/cdh/5/hadoop-2.6.0-cdh5.7.0.tar.gz

3)解壓

tar -zxvf hadoop-2.6.0-cdh5.7.0.tar.gz -C /home/hadoop/app/

 

2、hadoop配置檔案修改

~/app/hadoop-2.6.0-cdh5.7.0/etc/hadoop

1) hadoop -env.sh

檢視JAVE_HOME : echo $JAVA_HOME

   加上配置JDK環境

    export  JAVA_HOME=/root/java/jdk1.8.0_161

2)core-site.xml

<property>

<name>fs.defaultFS</name>

<value>hafs://localhost:8020</value>

</property>

<property>

<name>hadoop.tmp.dir</name>

<value>/home/hadoop/app/tmp</value>

</property>

3)hdfs-site.xml

<property> <name>dfs.replication</name> <value>1</value> </property>

具體可以參照官方:http://hadoop.apache.org/docs/current/hadoop-project-dist/hadoop-common/SingleCluster.html

 

1-13 hdfs格式化及啟停

4)格式化HDFS

注意:這一步操作,只是在一次使用時格式化

1)Format the filesystem:

$ bin/ hdfs namenode -format

在bin 目錄下執行 ./hdfs namenode -format

5)啟動HDFS

Start NameNode daemon and DataNode daemon:

$ sbin/start-dfs.sh

驗證是否啟動成功

jps

DataNode

SecondaryNameNode

NameNode

瀏覽器

http://hadoop001:50070

6)停止HDFS

When you’re done, stop the daemons with:

$ sbin/stop-dfs.sh

1-14 hdfs shell常用操作

詳情可參考

http://hadoop.apache.org/docs/r3.0.3/hadoop-project-dist/hadoop-hdfs/HDFSCommands.html#dfs

hdfs的命令和liunx命令很相似

Is  get mkdir rm put

1-15 HDFS優缺點

HDFS優點

資料餘,硬體容錯  適合儲存大檔案

處理流式的資料訪問  可構建在廉價機器上  

HDFS缺點

低延遲的資料訪問

小檔案儲存

 

 

 

1-16MapReduce概述

(瞭解即可,重點是spark)

什麼是MapReduce

 源於Google的MapReduce論文,論文發表於2014年12月

Hadoop MapReduce是 Google MapReduce的克隆版

MapReduce優點:

  • 易於程式設計
  • 良好的擴充套件性
  • 高容錯性
  • 海量資料離
  • 線處理&易開發&易執行

MapReduce缺點:實時流式計算 DAG計算

 

1-17 mapreduce程式設計模型及wordcount

MapReduce程式設計模型

input

map&reduce

output

 

 

程式碼檢視官網

http://hadoop.apache.org/docs/r3.0.3/hadoop-mapreduce-client/hadoop-mapreduce-client-core/MapReduceTutorial.html

1-18 yarn產生背景

yarn是資源排程框架

YARN產生的背景

mapreduce1.x存在的問題

 

 

 

1-19 yarn架構和執行流程

 

1RM(ResourceManager)+n NM(NodeManager)

ResourceManager的職責:一個叢集active狀態的RM只有一個,負責整個叢集的資源管理和排程

1)處理客戶端的請求(啟動/殺死)

2) 啟動/監控ApplicationMaster(一個作業對應一個AM)

3)監控NM

4)系統的資源分配和排程

NodeManager:整個叢集有N個,負責單個節點的資源和使用以及task的執行情況

1)定期向RM彙報本節點的資源使用請求和各個Container的執行情況

2)接收並處理RM的container啟停的各種命令

3)單個節點的資源管理和任務管理

ApplicationMaster:每個應用/作業對應一個,負責應用程式的管理

1)資料拆分

2)為應用程式向RM申請資源(container),並分給內部任務

3)與NM通訊以啟停task,task是執行在container中的

4)task的監控和容錯

Container

對任務執行情況的描述:CPU、memory、環境變數

 

YARN執行流程

1)使用者項YARN提交作業

2)RM為該作業分配第一個container(AM)

3)RM會與對應的NM通訊,要求NM在這個container上啟動應用程式的AM

4)AM首先向RM註冊,然後AM將各個任務申請資源,並監控執行情況

5)AM採用輪轉方式通過RPC協議向RM申請和領取資源

6)AM申請資源以後,便和相應的NM通訊,要求NM啟動任務

7)NM啟動我們作業對應的task

 

1-20 -YARN環境搭建及提交作業到YARN上執行

YARN環境搭建

參看文件:

http://hadoop.apache.org/docs/r3.0.3/hadoop-project-dist/hadoop-common/SingleCluster.html

YARN on a Single Node

1、Configure parameters as follows:

etc/hadoop/mapred-site.xml:

<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>

etc/hadoop/yarn-site.xml:

<property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property>

2、Start ResourceManager daemon and NodeManager daemon:

$ sbin/start-yarn.sh

3、驗證是否啟動成功

jps

ResourceManager

NodeManager

web:

Browse the web interface for the ResourceManager; by default it is available at:

停止YARN:

$ sbin/stop-yarn.sh

TODO

執行作業等的搭建完環境再寫

 

1-21 -Hive產生背景及Hive是什麼

官網:https://hive.apache.org/index.html

大資料資料倉庫Hive

Hive產生背景

MapReduce程式設計不方便

HDFS上缺少Schema

(指的是一組DDL語句集,該語句集完整地描述了資料庫的結構。還有一種是物理上的Schema,指的是資料庫中的一個名字空間,它包含一組表、檢視和儲存過程等命名物件。物理Schema可以通過標準SQL語句來建立、更新和修改。)

Hive是什麼

The Apache Hive ™ data warehouse software facilitates reading, writing, and managing large datasets residing in distributed storage using SQL. Structure can be projected onto data already in storage. A command line tool and JDBC driver are provided to connect users to Hive.

1、由Facebook開源,最初用於解決海量結構化的日誌資料統計問題

2、構建在Hadoop之上的資料倉庫

3、Hive定義一種類SQL查詢語言:HQL(類似SQL但不是完全相同)

4、通常用於離線資料處理(採用MapReduce)

5、底層支援多種不同的執行引擎

Hive底層執行引擎有MapReduce、Tez、Speak

Hive on MapReduce

Hive on Tez

Hive on Speak

6、支援多種不同的壓縮格式,儲存格式以及自定義函式

壓縮:GZIP/LZO、Snappy、BZIP2

儲存:TextFile、SequenceFile、RCFile,、ORC 、Parquet

UDF:自定義函式

 

1-22 -為什麼要使用Hive及Hive發展歷程

為什麼要使用Hive

  • 簡單、容易上手(提供了類似SQL查詢語言HQL)
  • 為超大資料集設計的計算、儲存擴充套件能力(MR計算,HDFS儲存)
  • 統一的元資料管理(可用Presto/Impala/SparkSQL等共享資料)

Hive發展歷程

1-23 -Hive體系架構及部署架構

 

部署架構

 

1-24 -Hive環境搭建

Hive 環境搭建

使用版本:hive-1.1.0-cdh5.7.0

1)Hive下載:http://archive.cloudera.com/cdh5/cdh/5/

wget http://archive.cloudera.com/cdh5/cdh/5/hive-1.1.0-cdh5.7.0.tar.gz

2 )解壓

tar -zxvf hive-1.1.0-cdh5.7.0.tar.gz -C /home/hadoop/app/

3)配置

參考文件:https://cwiki.apache.org/confluence/display/Hive/GettingStarted

1) $ export HIVE_HOME={{pwd}}

系統變數

系統環境變數(~/hahs_profile)

export HIVE_HOME=/home/hadoop/app/hive-1.1.0-cdh5.7.0

export PATH=$HIVE_HOME/bin:$PATH

連線一個mysql yun install XXX

1) 配置hadoop目錄

vi hive-env.sh

HADOOP_HOME=/home/hadoop/app/hadoop-2.6.0-cdh5.7.0

2)配置mysql源資訊

配置連線mysql資訊

<?xml version="1.0" encoding="UTF-8" standalone="no"?>

<?xml-stylesheet type="text/xsl" href="configuration.xsl"?>

<configuration>

<property>

<name>javax.jdo.option.ConnectionURL</name>

<value>jdbc:mysql://59818a0fa1d8a.bj.cdb.myqcloud.com:5169/hive?createDatabaseIfNotExist=true</value>

</property>

<property>

<name>javax.jdo.option.ConnectionDriverName</name>

<value>com.mysql.jdbc.Driver</value>

</property>

<property>

<name>javax.jdo.option.ConnectionUserName</name>

<value>root</value>

</property>

<property>

<name>javax.jdo.option.ConnectionPassword</name>

<value>sag18747231218</value>

</property>

</configuration>

 

3)拷貝mysql驅動到&HIVE_HOME/lib

cp ~/software/mysql-connector-java-5.1.27-bin.jar

4)啟動hive

/home/hadoop/app/hive-1.1.0-cdh5.7.0/bin

./hive

 

1-25 -Hive基本使用

 

可參考:

https://cwiki.apache.org/confluence/display/Hive/GettingStarted

Hive基本操作

建立表

使用hive完成wordcount統計(對比MapReduce實現的易用性)

create table hive_wordcount(context string);

載入資料到hive表

LOAD DATA LOCAL INPATH './examples/files/kv1.txt' OVERWRITE INTO TABLE pokes;

load data local inpat '/home/hadoop/data/hello.txt' into table hive_wordcount

select word,count(1) from hive_wordcount lateral view explode(split(context,'\t')) wc as word group by word

explode(split(context,'\t')):是把每行記錄按照製表符進行拆解

hive sql 提交執行以後會生成mr作業,並在yarn上執行

案例:員工表(emp.txt)和部門表()操作

原資料在/home/hadoop/data

建立員工表

create table emp (

empno int,

ename string,

job string,

mgr int,

hiredate string,

sal double,

comm double,

deptno int

)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';

建立部門表 dept

create table dept(

deptno int,

dname string,

location string

)ROW FORMAT DELIMITED FIELDS TERMINATED BY '\t';\

載入

load data local inpat '/home/hadoop/data/emp.txt' into table emp

load data local inpat '/home/hadoop/data/dept.txt' into table dept

求每個部門的人數

select depton,count(1) from emp group by deptno;