天天看點

HADOOP快速入門The java implementation to use.export JAVA_HOME=/home/hadoop/apps/jdk1.7.0_51

目錄

課程大綱(HADOOP快速入門) 2

  1. HADOOP 快速入門 3

    什麼是HADOOP 3

    HADOOP産生背景 3

    HADOOP在大資料、雲計算中的位置和關系 3

    國内外HADOOP應用案例介紹 4

    國内HADOOP的就業情況分析 5

    HADOOP生态圈以及各組成部分的簡介 6

    分布式系統概述 6

  2. HIVE快速入門 7

    2.1 Hive基本介紹 7

    2.2 Hive的基本使用 8

    2.3 資料倉庫基本知識 9

  3. 資料分析案列示範 10

    3.1 需求分析 10

    3.1.1案例名稱 10

    3.1.2 案例需求描述 10

    3.1.3 web點選流日志的資料格式 10

    3.1.4 分析名額 11

    3.1.5 統計結果資料可視化 11

    3.2 資料來源分析 12

    3.2.1 企業中擷取資料的幾種方式 12

    3.2.2 資料采集 12

    3.3 資料處理流程 13

    資料預處理/加載入庫 13

    使用Hive做資料ETL 14

    使用Hive運算業務名額 16

    将結果資料導出到mysql(sqoop) 17

    結果展現——資料可視化 17

  4. 叢集搭建 18

    4.1 HADOOP叢集搭建 18

    4.1.1叢集簡介: 18

    4.1.2伺服器準備 18

    4.1.3網絡環境準備 18

    4.1.4伺服器系統設定 18

    4.1.5 Jdk環境安裝 19

    4.1.6 HADOOP安裝部署 19

    4.1.7 啟動叢集 21

    4.1.8 測試 21

    4.2 Hive搭建 22

    Hive的配置安裝 22

    Hive的使用 23

    Hive運作測試 23

課程大綱(HADOOP快速入門)

HADOOP快速入門 HADOOP快速入門 HADOOP産生背景

HADOOP在大資料、雲計算中的位置和關系

國内外HADOOP應用案例介紹

國内HADOOP的就業情況分析及課程大綱介紹

分布式系統概述

HADOOP生态圈以及各組成部分的簡介

Hive快速入門 Hive快速入門 Hive基本介紹

Hive的使用

資料倉庫基本知識

資料分析案例示範 需求分析 案列:定義需求、介紹資料格式

資料擷取 企業中擷取資料的幾種方式

将檔案直接導入到資料倉庫

将資料庫的資料導入到資料倉庫(sqoop)

資料處理 使用Hive對數進行清洗(ETL的過程)

資料計算 使用Hive對資料進行計算

資料展現 将結果資料導出到mysql(sqoop)

學習目标:

第一天接觸具體的大資料架構,總目标是讓學習者建立起大資料和分布式的宏觀概念

1、了解hadoop是什麼,用于做什麼,大體上怎麼用

2、了解hive是什麼,用于做什麼,大體上怎麼用

3、通過一個案例的示範說明,了解資料挖掘系統的基本流程和結構

  1. HADOOP背景介紹

    1.1 什麼是HADOOP

  2. HADOOP是apache旗下的一套開源軟體平台
  3. HADOOP提供的功能:利用伺服器叢集,根據使用者的自定義業務邏輯,對海量資料進行分布式處理
  4. HADOOP的核心元件有

    A. HDFS(分布式檔案系統)

    B. YARN(運算資源排程系統)

    C. MAPREDUCE(分布式運算程式設計架構)

  5. 廣義上來說,HADOOP通常是指一個更廣泛的概念——HADOOP生态圈

    1.2 HADOOP産生背景

  6. HADOOP最早起源于Nutch。Nutch的設計目标是建構一個大型的全網搜尋引擎,包括網頁抓取、索引、查詢等功能,但随着抓取網頁數量的增加,遇到了嚴重的可擴充性問題——如何解決數十億網頁的存儲和索引問題。
  7. 2003年、2004年谷歌發表的兩篇論文為該問題提供了可行的解決方案。

    ——分布式檔案系統(GFS),可用于處理海量網頁的存儲

    ——分布式計算架構MAPREDUCE,可用于處理海量網頁的索引計算問題。

  8. Nutch的開發人員完成了相應的開源實作HDFS和MAPREDUCE,并從Nutch中剝離成為獨立項目HADOOP,到2008年1月,HADOOP成為Apache頂級項目,迎來了它的快速發展期。

    1.3 HADOOP在大資料、雲計算中的位置和關系

  9. 雲計算是分布式計算、并行計算、網格計算、多核計算、網絡存儲、虛拟化、負載均衡等傳統計算機技術和網際網路技術融合發展的産物。借助IaaS(基礎設施即服務)、PaaS(平台即服務)、SaaS(軟體即服務)等業務模式,把強大的計算能力提供給終端使用者。
  10. 現階段,雲計算的兩大底層支撐技術為“虛拟化”和“大資料技術”
  11. 而HADOOP則是雲計算的PaaS層的解決方案之一,并不等同于PaaS,更不等同于雲計算本身。

1.4 國内外HADOOP應用案例介紹

1、HADOOP應用于資料服務基礎平台建設

2/HADOOP用于使用者畫像

3、HADOOP用于網站點選流日志資料挖掘

1.5 國内HADOOP的就業情況分析

1、 HADOOP就業整體情況

A. 大資料産業已納入國家十三五規劃

B. 各大城市都在進行智慧城市項目建設,而智慧城市的根基就是大資料綜合平台

C. 網際網路時代資料的種類,增長都呈現爆發式增長,各行業對資料的價值日益重視

D. 相對于傳統JAVAEE技術領域來說,大資料領域的人才相對稀缺

E. 随着現代社會的發展,資料處理和資料挖掘的重要性隻會增不會減,是以,大資料技術是一個尚在蓬勃發展且具有長遠前景的領域

2、 HADOOP就業職位要求

大資料是個複合專業,包括應用開發、軟體平台、算法、資料挖掘等,是以,大資料技術領域的就業選擇是多樣的,但就HADOOP而言,通常都需要具備以下技能或知識:

A. HADOOP分布式叢集的平台搭建

B. HADOOP分布式檔案系統HDFS的原理了解及使用

C. HADOOP分布式運算架構MAPREDUCE的原理了解及程式設計

D. Hive資料倉庫工具的熟練應用

E. Flume、sqoop、oozie等輔助工具的熟練使用

F. Shell/python等腳本語言的開發能力

3、 HADOOP相關職位的薪資水準

大資料技術或具體到HADOOP的就業需求目前主要集中在北上廣深一線城市,薪資待遇普遍高于傳統JAVAEE開發人員,以北京為例:

1.6 HADOOP生态圈以及各組成部分的簡介

各元件簡介

重點元件:

HDFS:分布式檔案系統

MAPREDUCE:分布式運算程式開發架構

HIVE:基于大資料技術(檔案系統+運算架構)的SQL資料倉庫工具

HBASE:基于HADOOP的分布式海量資料庫

ZOOKEEPER:分布式協調服務基礎元件

Mahout:基于mapreduce/spark/flink等分布式運算架構的機器學習算法庫

Oozie:工作流排程架構

Sqoop:資料導入導出工具

Flume:日志資料采集架構

2 分布式系統概述

注:由于大資料技術領域的各類技術架構基本上都是分布式系統,是以,了解hadoop、storm、spark等技術架構,都需要具備基本的分布式系統概念

2.1 分布式軟體系統(Distributed Software Systems)

² 該軟體系統會劃分成多個子系統或子產品,各自運作在不同的機器上,子系統或子產品之間通過網絡通信進行協作,實作最終的整體功能

² 比如分布式作業系統、分布式程式設計語言及其編譯(解釋)系統、分布式檔案系統和分布式資料庫系統等。

2.2 分布式軟體系統舉例:solrcloud

A. 一個solrcloud叢集通常有多台solr伺服器

B. 每一個solr伺服器節點負責存儲整個索引庫的若幹個shard(資料分片)

C. 每一個shard又有多台伺服器存放若幹個副本互為主備用

D. 索引的建立和查詢會在整個叢集的各個節點上并發執行

E. solrcloud叢集作為整體對外服務,而其内部細節可對用戶端透明

總結:利用多個節點共同協作完成一項或多項具體業務功能的系統就是分布式系統。

2.3 分布式應用系統模拟開發

需求:可以實作由主節點将運算任務發往從節點,并将各從節點上的任務啟動;

程式清單:

AppMaster

AppSlave/APPSlaveThread

Task

程式運作邏輯流程:

  1. 離線資料分析流程介紹

    注:本環節主要感受資料分析系統的宏觀概念及處理流程,初步了解hadoop等架構在其中的應用環節,不用過于關注代碼細節

一個應用廣泛的資料分析系統:“web日志資料挖掘”

3.1 需求分析

3.1.1 案例名稱

“網站或APP點選流日志資料挖掘系統”。

3.1.2 案例需求描述

“Web點選流日志”包含着網站營運很重要的資訊,通過日志分析,我們可以知道網站的通路量,哪個網頁通路人數最多,哪個網頁最有價值,廣告轉化率、訪客的來源資訊,訪客的終端資訊等。

3.1.3 資料來源

本案例的資料主要由使用者的點選行為記錄

擷取方式:在頁面預埋一段js程式,為頁面上想要監聽的标簽綁定事件,隻要使用者點選或移動到标簽,即可觸發ajax請求到背景servlet程式,用log4j記錄下事件資訊,進而在web伺服器(nginx、tomcat等)上形成不斷增長的日志檔案。

形如:

58.215.204.118 - - [18/Sep/2013:06:51:35 +0000] “GET /wp-includes/js/jquery/jquery.js?ver=1.10.2 HTTP/1.1” 304 0 “http://blog.fens.me/nodejs-socketio-chat/” “Mozilla/5.0 (Windows NT 5.1; rv:23.0) Gecko/20100101 Firefox/23.0”

3.2 資料處理流程

3.2.1 流程圖解析

本案例跟典型的BI系統極其類似,整體流程如下:

但是,由于本案例的前提是處理海量資料,因而,流程中各環節所使用的技術則跟傳統BI完全不同,後續課程都會一一講解:

  1. 資料采集:定制開發采集程式,或使用開源架構FLUME
  2. 資料預處理:定制開發mapreduce程式運作于hadoop叢集
  3. 資料倉庫技術:基于hadoop之上的Hive
  4. 資料導出:基于hadoop的sqoop資料導入導出工具
  5. 資料可視化:定制開發web程式或使用kettle等産品
  6. 整個過程的流程排程:hadoop生态圈中的oozie工具或其他類似開源産品

3.2.2 項目技術架構圖

3.2.3 項目相關截圖(感性認識,欣賞即可)

a) Mapreudce程式運作

b) 在Hive中查詢資料

c) 将統計結果導入mysql

./sqoop export --connect jdbc:mysql://localhost:3306/weblogdb --username root --password root  --table t_display_xx  --export-dir /user/hive/warehouse/uv/dt=2014-08-03

3.3 項目最終效果

經過完整的資料處理流程後,會周期性輸出各類統計名額的報表,在生産實踐中,最終需要将這些報表資料以可視化的形式展現出來,本案例采用web程式來實作資料可視化

效果如下所示:

  1. 叢集搭建

    4.1 HADOOP叢集搭建

    4.1.1叢集簡介

    HADOOP叢集具體來說包含兩個叢集:HDFS叢集和YARN叢集,兩者邏輯上分離,但實體上常在一起

    HDFS叢集:

    負責海量資料的存儲,叢集中的角色主要有 NameNode / DataNode

    YARN叢集:

    負責海量資料運算時的資源排程,叢集中的角色主要有 ResourceManager /NodeManager

    (那mapreduce是什麼呢?它其實是一個應用程式開發包)

本叢集搭建案例,以5節點為例進行搭建,角色配置設定如下:

hdp-node-01    NameNode  SecondaryNameNodehdp-node-02    ResourceManagerhdp-node-03 DataNode    NodeManagerhdp-node-04 DataNode    NodeManagerhdp-node-05 DataNode    NodeManager

部署圖如下:

4.1.2伺服器準備

本案例使用虛拟機伺服器來搭建HADOOP叢集,所用軟體及版本:

ü Vmware 11.0

ü Centos 6.5 64bit

4.1.3網絡環境準備

ü 采用NAT方式聯網

ü 網關位址:192.168.33.1

ü 3個伺服器節點IP位址:192.168.33.101、192.168.33.102、192.168.33.103

ü 子網路遮罩:255.255.255.0

4.1.4伺服器系統設定

ü 添加HADOOP使用者

ü 為HADOOP使用者配置設定sudoer權限

ü 同步時間

ü 設定主機名

n hdp-node-01

n hdp-node-02

n hdp-node-03

ü 配置内網域名映射:

n 192.168.33.101 hdp-node-01

n 192.168.33.102 hdp-node-02

n 192.168.33.103 hdp-node-03

ü 配置ssh免密登陸

ü 配置防火牆

4.1.5 Jdk環境安裝

ü 上傳jdk安裝包

ü 規劃安裝目錄 /home/hadoop/apps/jdk_1.7.65

ü 解壓安裝包

ü 配置環境變量 /etc/profile

4.1.6 HADOOP安裝部署

ü 上傳HADOOP安裝包

ü 規劃安裝目錄 /home/hadoop/apps/hadoop-2.6.1

ü 解壓安裝包

ü 修改配置檔案 $HADOOP_HOME/etc/hadoop/

最簡化配置如下:

vi hadoop-env.sh

The java implementation to use.export JAVA_HOME=/home/hadoop/apps/jdk1.7.0_51

vi core-site.xml

fs.defaultFShdfs://hdp-node-01:9000hadoop.tmp.dir/home/HADOOP/apps/hadoop-2.6.1/tmp

vi hdfs-site.xml

dfs.namenode.name.dir/home/hadoop/data/namedfs.datanode.data.dir/home/hadoop/data/data dfs.replication3 dfs.secondary.http.addresshdp-node-01:50090

vi mapred-site.xml

mapreduce.framework.nameyarn

vi yarn-site.xml

yarn.resourcemanager.hostnamehadoop01 yarn.nodemanager.aux-servicesmapreduce_shuffle

vi salves

hdp-node-01hdp-node-02hdp-node-03

4.1.7 啟動叢集

初始化HDFS

bin/hadoop  namenode  -format

啟動HDFS

sbin/start-dfs.sh

啟動YARN

sbin/start-yarn.sh

4.1.8 測試

1、上傳檔案到HDFS

從本地上傳一個文本檔案到hdfs的/wordcount/input目錄下

[[email protected] ~]$ HADOOP fs -mkdir -p /wordcount/input[[email protected] ~]$ HADOOP fs -put /home/HADOOP/somewords.txt  /wordcount/input

2、運作一個mapreduce程式

在HADOOP安裝目錄下,運作一個示例mr程式

cd $HADOOP_HOME/share/hadoop/mapreduce/hadoop jar mapredcue-example-2.6.1.jar wordcount /wordcount/input  /wordcount/output

5 叢集使用初步

5.1 HDFS使用

1、檢視叢集狀态

指令: hdfs dfsadmin –report

可以看出,叢集共有3個datanode可用

也可打開web控制台檢視HDFS叢集資訊,在浏覽器打開http://hdp-node-01:50070/

2、上傳檔案到HDFS

² 檢視HDFS中的目錄資訊

指令: hadoop fs –ls /

² 上傳檔案

指令: hadoop fs -put ./ scala-2.10.6.tgz to /

² 從HDFS下載下傳檔案

指令: hadoop fs -get /yarn-site.xml

5.2 MAPREDUCE使用

mapreduce是hadoop中的分布式運算程式設計架構,隻要按照其程式設計規範,隻需要編寫少量的業務邏輯代碼即可實作一個強大的海量資料并發處理程式

5.2.1 Demo開發——wordcount

1、需求

從大量(比如T級别)文本檔案中,統計出每一個單詞出現的總次數

2、mapreduce實作思路

Map階段:

a) 從HDFS的源資料檔案中逐行讀取資料

b) 将每一行資料切分出單詞

c) 為每一個單詞構造一個鍵值對(單詞,1)

d) 将鍵值對發送給reduce

Reduce階段:

a) 接收map階段輸出的單詞鍵值對

b) 将相同單詞的鍵值對彙聚成一組

c) 對每一組,周遊組中的所有“值”,累加求和,即得到每一個單詞的總次數

d) 将(單詞,總次數)輸出到HDFS的檔案中

4、 具體編碼實作

(1)定義一個mapper類

//首先要定義四個泛型的類型//keyin:  LongWritable    valuein: Text//keyout: Text            valueout:IntWritable public class WordCountMapper extends Mapper<LongWritable, Text, Text, IntWritable>{//map方法的生命周期:  架構每傳一行資料就被調用一次//key :  這一行的起始點在檔案中的偏移量//value: 這一行的内容@Overrideprotected void map(LongWritable key, Text value, Context context) throws IOException, InterruptedException {//拿到一行資料轉換為stringString line = value.toString();//将這一行切分出各個單詞String[] words = line.split(" ");//周遊數組,輸出<單詞,1>for(String word:words){context.write(new Text(word), new IntWritable(1));}}}

(2)定義一個reducer類

//生命周期:架構每傳遞進來一個kv 組,reduce方法被調用一次@Overrideprotected void reduce(Text key, Iterable values, Context context) throws IOException, InterruptedException {//定義一個計數器int count = 0;//周遊這一組kv的所有v,累加到count中for(IntWritable value:values){count += value.get();}context.write(key, new IntWritable(count));}}

(3)定義一個主類,用來描述job并送出job

public class WordCountRunner {//把業務邏輯相關的資訊(哪個是mapper,哪個是reducer,要處理的資料在哪裡,輸出的結果放哪裡。。。。。。)描述成一個job對象//把這個描述好的job送出給叢集去運作public static void main(String[] args) throws Exception {Configuration conf = new Configuration();Job wcjob = Job.getInstance(conf);//指定我這個job所在的jar包// wcjob.setJar("/home/hadoop/wordcount.jar");wcjob.setJarByClass(WordCountRunner.class);wcjob.setMapperClass(WordCountMapper.class);wcjob.setReducerClass(WordCountReducer.class);//設定我們的業務邏輯Mapper類的輸出key和value的資料類型wcjob.setMapOutputKeyClass(Text.class);wcjob.setMapOutputValueClass(IntWritable.class);//設定我們的業務邏輯Reducer類的輸出key和value的資料類型wcjob.setOutputKeyClass(Text.class);wcjob.setOutputValueClass(IntWritable.class);//指定要處理的資料所在的位置FileInputFormat.setInputPaths(wcjob, “hdfs://hdp-server01:9000/wordcount/data/big.txt”);//指定處理完成之後的結果所儲存的位置FileOutputFormat.setOutputPath(wcjob, new Path(“hdfs://hdp-server01:9000/wordcount/output/”));//向yarn叢集送出這個jobboolean res = wcjob.waitForCompletion(true);System.exit(res?0:1);}

5.2.2 程式打包運作

  1. 将程式打包
  2. 準備輸入資料

    vi /home/hadoop/test.txt

    Hello tomHello jimHello kettyHello worldKetty tom

    在hdfs上建立輸入資料檔案夾:

    hadoop fs mkdir -p /wordcount/input

    将words.txt上傳到hdfs上

    hadoop fs –put /home/hadoop/words.txt /wordcount/input

  3. 将程式jar包上傳到叢集的任意一台伺服器上
  4. 使用指令啟動執行wordcount程式jar包

    $ hadoop jar wordcount.jar cn.itcast.bigdata.mrsimple.WordCountDriver /wordcount/input /wordcount/out

  5. 檢視執行結果

    $ hadoop fs –cat /wordcount/out/part-r-00000

視訊第六天

一、hadoop在實際項目中架構分析

項目分析:網站或APP點選流日志資料挖掘

1.京東的日志采集子產品,可以進行轉換率的計算。

https://mercury.jd.com/log.gif?

t=magic.000001

&m=UA-J2011-1

&pin=-

&uid=1413998405

&sid=1413998405|4

&v=je=0 s c = 24 − b i t sc=24-bit sc=24−bitsr=1920x1080 u l = z h − c n ul=zh-cn ul=zh−cncs=GBK$dt=【小米小米8】小米8青春版 鏡面漸變AI雙攝 6GB+64GB 夢幻藍 全網通4G 雙卡雙待 全面屏拍照遊戲智能手機【行情 報價 價格 評測】-京東

h n = i t e m . j d . c o m hn=item.jd.com hn=item.jd.comfl=28.0r0 o s = w i n os=win os=winbr=chrome b v = 58.0.3029.110 bv=58.0.3029.110 bv=58.0.3029.110wb=1539503778 x b = 1539694117 xb=1539694117 xb=1539694117yb=1539700452 z b = 4 zb=4 zb=4cb=6 u s c = w w w . q v t i a o . c o m usc=www.qvtiao.com usc=www.qvtiao.comucp=t_1000865418_e073167d01ff59fa u m d = t u i g u a n g umd=tuiguang umd=tuiguanguct=2bfbf094d74440718cdbec6e21e93fbe c t = 1539700532958 ct=1539700532958 ct=1539700532958lt=0 t a d = − tad=- tad=−t1=magictree t 2 = X t2=X t2=Xp0=%252F%252F*%255B%2540id%253D%2522big-image-3d%2522%255D%252Fdiv%255B2%255D%252Fdiv%252Fdiv%255B2%255D%252Fdiv%255B2%255D%252Fdiv%255B2%255D%252Fdiv%252Ful%252Fli%252Fa%252Fimg%7C%7C%7C%252F%252F*%255B%2540id%253D%2522big-image-3d%2522%255D%252Fdiv%255B2%255D%252Fdiv%252Fdiv%255B2%255D%252Fdiv%255B2%255D%252Fdiv%255B2%255D%252Fdiv%252Ful%252Fli%252Fa%7C%7C%7C%252Fhtml%252Fbody%252Fdiv%255B32%255D%252Fdiv%255B2%255D%252Fdiv%252Fdiv%255B2%255D%252Fdiv%255B2%255D%252Fdiv%255B2%255D%252Fdiv%252Ful%252Fli%252Fa%252F%7C%7C%7C14%7C%7C%7C943x557%7C%7C%7C2210x20001%7C%7C%7C345%7C%7C%7C-%7C%7C%7C-%7C%7C%7Chttps%253A%252F%252Fitem.jd.com%252F100000503295.html%253Fjd_pop%253D2f44003f-61ab-4dfa-8846-1a22a1c99719%2526abt%253D0%2523none%7C%7C%7C-%7C%7C%7Chttp%253A%252F%252Fimg14.360buyimg.com%252Fn5%252Fs54x54_jfs%252Ft1%252F2617%252F6%252F6143%252F237736%252F5ba1f42aE71124526%252Fe242e3e39ec95d66.jpg p i n i d = − pinid=- pinid=−jdv=122270672|www.qvtiao.com|t_1000865418_e073167d01ff59fa|tuiguang|2bfbf094d74440718cdbec6e21e93fbe|1539503779107 d a t a v e r = 0.1 dataver=0.1 dataver=0.1unpl=V2_ZzNtbUEEFEYiCU5RLh9ZAGICFF1LBRZGIVpBAHgZCA1lVEEJclRCFXwURlVnGVkUZwcZWUVcQxxFCEdkexhdBG4EFlhCXnNBdA5EVHwfCQRnVEVZSgATJUULRmR7KVwAZwEaVUtSQhFFOEFkexhdAW4DFVhyjvKlobbFVHMRXTVnBhZcQFFLE3UJdlVLGGxXCduk65ry8gmhosmB844RBWIDEFVKXkYUcThHZHg%3d

&ref=https://search.jd.com/Search?keyword=%E6%89%8B%E6%9C%BA

&enc=utf-8

&wq=%E6%89%8B%E6%9C%BA

&pvid=1dd3228d17b642c5820aeea23fefcfef

&rm=1539700532959

二、hadoop安裝環境準備

三、hadoop叢集安裝

1.通過mobaxterm一次操作批量安裝

四、hadoop生态圈介紹和就業前景

五、hadoop shell指令

1.hdfs指令:

hadoop fs -ls / 啟動一個hdfs用戶端檢視其根目錄

hadoop fs -ls hdfs://hadoop1:9000/

drwxrwx— - root supergroup 0 2018-10-27 15:50 /tmp

hadoop fs -put cls.avi / 将cls.avi上傳到/

2.怎麼檢視hadoop環境配置是否正确?

1.将檔案從Linux上傳到hdfs成功,則配置成功

hadoop fs -put cls.avi / 将cls.avi上傳到/

最終檔案存在hdfs的finalized目錄下。如blk_1073741825。

預設128M才開始分塊。

分塊後,将所有塊拼接起來,在變成原來的檔案。

cat blk_xxx >>tmp.file

cat blk_2xxx >>tmp.file

tar -zxvf tmp.file

hadoop fs -get /hadoop.tar 下載下傳,由用戶端将塊拼接成完整的檔案

3.MapReduce測試:

hadoop fs -mkdir -p /wordcount/input 在hdfs上建立檔案夾

hadoop fs -put a.txt b.txt /wordcount/input 上傳資料

hadoop jar hadoop-mapreduce-examples.jar wordcount /wordcount/input /wordcount/output(目錄不能存在,存回會覆寫)

六、java api操作HDFS檔案系統

maven的pom.xml中添加:hadoop-client.jar

java api操作hdfs會報錯:

解決方案:https://blog.csdn.net/medier/article/details/80572584

環境設定:windows系統需要和Linux上版本相同的編譯版本,或者說将hadoop解壓,在網上找bin和lib少的東西。

設定環境變量HADOOP_HOME。

用戶端取操作hdfs時,是有一個使用者身份的。

預設情況下,hdfs用戶端api會從jvm中擷取一個參數來作為自己的使用者身份。

方法1:運作時添加JVM參數:-DHADOOP_USER_NAME=hadoop1(hdfs所屬使用者)

方法2:代碼實作,FileSystem.get(new URI(“hdfs://hadoop1:9000”),conf,“hadoop1”)

疑問:

hdfs namenode -format 隻是初始化了namenode的工作目錄,而datanode的工作目錄是在datanode啟動後自己初始化的。

1.datanode不識别

namenode在format初始化時會形成兩個辨別:blockPoolId和clusterId,新的datanode加入時,會擷取這兩個辨別作為自己工作目錄的辨別,一旦namenode重新format後,namenode的身份辨別已變,而datanode如果依然持有原來的id,就不能被namenode識别。

解決辦法:在namenode格式化之前删除datanode的工作目錄

2.datanode下線識别

datanode不是一下線就會被namenode認定為下線了,有逾時時間的設定。

如果不設定逾時時間,網絡卡一下,datanode就會認為下線了。

3.finalized目錄找不到

/hddf_data/dfs/data/current/BP-1053187184-192.168.25.128-1540654610136/current/finalized

4.replication數量問題

副本數由用戶端的參數dfs.replication決定。

優先級:用戶端Configuration.set>自定義配置檔案>hdfs的jar包中hdfs.default.xml

5.resourcemanager問題

原因:沒有啟動yarn或者yarn啟動失敗

解決辦法:

secureCRT->chat windown->send chat to all sessions

date -s “2018-10-27 16:24:00” 對所有啟動的Linux修改時間

6.運作報錯說live node為0。?

先停止hadoop,删除指定存儲hadoop臨時檔案的目錄,重新啟動hadoop

stop-all.sh (指令過時,用stop-dfs.sh和stop-yarn.sh代替)

start-dfs.sh

start-yarn.sh

7.可以連接配接到http://192.168.25.128:8088 ,但是連接配接不上http://192.168.25.128:50070。使用

jps指令後并沒有出現Namenode。

重新開機後,重新格式化namenode即可。

作業:

視訊1:

11分鐘作業講解。

視訊2中推薦系統架構圖,自己繪制出來。

作業:自己寫一個netty類似的rpc架構。

模拟ndfs分塊資料的上傳和下載下傳。

視訊第七條

一、用戶端向HDFS寫資料的流程

二、namenode管理中繼資料的機制

學習資料:

https://blog.csdn.net/u011170921/article/details/80437937

https://blog.csdn.net/yucdsn/article/details/78402137