1. 程式人生 > 其它 >大資料Hadoop-Spark叢集部署知識總結(一)

大資料Hadoop-Spark叢集部署知識總結(一)

大資料Hadoop-Spark叢集部署知識總結

一、啟動/關閉 hadoop

myhadoop.sh start/stop

分步啟動:

第一步:在hadoop102主機上 sbin/start-dfs.sh

第二步:在hadoop103主機上 sbin/start-yarn.sh

分步關閉:

第一步:在hadoop103主機上 sbin/stop-yarn.sh

第二步:在hadoop102主機上 sbin/stop-dfs.sh

myhadoop.sh指令碼檔案內容

#!/bin/bash

if [ $# -lt 1 ]
then
    echo "No Args Input..."
    exit ;
fi

case $1 in
"start")
        echo " =================== 啟動 hadoop叢集 ==================="

        echo " --------------- 啟動 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/start-dfs.sh"
        echo " --------------- 啟動 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/start-yarn.sh"
        echo " --------------- 啟動 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon start historyserver"
;;
"stop")
        echo " =================== 關閉 hadoop叢集 ==================="

        echo " --------------- 關閉 historyserver ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/bin/mapred --daemon stop historyserver"
        echo " --------------- 關閉 yarn ---------------"
        ssh hadoop103 "/opt/module/hadoop-3.1.3/sbin/stop-yarn.sh"
        echo " --------------- 關閉 hdfs ---------------"
        ssh hadoop102 "/opt/module/hadoop-3.1.3/sbin/stop-dfs.sh"
;;
*)
    echo "Input Args Error..."
;;
esac

二、啟動/關閉 zookeeper

myzk.sh start/stop

分步啟動/關閉:

bin/zkServer.sh start

bin/zkServer.sh stop

myzk.sh指令碼檔案內容

for host in hadoop102 hadoop103 hadoop104
do
        case $1 in
        "start")
                ssh $host "source /etc/profile;/opt/module/zookeeper-3.5.7/bin/zkServer.sh $1"
                echo "$host zk is running..."
                echo "-----------------------------"
        ;;

        "stop")
                ssh $host "source /etc/profile;/opt/module/zookeeper-3.5.7/bin/zkServer.sh $1"
                echo "$host zk is stopping..."
                echo "-----------------------------"
        ;;

        *)
                 echo '輸入有誤!'
        ;;
     esac
done

三、啟動Hbase

bin/hbase-daemon.sh start master

bin/hbase-daemon.sh start regionserver

bin/hbase-daemon.sh stop master

bin/hbase-daemon.sh stop regionserver

bin/start-hbase.sh

bin/stop-hbase.sh


四、常見埠號總結

50070:HDFSwebUI的埠號

8485:journalnode預設的埠號

9000:非高可用訪問數rpc埠

8020:高可用訪問資料rpc

8088:yarn的webUI的埠號

8080:master的webUI,Tomcat的埠號

7077:spark基於standalone的提交任務的埠號

8081:worker的webUI的埠號

18080:historyServer的webUI的埠號

4040:application的webUI的埠號

2181:zookeeper的rpc埠號

9083:hive的metastore的埠號

60010:Hbase的webUI的埠號

6379:Redis的埠號

8087:sparkwebUI的埠號 sbin/start-master.sh 檔案可以修改埠號,預設是8080,我改為8081

9092:kafka broker的埠


五、啟動Hive

  1. 啟動metastore hive --service metastore
  2. 啟動hiveserver2 bin/hive --service hiveserver2
  3. 啟動hive (/opt/module/hive):bin/hive

hive建表:

create table test1
(InvoiceNo String, StockCode String, Description String, Quantity String, InvoiceDate String, UnitPrice String, CustomerID String, Country String)
ROW format delimited fields terminated by ',' STORED AS TEXTFILE;

匯入資料:

load data local inpath '/opt/module/data/test.csv' into table test1;

sqoop匯出到mysql:

bin/sqoop export \
--connect jdbc:mysql://hadoop102:3306/company \
--username root \
--password 000429 \
--table sale \
--num-mappers 1 \
--export-dir /user/hive/warehouse/sale \
--input-fields-terminated-by ","

sqoop匯入到hive:

bin/sqoop import \
> --connect jdbc:mysql://hadoop102:3306/company \
> --username root \
> --password 123456 \
> --table staff \
> --num-mappers 1 \
> --hive-impo
> --fields-terminated-by "\t" \
> --hive-overwrite \
> --hive-table  資料庫名.staff_hive

sql建表:

USE `company`;
CREATE TABLE `sale1` (
  `day_id` VARCHAR(50) COLLATE utf8_bin DEFAULT NULL,
  `sale_nbr` VARCHAR(50) COLLATE utf8_bin DEFAULT NULL,
  `cnt` VARCHAR(50) COLLATE utf8_bin DEFAULT NULL,
  `round` VARCHAR(50) COLLATE utf8_bin DEFAULT NULL
) ENGINE=INNODB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

CREATE TABLE `sale2` (
  `day_id` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `sale_nbr` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `cnt` varchar(50) COLLATE utf8_bin DEFAULT NULL,
  `round` varchar(50) COLLATE utf8_bin DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_bin;

六、Spark

  1. 安裝Spark後配置 classpath
$ cd /usr/local/spark
$ cp ./conf/spark-env.sh.template ./conf/spark-env.sh   #拷貝配置檔案

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath) 這個路徑是hadoop的安裝路徑

  1. local模式啟動spark: ./bin/spark-shell
  1. 安裝sbt

    vim ./sbt

    啟動指令碼檔案內容如下:

    #!/bin/bash
    SBT_OPTS="-Xms512M -Xmx1536M -Xss1M -XX:+CMSClassUnloadingEnabled -XX:MaxPermSize=256M" java $SBT_OPTS -jar `dirname $0`/sbt-launch.jar "$@"
    
    

    增加可執行許可權命令: chmod u+x ./sbt

  2. simple.sbt檔案內容(注意版本號和名字)

name := "Simple Project"
version := "1.0"
scalaVersion := "2.11.8"
libraryDependencies += "org.apache.spark" %% "spark-core" % "2.1.0"

七、配置Spark叢集

  1. 主機環境變數
vim ~/.bashrc

export SPARK_HOME=/usr/local/spark
export PATH=$PATH:$SPARK_HOME/bin:$SPARK_HOME/sbin

$ source ~/.bashrc
  1. 從機環境變數
$ cd /usr/local/spark/
$ cp ./conf/slaves.template ./conf/slaves

把預設內容localhost替換成如下內容:
hadoop103
hadoop104
  1. 配置spark-env.sh
  • 注意SPARK_MASTER_IP 要填自己的主機IP地址
  • SPARK_DIST_CLASSPATH和HADOOP_CONF_DIR 都是主機的hadoop路徑
$ cp ./conf/spark-env.sh.template ./conf/spark-env.sh

export SPARK_DIST_CLASSPATH=$(/usr/local/hadoop/bin/hadoop classpath) 
export HADOOP_CONF_DIR=/usr/local/hadoop/etc/hadoop
export SPARK_MASTER_IP=192.168.1.104 

  1. 分發到從機(待分發的路徑最好已經建立好且是空的)
cd /usr/local/
tar -zcf ~/spark.master.tar.gz ./spark
cd ~
scp ./spark.master.tar.gz hadoop103:/home/hadoop
scp ./spark.master.tar.gz hadoop104:/home/hadoop

在從機上進行如下操作:

sudo rm -rf /usr/local/spark/
sudo tar -zxf spark.master.tar.gz -C /usr/local
sudo chown -R 使用者名稱 /usr/local/spark

八、測試執行

  1. 首先啟動hadoop叢集
  2. 啟動spark的主機節點
$ cd /usr/local/spark/
$ sbin/start-master.sh
  1. 啟動spark的從機節點
$ sbin/start-slaves.sh

開啟瀏覽器輸入 http://[主機名]:8087

注意埠號衝突問題:

可以在啟動的指令碼檔案裡修改WEBUI埠號:也就是在sbin/start-master.sh中修改埠號!

九、關閉退出

  • 關閉spark主機
sbin/stop-master.sh
  • 關閉Worker從機
sbin/stop-slaves.sh
  • 關閉hadoop叢集

補充命令:

  • cp命令:cp 原始檔 目標檔案(夾)

負責把一個原始檔複製到目標檔案(夾)下。如下圖所示,複製到資料夾下,則檔名保持不變,複製到檔案中,則檔名變更。如果目標檔案已經存在或目標資料夾中含有同名檔案,則複製之後目標檔案或目標資料夾中的同名檔案會被覆蓋。

  • cp -r 命令 :複製原始檔夾到目標資料夾下

命令格式為:cp -r 原始檔夾 目標資料夾

  • mv 命令:用來移動檔案或者將檔案改名

    格式:mv [選項] 原始檔或目錄 目標檔案或目錄

    選項:

    -b 若需覆蓋檔案,則在覆蓋檔案前先進行備份
    -f 強制覆蓋,若目標檔案已存在同名檔案,使用該引數時則直接覆蓋而不詢問
    -i 若目標檔案已存在同名檔案,則提示詢問是否覆蓋
    -u 若目標檔案已存在需移動的同名檔案,且原始檔比較新,才會更新檔案
    -t 指定mv的目標目錄,改選項使用於移動多個原始檔到一個目錄的情況,此時目標檔案在前,原始檔在後

  • chmod

    sudo chmod -(代表型別)×××(所有者)×××(組使用者)×××(其他使用者)

    0 [000] 無任何許可權
    4 [100] 只讀許可權
    6 [110] 讀寫許可權
    7 [111] 讀寫執行許可權

    sudo chmod 600 ××× (只有所有者有讀和寫的許可權)
    sudo chmod 644 ××× (所有者有讀和寫的許可權,組使用者只有讀的許可權)
    sudo chmod 700 ××× (只有所有者有讀和寫以及執行的許可權)
    sudo chmod 666 ××× (每個人都有讀和寫的許可權)
    sudo chmod 777 ××× (每個人都有讀和寫以及執行的許可權)


  • chown (選項)(引數)

    選項 描述
    -c或——changes 效果類似“-v”引數,但僅回報更改的部分;
    -f或–quite或——silent 不顯示錯誤資訊;
    -h或–no-dereference 只對符號連線的檔案作修改,而不更改其他任何相關檔案;
    -R或——recursive 遞迴處理,將指定目錄下的所有檔案及子目錄一併處理;
    -v或——version 顯示指令執行過程;
    –dereference 效果和“-h”引數相同;
    –help 線上幫助;
    –reference=<參考檔案或目錄> 把指定檔案或目錄的擁有者與所屬群組全部設成和參考檔案或目錄的擁有者與所屬群組相同;
    –version 顯示版本資訊。

當只需要修改所有者時,可使用如下 chown 命令的基本格式:

[root@localhost ~]# chown [-R] 所有者 檔案或目錄

如果需要同時更改所有者和所屬組,chown 命令的基本格式為:

[root@localhost ~]# chown [-R] 所有者:所屬組 檔案或目錄