Java 8
Python 3.7
Scala 2.12.10
Spark 2.4.4
hadoop 2.7.7
hive 2.3.6
mysql 5.7
mysql-connector-java-5.1.48.jarhtml
R 3.1+(能夠不安裝)java
先驗傳送門:https://segmentfault.com/a/11...node
用Ubuntu自帶Python3.7python
下載:https://downloads.lightbend.c...
解壓:mysql
tar -zxvf 下載好的Scala
配置:sql
vi ~/.bashrc export SCALA_HOME=/home/lin/spark/scala-2.12.10 export PATH=${SCALA_HOME}/bin:$PATH 保存退出
激活配置:shell
source ~/.bashrc
提早說明: 若不使用HDFS 和 YARN,整個 Hadoop安裝可忽略,能夠直接安裝spark。
下載:https://archive.apache.org/dist/hadoop/common/
詳細地址: https://archive.apache.org/di...
解壓:apache
tar -zxvf 下載好的 hadoop
配置hadoop:ubuntu
vi ~/.bashrc export HADOOP_HOME=/home/lin/hadoop/hadoop-2.7.7 export PATH=${HADOOP_HOME}/bin:$PATH
激活配置:segmentfault
source ~/.bashrc
進入解壓後的 etc/hadoop (注意這不是根目錄的etc, 而是解壓後的hadoop目錄下的etc)
echo $JAVA_HOME # 複製打印出的路徑 vi hadoop-env.sh: (找到 export JAVA_HOME 這行,並替換爲以下) export JAVA_HOME=/home/lin/spark/jdk1.8.0_181 vi core-site.xml: (hdfs後面爲 主機名:端口號) (主機名就是終端顯示的 @後面的~~~) <property> <name>fs.default.name</name> <value>hdfs://lin:8020</value> </property> vi hdfs-site.xml: (一樣在 <configuration> 之間加入) (/home/lin/hdfs是我已經有的目錄) <property> <name>dfs.namenode.name.dir</name> <value>/home/lin/hdfs/dfs/name</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>/home/lin/hdfs/dfs/data</value> </property>
格式化HDFS:
hadoop namenode -format # 而後去剛纔上面配置的這個路徑裏面是否有新東西出現: /home/lin/hdfs
開啓HDFS (先進入 sbin目錄下, sbin 和 etc bin是同級的, 這裏說的都是hadoop裏的目錄):
./start-dfs.sh # 一路yes, 若讓你輸入密碼, 則輸入對應服務器的密碼。(我這裏都是本機) # 若提示權限錯誤,繼續往下看(支線) sudo passwd root # 激活ubuntu的root用戶,並設置密碼 vi /etc/ssh/sshd_config: PermitRootLogin yes # 任意位置添加這個(此選項以前多是存在的註釋後再添加) service ssh restart
查看HDFS裏面根目錄 / 的內容:
hadoop fs -ls /
向HDFS裏面根目錄 / 中 傳入文件:
echo test > test.txt # 首先,隨便創建一個文件 hadoop fs -put test.txt / # 向HDFS裏面根目錄 / 中 傳入文件 hadoop fs -ls / # 再次查看,就發現有 test.txt 文件了。
從HDFS裏面根目錄 / 中 讀取文件test.txt:
hadoop fs -text /test.txt
從Hadoop WebUI 中查看剛纔的文件是否存在:
http://192.168.0.108:50070/ # 50070是默認端口 點擊右側下拉框 "Utilities" -> "Browser the file system " 清晰可見, 咱們的test.txt 躺在那裏~
仍是etc/hadoop這個目錄:
cp mapred-site.xml.template mapred-site.xml vi mapred-site.xml: <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> vi yarn-site.xml: <property> <name>yarn.nodemanager.services</name> <value>mapreduce_shuffle</value> </property>
啓動 YARN: (仍是 sbin目錄下)
./start-yarn.sh # 一樣,如有密碼,輸入機器的密碼便可
從Hadoop WebUI 中查看YARN:
http://192.168.0.108:8088/
下面要用MySQL, 因此單獨提一下MySQL 的 安裝與配置:
其實MySQL是不須要單獨說的, (但我裝的時候出現了和以往的不一樣經歷), 因此仍是說一下吧:
apt-get install mysql-server-5.7
安裝容易, 不一樣版本的MySQL配置有些雞肋 (我用的是 Ubuntu19):
vi /etc/mysql/mysql.conf.d/mysqld.cnf: bind-address 0.0.0.0 # 找到修改一下便可
修改密碼+遠程鏈接權限 (默認無密碼):
mysql # 啥參數也不用加, 直接就能進去 use mysql update mysql.user set authentication_string=password("123") where user="root"; update user set plugin="mysql_native_password"; flush privileges; select host from user; update user set host ='%' where user ='root'; flush privileges;
重啓服務:
systemctl restart mysql
服務端鏈接測試:
mysql -uroot -p # 密碼 123
遠程鏈接測試 (Navicat):
成功
下載: https://archive.apache.org/di...
解壓:
tar -zxvf apache-hive-2.3.6-bin.tar.gz
配置Hive:
vi ~/.bashrc export HIVE_HOME=/home/lin/hive/apache-hive-2.3.6-bin export PATH=${HIVE_HOME}/bin:$PATH
激活配置:
source ~/.bashrc
Hive其餘相關配置(同理進入hive解壓目錄的 conf目錄中):
cp hive-env.sh.template hive-env.sh vi hive-env.sh: HADOOP_HOME=/home/lin/hadoop/hadoop-2.7.7
Hive-MySQL相關配置(同是在 conf目錄下):
vi hive-site.xml: (特別注意後兩個 <property> 裏面的內容, 本身修改一下用戶名和密碼) <configuration> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true&useSSL=false</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>123</value> </property> </configuration>
下載 jdbc-mysql驅動,並放入Hive中,操做以下 (由於咱們上面hive-site.xml 用的是mysql):
初始化(先確保以前的HDFS和MySQL已經啓動):
schematool -dbType mysql -initSchema # 注意事項1: 這個用命令初始化的 步驟是 Hive 2.+ 才須要作的 # 注意事項2: 初始化一次便可, 屢次初始化,會使得MySQL有重複的鍵. 報錯.
開啓 metastore 服務:
nohup hive --service metastore &
檢測是否初始化(去MySQL表中查看):
use hive show tables; # 如有數據,則說明初始化成功
啓動hive:
hive
建庫, 建表測試 (注意,千萬不要用 user這種關鍵字看成表名等):
HIVE中輸入: create database mydatabase; use mydatabase; create table person (name string); MySQL中查看Hive表的相關信息: select * from TBLS; # 查看全部表結構信息 select * from COLUMNS_V2; # 查看全部列的信息
向Hive導入文件:
vi hive_data.txt: (寫入以下兩行) tom catch jerry every one can learn AI load data local inpath '/home/lin/data/hive_data.txt' into table person;
查詢:
select * from person;
PySpark客戶端配置鏈接代碼:
import findspark findspark.init() from pyspark.sql import SparkSession spark = SparkSession.builder\ .appName("Spark Hive Example")\ .master("local[*]")\ .config("hive.metastore.uris", "thrift://localhost:9083")\ .enableHiveSupport()\ .getOrCreate() spark.sql("use mydatabase").show() spark.sql('show tables').show()
下載:spark-2.4.4-bin-hadoop2.7.tgz:
粗糙傳送門:https://spark.apache.org/downloads.html
詳細傳送門:http://ftp.riken.jp/net/apache/spark/spark-2.4.4/spark-2.4.4-bin-hadoop2.7.tgz
解壓:
tar -zxvf 下載好的spark-bin-hadoop
配置spark:
vi ~/.bashrc export SPARK_HOME=home/lin/spark/spark-2.4.4-bin-hadoop2.7 export PATH=${SPARK_HOME}/bin:$PATH
激活配置:
source ~/.bashrc
pyspark腳本默認調用的是 "python" 這個名, 而ubuntu默認只有"python" 和 "python3"。
因此咱們須要作以下軟鏈接,來使得能夠輸入python, 直接尋找python3.7命令(不要用alias)
ln -s /usr/bin/python3.7 /usr/bin/python
服務端直接輸入命令:
pyspark
或遠程瀏覽器輸入:
http://192.xx.xx.xx:4040/jobs
Jupyter Notebook 這種方式是代替 pyspark 的 console執行方式的。
安裝 Jupyter Notebook:
pip3 install jupyter # 若新環境,須要安pip: apt-get install python3-pip
具體有兩種鏈接方式:
第一種: 配置環境變量(會與 pyspark 的 console 有衝突,這個不建議,略)
第二種: 使用第三方模塊 findspark
pip 安裝 findspark
pip install findspark (Linux服務端)
啓動 Jupyter Notebook 服務(--ip必須指定 0.0.0.0),(--allow-root若不加上可能會報錯)
jupyter notebook --allow-root --ip 0.0.0.0 (Linux服務端)
下面說的是Jupyter Notebook 客戶端(Windows10)
下面兩行代碼必須放在每一個py腳本的第一行
import findspark findspark.init()
而後纔可正常寫其餘代碼
from pyspark import SparkConf, SparkContext sc = SparkContext( master='local[*]', # 下面會講這個參數 appName='myPyspark', # 隨便起名 ) # 這句話,就把 spark啓動起來了,而後才能夠經過瀏覽器訪問了。 4040 # 若是你 python魔法玩的6,那麼提到上下文,你應該會自動想到 with語句 (__enter__,__exit__) # 不寫參數,本地運行,這樣也是能夠的, sc = SparkContext() raw_data = [1,2,3] rdd_data = sc.parallelize(raw_data) # python列表類型 轉 spark的RDD print(rdd_data) raw_data = rdd_data.collect() # spark的RDD 轉回到 python列表類型 print(raw_data) sc.stop() # 關閉spark, 同理,瀏覽器也就訪問不到了。
解釋 SparkContext 的 master參數:
回顧環境問題 並 解釋 "本地" 的概念:
因此, 以前所說的 "本地", 這個詞歸根結底是相對於 Linux來講的,咱們寫代碼一直操做的是Linux。
首先:咱們本身編寫一個包含各類 pyspark-API 的 xx.py 腳本
若是:你用了我上面推薦的 Jupyter Notebook,你會發現文件是.ipynb格式,能夠輕鬆轉.py
最後提交py腳本:
spark-submit --master local[*] --name myspark /xx/xx/myspark.py # 你會發現 --master 和 --name 就是上面咱們代碼中配置的選項,對號入座寫入便可。 # /xx/xx/myspark.py 就是 py腳本的絕對路徑。 餵給spark,讓他去執行。便可。
介紹:
Standalone部署須要同時啓動: master端 slave 端 按着下面配置,最後一條 ./start-all.sh 便可同時啓動。
查看 JAVA_HOME環境變量。
echo $JAVA_HOME # 記住結果,複製出來
進入conf目錄,作一些配置(conf和spark中的bin目錄同級):
cp spark-env.sh.template spark-env.sh vi spark-env.sh:(裏面寫) JAVA_HOME=上面的結果 cp slaves.template slaves vi slaves: (localhost改爲本機機器名) lin
上面配置完畢後,進入sbin目錄(和上面的conf在一個目錄中)
./start-all.sh # 啓動 # 若提示權限錯誤,繼續往下看(支線) sudo passwd root # 激活ubuntu的root用戶,並設置密碼 vi /etc/ssh/sshd_config: PermitRootLogin yes # 任意位置添加這個(此選項以前多是存在的註釋後再添加) service ssh restart
啓動沒報錯,會給你彈出一條絕對路徑的日誌文件 xxx
cat xxx # 便可看見啓動狀態 ,各類日誌信息 其中有幾條信息: Successfully started service 'WorkerUI' on port 8082 (瀏覽器訪問 8082端口) Successfully registered with master spark://lin:7077 (代碼上下文訪問) 其中,有些信息可能未打印出來: 建議瀏覽器中:( 8080-8082 )端口均可以嘗試一下。
輸入命令,查看啓動狀態:
jps # 若同時有 worker 和 master 說明啓動成功
測試:
pyspark --master spark://lin:7077 # WebUI 的 Worker端,就可看見有 一個Job被添加了進來
配置:
echo $HADOOP_HOME # 個人是 /home/lin/hadoop/hadoop-2.7.7 進入spark解壓包的路徑的 conf 目錄中: vi spark-env.sh: ( etc/hadoop前面就是剛纔 echo出來的, etc/hadoop你們都是同樣的) HADOOP_CONF_DIR=/home/lin/hadoop/hadoop-2.7.7/etc/hadoop
啓動spark:
spark-submit --master yarn --name myspark script/myspark.py # 注意 --master 的值改爲了 yarn , 其餘不變。 或者你能夠: pyspark --master yarn 看到啓動成功,說明配置成功
痛點:有時咱們的spark上下文 stop後,WebUI就不可訪問了。
如有未完成,或者歷史信息, 也就看不到了。
這時咱們配置 history 服務就可在 context stop後,仍可查看 未完成job。
預新建一個HDFS目錄myhistory (根路徑下),下面用獲得:
hadoop fs -mkdir /myhistory
首先,進入 spark解壓包的 conf目錄下:
cp spark-defaults.conf.template spark-defaults.conf vi spark-defaults.conf: (解開以下注釋, lin本機名稱, 放在HDFS的根路徑下的myhistory) spark.eventLog.enabled true spark.eventLog.dir hdfs://lin:8020/myhistory vi spark-env.sh: (咱們以前 把template 複製過一次,因此此次直接編輯便可) SPARK_HISTORY_OPTS="-Dspark.history.fs.logDirectory=hdfs://lin:8020/myhistory"
啓動(進入 spark解壓包的 sbin目錄下):
./start-history-server.sh # cat 輸入的信息(日誌文件)。 便可查看是否啓動成功 # WebUI默認是 :http://192.168.0.108:18080/
測試:
瀏覽器中訪問History WebUI: http://192.168.0.108:18080/ 發現啥也沒有: 這是正常的,由於咱們還沒運行 spark context主程序腳本。 --------------------------------------------------------------------- 運行spark-context主程序腳本: spark-submit script/myspark.py # 這個腳本是隨便寫的,沒什麼意義。 不過裏面有個咱們經常使用的一個注意事項!!! # 個人這個腳本的 context 用完,被我 stop了 # 因此咱們訪問不到它的運行狀態的 Spark Context 的 WebUI # 可是咱們剛纔辛辛苦苦配置Spark history 服務,並啓動了它。 # 因此 context的信息,被寫入了咱們剛纔配置的 Spark history 中 # 因此 咱們再次訪問 Spark history WebUI 便可看到有內容被寫入進來。 --------------------------------------------------------------------- 再次訪問History WebUI: http://192.168.0.108:18080/ 你就會發現,裏面有內容了(spark history服務已經爲咱們幹活了)~~~~
環境Ubuntu(CentOS應該也可,不多用)
免密碼登陸設置:
cd ~ ssh-keygen -t rsa -P "" cat .ssh/id_rsa.pub >> .ssh/authorized_keys chmod 600 .ssh/authorized_keys
注意幾種狀況:
你若是是root用戶,那麼你須要切換到 /root/ 執行上面的命令 若是是普通用戶, 那麼你須要切換到 /home/xxx/ 執行上面的命令 這個要特別注意一下,有時候用 sudo -s ,路徑是沒有自動切換的。 須要咱們本身手動切換一下 "家" 路徑
下面內容僅供我的方便, shell不熟,用py腳本了, 你隨意。
vi start.py: (此腳本用於啓動上面配置的 HDFS,YARN,SparkHistory 和 Jupyter Notebook)
import os import subprocess as sub ###### 啓動 HDFS + YARN ############### hadoop_path = os.environ['HADOOP_HOME'] hadoop_sbin = os.path.join(hadoop_path, 'sbin') os.chdir(hadoop_sbin) sub.run('./start-dfs.sh') sub.run('./start-yarn.sh') ###### 啓動 SparkHistory ############## spark_path = os.environ['SPARK_HOME'] spark_sbin = os.path.join(spark_path, 'sbin') os.chdir(spark_sbin) sub.run('./start-history-server.sh') ###### 啓動 Jupyter Notebook ############### # home_path = os.environ['HOME'] home_path = '/home/lin' os.chdir(home_path) sub.run('jupyter notebook --allow-root --ip 0.0.0.0'.split())
以後每次重啓,就不用進入每一個目錄去啓動了。直接一條命令:
sudo python start.py nohup hive --service metastore &
查看本腳本啓動相關的WebUI:
HDFS: http://192.168.0.108:50070/ YARN: http://192.168.0.108:8088/ SparkHistory: http://192.168.0.108:18080/
另附其餘 WebUI:
spark: http://192.168.0.108:4040/
standalone啓動指定的端口(若是你使用的 standalone方式,而不是local,可能用到以下端口):
pyspark --master spark://lin:7077