Ubuntu18.04+Docker+Hadoop+Spark分佈式集羣搭建

題前記:因爲課程需求,下面將搭建過程用學術論文的格式寫。其實我並不想寫的,沒辦法,學習作業嘛QAQ。。。)
我的聯繫方式:630056108

Docker上的Hadoop大數據平臺搭建與測試

摘要:Docker是一個開源的應用容器,它可以讓開發者將應用及其所需的依賴包打包到一個可移植的鏡像中,可實現虛擬化。Hadoop是一開源的分佈式系統基礎架構,用於分佈式計算,它可以給用戶提供集羣的高速運算和存儲。本文簡要介紹了Docker和Hadoop的發展史,Docker的架構,Hadoop的模塊組件。並最終一步步搭建了Docker和Hadoop集羣,並進行了測試。
 大數據有四大特點(4V),分爲別爲:Volume(大量)、Variety(多樣)、Velocity(高速)、Veracity(準確性)。新的特點需要使用新的技術,傳統的HPC計算已經難以應付4V的挑戰,相應而生的分佈式計算架構很好地應對了問題。Hadoop便是其中之一的分佈式架構平臺,它有高可靠、高擴展、高效、高容錯、低成本等優點,越來越受到關注與應用。
 本文首先簡述了容器和Docker與Hadoop的發展史,其次概述了Docker與Hadoop的架構模塊,然後詳細描述如何在真機上搭建環境並測試,最後進行總結和展望。

1. 簡介與原理

1.1 Docker介紹

Docker 是一種運行於 Linux 和 Windows 上的軟件,用於創建、管理和編排容器。是在 GitHub 上開發的 Moby 開源項目的一部分。

1.1.1 容器

容器(Coninter)是一種在單個系統上提供多個隔離的系統環境的技術。

1.1.1.1 容器歷史

容器最早提出於1979年的Unix chroot。它是一個 UNIX 操作系統上的系統調用,用於將一個進程及其子進程的根目錄改變到文件系統中的一個新位置,讓這些進程只能訪問到該目錄。這個功能的想法是爲每個進程提供獨立的磁盤空間。
隨後有2000 — FreeBSD Jails、2001 — Linux VServer、2004 — Solaris Containers、2005 — OpenVZ、2006 — Process Containers、2007 — Control Groups、2008 — LXC、2011 — Warden、2013 — LMCTFY、2013 — Docker、2014 — Rocket、2016 — Windows Containers。

1.1.1.2 容器原理

Virtual Machines Vs Containers(圖片來自: Docker Inc.)Linux上的容器是一個可以在單個Linux主機上提供多個相互隔離的操作系統級虛擬技術。與虛擬機技術(Virtual Machine)相比,容器(Container)不需要運行專門的訪客(Guest)操作系統,也不需要模擬指令集。容器共享宿主機(Host)的操作系統內核,並使用訪客操作系統的系統庫來提供所需的功能。因此容器常常要比虛擬機快很多,且更加靈活和低消耗。

容器藉助 Linux 內核的 Namespaces、Apparmor、SELinux 情景模式(profile)、chroot 和
CGroup 等功能來提供類似於虛擬機的隔離環境。Linux
的安全模塊可以確保正確地控制容器對宿主機和內核的訪問,從而避免各種入侵活動。此外,在宿主機上可以運行不同的 Linux
發行版,只要它們運行在同樣的 CPU 架構下。

簡單來說,容器提供的是一種基於各種 Linux 發行版創建容器鏡像的方法、一套管理容器生命週期的 API、與該 API
交互的客戶端工具、保存快照的功能、在宿主機之間遷移容器實例的能力,等等。

1.1.2 Docker

1.1.2.1 Docker歷史

2013年,dotCloud爲尋求新的突破,更名爲Docker,併發布了開源的容器Docker。Docker 引入了一整套容器管理的生態系統,包括分層的鏡像模型,容器註冊庫,友好的 Rest API等。
2016 年微軟也在 Windows 上提供了容器的支持,Docker 可以以原生方式運行在 Windows 上,而不是需要使用 Linux 虛擬機。

1.1.2.2 Docker原理

核心技術有:

  1. namespace:隔離其運行環境,使得容器中的進程看起來就像一個獨立環境中運行一樣。
  2. cgroup:爲系統中所運行任務(進程)的用戶定義組羣分配資源。可以監控管理員配置的 cgroup,拒絕 cgroup 訪問某些資源,甚至在運行的系統中動態配置 cgroup。主要功能包括了:限制資源使用、優先級控制、審計計費、 掛起和恢復進程
  3. 守護進程:直接與主操作系統進行通信、爲各個Docker容器分配資源、將容器與主操作系統隔離,並將各個容器互相隔離。

Docker結構
Docker的基礎結構有(從底層到上層)

  1. 基礎設施:即各種硬件設施和配套的底層軟件
  2. 主操作系統:有Linux、Windows、MacOS等。用於支持Docker運行
  3. 各種依賴:打包在Docker鏡像(Image)之中,容器(Container)依賴於鏡像創建
  4. 應用:應用的源代碼與依賴項打包在Docker鏡像中,不同的應用需要不同的Docker鏡像。不同鏡像之間相互隔離。

1.2 Hadoop簡介

Hadoop更注重代碼向數據遷移,有高容錯性的特點,並且設計用來部署在低廉的(low-cost)硬件上,且它提供高吞吐量(high throughput)。

1.2.1 Hadoop歷史

2003-2004年,Google公佈了部分GFS和MapReduce思想的細節,受此啓發的Doug Cutting等人用2年的業餘時間實現了DFS和MapReduce機制。
2005年,Hadoop作爲Lucene的子項目Nutch的一部分正式引入Apache基金會。
2006年2月被分離出來,成爲一套完整獨立的軟件,起名爲Hadoop。
2008年4月— 贏得世界最快1TB數據排序在900個節點上用時209秒。
2011年12月27日–1.0.0版本釋出。標誌着Hadoop已經初具生產規模。

1.2.2 Hadoop架構

Hadoop分爲兩個模塊,一個是文件系統核心模塊(HDFS),另一個是數據計算核心模塊(MapReduce)。

1.2.2.1 Hadoop的文件系統核心模塊

HDFS採用主從架構(master/slaves)。一個HDFS集羣由一個主節點(Namenode)和一定數量的從節點(Datanodes)組成。Namenode是一箇中心服務器,負責管理文件系統的名字空間(namespace)以及客戶端對文件的訪問。Datanode是一個節點一個,負責節點上的存儲。
從內部看,一個文件其實被分成一個或多個數據塊,這些塊存儲在一組Datanode上。Namenode執行文件系統的名字空間操作。Datanode負責處理文件系統客戶端的讀寫請求,在Namenode的統一調度下進行數據塊的創建、刪除和複製。
secondaryNameNode用於hadoop當中元數據信息的輔助管理。
HDFS架構(來源Hadoop手冊)

1.2.2.2 Hadoop的數據計算核心模塊

Map/Reduce是一個使用簡易的軟件框架,基於它寫出來的應用程序能夠運行在由上千個商用機器組成的大型集羣上,並以一種可靠容錯的方式並行處理上T級別的數據集。
一個作業將數據集分割爲獨立的數據塊,由Map任務以並行的方式處理數據。
MapReduce框架由一個單獨的主作業控制(master JobTracker )和每個集羣節點一個從任務控制(slave TaskTracke)共同組成。master負責調度構成一個作業的所有任務,這些任務分佈在不同的slave上,master監控它們的執行,重新執行已經失敗的任務。而slave僅負責執行由master指派的任務。
ResourceManager:接收用戶的計算請求任務,並負責集羣的資源分配,以及計算任務的劃分
NodeManager:負責執行主節點ResourceManager分配的任務

1.2.3 Hadoop運行流程

Hadoop的MapReduce流程MapReduce分3個階段執行,分別是映射(Map)階段、洗牌(Shuffle)階段、歸約(Reduce)階段。
MapReduce使用操縱鍵值對來處理數據
Map: (K1,V1)list(K2,V2))(K_{1}, V_{1})→list(K_{2}, V_{2}))
Reduce:(K1,list(V2))list(K3,V3))(K_{1}, list(V_{2}))→list(K_{3}, V_{3}))
Shuffle表示數據進行整理(核心機制:對數據進行分區,排序,緩存)即拉取partition,merge,sort,combine
一個MapReduce的工作過程是:

  1. 向集羣服務器發送Map與Reduce任務。
  2. 管理數據傳遞。
  3. 本地計算,減少網絡通數據通信。
  4. 完成任務後,收集數據,將合適的結果返回給Master服務器

2. 環境搭建

Hadoop有三種模式(單機模式,僞分佈模式,全分佈模式)。本文選用全分佈模式搭建集羣。

2.1 本機環境

本文基於的環境是Ubuntu18.04 (amd64)
配置如下:

配件 名稱
CPU Intel Core-I7 8750H @2.2GHz
內存 16 GB
硬盤 160G SSD
顯卡 Nvidia Geforce GTX1060(6G) (有無無影響)

2.2 物料說明

宿主機:Ubuntu18.04
Docker
JDK
Hadoop
Spark
操作路徑爲/home/

2.3 安裝基本環境

  1. 安裝Docker容器
# 刪除可能有的舊版本
sudo apt-get remove docker docker-engine docker.io containerd runc
# 更新apt
sudo apt-get update
# 讓apt支持https
sudo apt-get install apt-transport-https  ca-certificates  curl  gnupg-agent  software-properties-common
# 安裝官方GPG密鑰
curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -
sudo add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/ubuntu $(lsb_release -cs) stable"
// 阿里雲
// curl -fsSL http://mirrors.aliyun.com/docker-ce/linux/ubuntu/gpg | sudo apt-key add -
// sudo add-apt-repository "deb [arch=amd64] http://mirrors.aliyun.com/docker-ce/linux/ubuntu $(lsb_release -cs) stable"
# 安裝docker-ce
sudo apt-get update
sudo apt-get install docker-ce
sudo apt-get install docker-ce-cli
sudo apt-get install containerd.io
  1. 在Docker中拉取Ubuntu18.04鏡像並創建容器
# 拉取ubuntu 18.04鏡像
sudo docker pull ubuntu:18.04
# 查找拉取的鏡像id
sudo docker images
# 啓動一個master容器
sudo docker run -dit -h master <image-id>
# 查找創建的容器id
sudo docker ps
# 進入容器
sudo docker exec -it <container-id> /bin/bash

注:<container-id>和<container-id>需要換成對應的id,及生成的hash,如不清楚,可以查看附錄1中查看Docker中image、container的命令。
綁定端口

sudo docker run -dit -h master -p 9870:9870 -p 8080:8080 -p 4040:4040 -p 8088:8088 -p 8099:8099 <image-id>
  1. 配置master容器
    首先要確認自己已經進入到master容器中
    已經入master節點正確的應該是上面第二行呈現的樣子。如果不正確,請檢測前面運行是否正確,找不到問題,就"sudo docker ps -a"查看已創建的Container,然後"sudo docker start <container id>",最後"sudo docker exec -it <container-id> /bin/bash"
    確認完後,開始配置master容器
# 更新apt
apt-get update
apt-get pagrade
# 安裝net-tools
apt-get install net-tools
# 安裝vim
apt-get install vim
# 安裝ssh,配置無密碼登錄
apt-get install openssh-server
ssh-keygen -t rsa -P ''
回車
cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys
# 查詢是否開啓ssh
/etc/init.d/ssh status
# 開啓ssh
/etc/init.d/ssh start
# 配置開機啓動
vim /etc/rc.local
# 在exit 0語句前加入
/etc/init.d/ssh start
  1. 安裝java
    這裏使用wget下載java,如果本文給出的url無法正確獲取到java文件,請自行查找最新的url予以替換,或直接使用“apt install default-jre”安裝開源版本。
#安裝wget庫
apt install wget
#進入usr/local/src目錄下
cd /usr/local/src
#獲取JDK1.8包
wget --no-check-certificate --no-cookies --header "Cookie: oraclelicense=accept-securebackup-cookie" http://download.oracle.com/otn-pub/java/jdk/8u131-b11/d54c1d3a095b4ff2b6607d096fa80163/jdk-8u131-linux-x64.tar.gz
#解壓jdk-8u161-linux-x64.tar.gz
tar -zxvf jdk-8u131-linux-x64.tar.gz
#重命名爲JDK8
mv jdk1.8.0_131 jdk8
#配置環境變量
vim  ~/.bashrc #打開環境變量配置文件
#增加下面內容到該文件最後
export JAVA_HOME=/usr/local/src/jdk8
export PATH=$JAVA_HOME/bin:$PATH  
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar 
#使環境生效
source ~/.bashrc
  1. 安裝Hadoop
# 安裝hadoop
wget http://mirrors.hust.edu.cn/apache/hadoop/common/hadoop-3.2.0/hadoop-3.2.0.tar.gz
# 解壓
tar -zxvf hadoop-3.2.0.tar.gz
# 重命名
mv  hadoop-3.2.0 hadoop
# 添加環境變量
sudo vim ~/.bashrc
# 添加以下代碼
# hadoop
export HADOOP_HOME=/home/hadoop
export CLASSPATH=$($HADOOP_HOME/bin/hadoop classpath):$CLASSPATH
export HADOOP_COMMON_LIB_NATIVE_DIR=$HADOOP_HOME/lib/native
export PATH=$PATH:$HADOOP_HOME/bin:$HADOOP_HOME/sbin
# 生效
sudo source ~/.bashrc
  1. 配置分佈式hadoop
# 當前路徑爲/home/hadoop/
# 創建三個文件夾備用
mkdir -p hdfs/{data,name,tmp}

修改配置

cd /home/hadoop/etc/hadoop

以下修改XXX,均使用“vim XXX”方式進行編寫,不再贅述
修改hadoop-env.sh

# 在文中只改這一行
export JAVA_HOME=/home/bigdata/jdk1.8

修改core-site.xml

<configuration>
        <property>
                <name>fs.defaultFS</name>
                <value>hdfs://master:9000</value>
        </property>
        <property>
                <name>hadoop.tmp.dir</name>
                <value>/home/bigdata/hdfs/tmp</value>
        </property>
</configuration>

修改hdfs-site.xml

<configuration>
        <property>
                <name>dfs.namenode.name.dir</name>
                <value>/home/bigdata/hadoop/hdfs/name</value>
        </property>
        <property>
                <name>dfs.http.address</name>
                <value>0.0.0.0:50070</value>
        </property>
        <property>
                <name>dfs.datanode.data.dir</name>
                <value>/home/bigdata/hdfs/data</value>
        </property>
        <property>
                <name>dfs.replication</name>
                <value>2</value>
        </property>
</configuration>

修改mapred-site.xml,注意這裏的目錄一定要和上面定義的目錄相統一,否則DataNode會崩潰,無法集羣

<configuration>
    <property>
        <name>mapreduce.framework.name</name>
        <value>yarn</value>
    </property>
    <property>
         <name>yarn.app.mapreduce.am.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop</value>
    </property>
    <property>
        <name>mapreduce.map.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop</value>
    </property>
    <property>
        <name>mapreduce.reduce.env</name>
        <value>HADOOP_MAPRED_HOME=/home/hadoop</value>
    </property>
</configuration>

修改yarn-site.xml

<configuration>
    <property>
        <name>yarn.nodemanager.aux-services</name>
        <value>mapreduce_shuffle</value>
    </property>
    <property>
        <name>yarn.resourcemanager.hostname</name>
        <value>master</value>
    </property>
</configuration>

創建workers文件(Hadoop3將slaves文件改名爲workers了)

touch workers
vim workers
# 添加:
master
slave01
slave02
  1. 格式化HDFS,這裏只需要運行一次,如果運行多了需要刪除工作目錄下HDFS文件,然後重新格式化,詳情自行搜索
cd /home/hadoop/bin
# 該命令只需運行一次
hdfs namenode -format

修改運行文件

cd /home/hadoop/sbin
# 在start-dfs.sh,stop-dfs.sh文件頂部加入以下配置
#!/usr/bin/env bash
HDFS_DATANODE_USER=root
HADOOP_SECURE_SECURE_USER=hdfs
HDFS_NAMENODE_USER=root
HDFS_SECONDARYNAMENODE_USER=root

# 在start-yarn.sh,stop-yarn.sh文件頂部加入以下配置
#!/usr/bin/env bash
YARN_RESOURCEMANAGER_USER=root
HADOOP_SECURE_DN_USER=yarn
YARN_NODEMANAGER_USER=root
  1. 安裝Scala
wget https://downloads.lightbend.com/scala/2.11.8/scala-2.11.8.tgz
tar -zxvf scala-2.11.8.tgz
mv scala-2.11.8 scala
# 添加環境變量
vim ~/.bashrc
# 添加以下代碼
# scala
export SCALA_HOME=/home/scala
export PATH=$PATH:$SCALA_HOME/bin
# 生效
source ~/.bashrc
  1. 安裝Spark
wget http://mirrors.tuna.tsinghua.edu.cn/apache/spark/spark-2.4.3/spark-2.4.3-bin-hadoop2.7.tgz
tar -zxvf spark-2.4.3-bin-hadoop2.7.tgz
mv spark-2.4.3-bin-hadoop2.7 spark

# 添加環境變量
vim ~/.bashrc
# 添加以下代碼
# spark
export SPARK_HOME=/home/spark
export PATH=$PATH:$SPARK_HOME/bin
export PATH=$PATH:$SPARK_HOME/sbin
# 生效
source ~/.bashrc
  1. 配置文件
cd /home/spark/conf
cp spark-env.sh.template spark-env.sh
# spark-env.sh添加以下代碼
export JAVA_HOME=/home/jdk1.8
export HADOOP_HOME=/home/hadoop
export HADOOP_CONF_DIR=/home/hadoop/etc/hadoop
export SCALA_HOME=/home/scala
export SPARK_HOME=/home/spark
export SPARK_MASTER_HOST=master
export SPARK_MASTER_PORT=7077
export SPARK_MASTER_WEBUI_PORT=8099
export SPARK_WORKER_CORES=3
export SPARK_WORKER_INSTANCES=1
export SPARK_WORKER_MEMORY=5G
export SPARK_WORKER_WEBUI_PORT=8081
export SPARK_EXECUTOR_CORES=1
export SPARK_EXECUTOR_MEMORY=1G
export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$HADOOP_HOME/lib/native

cp slaves.template slaves
#  slaves添加以下代碼
master
slave01
slave02
  1. 提交master並克隆出slaves
# 退出容器
exit
# 提交容器更改
sudo docker commit <container-id> ubuntu-hadoop-spark:1.0
# 用剛剛提交的ubuntu-hadoop-spark:1.0創建兩個slave
sudo docker run -dit -h slave01 <image-id>
sudo docker run -dit -h slave02 <image-id>
# 運行兩個slave
sudo docker exec -it slave01 /bin/bash
sudo docker exec -it slave02 /bin/bash

到這裏之後就配置好一個master兩個worker了
13. hosts配置
分別進入master、slave01和slave02,用ifconfig命令找出相應的ip,並分別修改hosts文件

vim /etc/hosts
# 添加
xxx.xxx.xxx.xx1   master 
xxx.xxx.xxx.xx2   slave01
xxx.xxx.xxx.xx3   slave02
  1. 啓動

分別進入三個容器,啓動命令相同

# 啓動hadoop
cd /home/hadoop/sbin
./start-dfs.sh
./start-yarn.sh
# 啓動spark
cd /home/spark/sbin
./start-all/sh
  1. 使用 JPS檢測啓動
    如果集羣不成功,檢測路徑等問題,NameNode一會就消失是format的問題,需要重新格式化
    兩個管理網頁
    http://(master ip):8088/
    http://(master ip):50070/

2.4 測試環境

  1. 首先查看是否運行成功
    這裏是start-all.sh的樣子,也可以分別啓動hdfs和yern在這裏插入圖片描述在這裏插入圖片描述
    這樣是啓動成功了的
  2. 創建目錄
hadoop fs -mkdir /input

然後就能看見創建的目錄了
在這裏插入圖片描述3. 放入文件
我這裏就用hadoop中的LICENSE文件做count了

hadoop fs -put /home/hadoop/LICENSE.txt /input
  1. 放入wordcount程序
hadoop jar /home/hadoop/share/hadoop/mapreduce/hadoop-mapreduce-examples-3.2.0.jar wordcount /input /output

注意與自己的路徑相符和文件名,我這裏是3.2.0.你那裏可能版本不一樣
4. 運行wordcount

wordcount /input /output

結果:
在這裏插入圖片描述6. 將結果下載下來
這裏的ip請填master對應ip,在下載時會自動跳到slave上,請修改成正確的ip
在這裏插入圖片描述在這裏插入圖片描述在這裏插入圖片描述

3. 總結

Docker是一個非常好用的開源容器,它節約了開發、維護、測試時對環境的配置問題,並且很好的解決了虛擬機效率不高的問題。本文主要對它的歷史和架構做了簡單描述,通過在Docker上創建一個Image,並在上搭建了全分佈式Hadoop。Hadoop是運用廣泛的開源分佈式計算平臺,本文主要介紹了它的歷史和架構,並通過搭建它的環境和用一個例子來簡要概述了它的流程。爲我們進一步研究分佈式並行算法和處理分析大數據提供了平臺。

附錄1 Docker常用命令

# 重啓docker服務 
sudo service docker restart
# 關閉docker服務 
sudo service docker stop
# 開啓docker服務
sudo service docker start

# 拉取ubuntu 18.04鏡像
sudo docker pull ubuntu:18.04
# docker create 命令爲指定的鏡像(image)添加了一個可讀寫層,構成了一個新的容器。注意,這個容器並沒有運行。 
sudo docker create <image-id>
# docker run = docker create + docker start
sudo docker run  -p 宿主機端口:docker端口 <image-id> 
# 後臺運行
sudo docker run -dit <image-id>
# 運行直接進入bash,退出後後臺不運行
sudo docker run -it <image-id> /bin/bash 
# 查看本地鏡像
sudo docker images
# 刪除鏡像
sudo docker rmi <image-id>

# docker start命令爲容器文件系統創建了一個進程隔離空間。注意,每一個容器只能夠有一個進程隔離空間。 
docker start <container-id>
# 查看當前運行的容器
docker ps
# 查詢存在的容器
docker ps -a
# 刪除容器
docker rm  <container-id>
# 強制刪除容器
docker rm -f  <container-id>
# 不能夠刪除一個正在運行的容器,會報錯。需要先停止容器。
# 進入容器內部
sudo docker exec -it (container name or id) /bin/bash
# 退出容器
exit
# 容器重命名
docker container rename <container-id> newname

# 提交
docker commit <container-id> <image-name>

注:文中所給<container-id>、<image-id>都要用對應的id進行替換,不要直接照抄。

附頁2 Hadoop常見命令

1、啓動hadoop所有進程
start-all.sh等價於start-dfs.sh + start-yarn.sh
但是一般不推薦使用start-all.sh(因爲開源框架中內部命令啓動有很多問題)。
2、單進程啓動。
sbin/start-dfs.sh
---------------
    sbin/hadoop-daemons.sh --config .. --hostname .. start namenode ...
    sbin/hadoop-daemons.sh --config .. --hostname .. start datanode ...
    sbin/hadoop-daemons.sh --config .. --hostname .. start sescondarynamenode ...
    sbin/hadoop-daemons.sh --config .. --hostname .. start zkfc ...         //
sbin/start-yarn.sh
--------------  
    libexec/yarn-config.sh
    sbin/yarn-daemon.sh --config $YARN_CONF_DIR  start resourcemanager
    sbin/yarn-daemons.sh  --config $YARN_CONF_DIR  start nodemanager
3、常用命令
    1、查看指定目錄下內容
   hdfs dfs –ls [文件目錄]
    hdfs dfs -ls -R   /                   //顯式目錄結構
    eg: hdfs dfs –ls /user/wangkai.pt
   2、打開某個已存在文件
    hdfs dfs –cat [file_path]
   eg:hdfs dfs -cat /user/wangkai.pt/data.txt
  3、將本地文件存儲至hadoop
     hdfs dfs –put [本地地址] [hadoop目錄]
     hdfs dfs –put /home/t/file.txt  /user/t  
  4、將本地文件夾存儲至hadoop
    hdfs dfs –put [本地目錄] [hadoop目錄]
    hdfs dfs –put /home/t/dir_name /user/t
   (dir_name是文件夾名)
  5、將hadoop上某個文件down至本地已有目錄下
     hadoop dfs -get [文件目錄] [本地目錄]
     hadoop dfs –get /user/t/ok.txt /home/t
  6、刪除hadoop上指定文件
     hdfs  dfs –rm [文件地址]
     hdfs dfs –rm /user/t/ok.txt
  7、刪除hadoop上指定文件夾(包含子目錄等)
     hdfs dfs –rm [目錄地址]
     hdfs dfs –rmr /user/t
  8、在hadoop指定目錄內創建新目錄
      hdfs dfs –mkdir /user/t
      hdfs  dfs -mkdir - p /user/centos/hadoop
  9、在hadoop指定目錄下新建一個空文件
    使用touchz命令:
    hdfs dfs  -touchz  /user/new.txt
  10、將hadoop上某個文件重命名
   使用mv命令:
   hdfs dfs –mv  /user/test.txt  /user/ok.txt   (將test.txt重命名爲ok.txt)
  11、將hadoop指定目錄下所有內容保存爲一個文件,同時down至本地
   hdfs dfs –getmerge /user /home/t
  12、將正在運行的hadoop作業kill掉
   hadoop job –kill  [job-id]
  13.查看幫助
  hdfs dfs -help        

參考文獻(章)

[1] The 4 Characteristics of Big Data
[2] Ubuntu18.04 + docker + hadoop + spark 搭建分佈式集羣
[3] Linux 容器技術史話:從 chroot 到未來
[4] Hadoop大數據平臺的搭建 崔文斌等 山東農業大學學報2013, 44( 4 ): 550-555
[5] docker底層原理介紹
[6] Hadoop百度百科
[7] Hadoop官網手冊
[8] Hadoop的shuffle原理和過程圖解
[9] Hadoop常用命令總結

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章