星期二, 08. 十月 2019 11:01上午html
在三臺(取決於你的機器數)機器上都執行如下操做:java
1)能夠經過apt-get安裝jdk,在命令行下執行 whereis java 來得到java的安裝路徑,或者手動下載jdk的安裝包來進行安裝node
2)在~/.bashrc文件或者/etc/profile文件加入如下參數mysql
export JAVA_HOME=your_pathgit
export CLASSPATH=.:${JAVA_HOME}/lib:${JRE_HOME}/lib export PATH=${JAVA_HOME}/bin:$PATHgithub
3)命令行執行source ~/.bashrc或者source /etc/profile來使得參數生效(對應你所修改的文件) 4)最後執行 java -version 判斷java安裝是否成功web
一樣須要在三臺機器上執行下述操做: 1) 切換到根目錄下,cd ~ 2) 在該目錄下執行ssh-keygen,sql
能夠經過 ssh-copy-id 將祕鑰發給指定機器:shell
ssh-copy-id -i ~/.ssh/id_rsa.pub -p 22 root@172.16.22.132,數據庫
也能夠經過scp將祕鑰發給目標機器,而後在目標機器上新建 authorized_keys ,將祕鑰拷貝到該文件裏:
scp id_rsa.pub root@172.16.22.132:/root/.ssh cd /root/.ssh/ cat id_rsa.pub >> authorized_keys
參考連接: https://www.cnblogs.com/charles1ee/p/11239375.html
hadoop版本是: 2.7.7
此次搭建的是hadoop的徹底分佈式版本,一個master節點,兩個slave節點
1. 修改/etc/hostname文件,改成master(master所在機器),或者slave1(節點1所在機器),slave2(節點2所在機器),修改保存後 重啓機器 ;
2. 在master機器上修改/etc/hosts文件,將域名和ip地址對應起來,以下圖,在修改結束後,slave1和slave2每臺機器上都拷貝一份,或者在原來的基礎上追加也可, 以下圖:
3. 在document目錄下新建workspace, 下述全部的組件都放在該目錄下。解壓hadoop-2.7.7.tar.gz,更名爲hadoop, 對該目錄執行 sudo chown -R 777 hadoop 4. 修改master配置文件
修改hadoop-env.sh文件 export JAVA_HOME=your_path
修改hdfs-site.xml文件
<configuration> <property> <name>dfs.replication</name> <value>2</value> </property> <property> <name>dfs.namenode.name.dir</name> <value>file:/data/hadoop_data/hdfs/namenode</value> </property> <property> <name>dfs.datanode.data.dir</name> <value>file:/data/hadoop_data/hdfs/datanode</value> </property> #設置secondaryNode爲slave1機器 <property> <name>dfs.namenode.secondary.http-address</name> <value>slave1:50090</value> </property> </configuration>
修改core-site.xml文件
<configuration> <property> <name>fs.defaultFS</name> <value>hdfs://master:9000</value> </property> <property> <name>hadoop.tmp.dir</name> <value>/data/hadoop_data/hadoop_tmp</value> </property> </configuration>
修改mapred-site.xml文件
<configuration> <property> <name>mapreduce.framework.name</name> <value>yarn</value> </property> </configuration>
修改yarn-site.xml文件
<configuration> <property> <name>yarn.resourcemanager.hostname</name> <value>master</value> </property> <property> <name>yarn.nodemanager.aux-services</name> <value>mapreduce_shuffle</value> </property> <property> <name>yarn.nodemanager.aux-services.mapreduce.shuffle.class</name> <value>org.apache.hadoop.mapred.ShuffleHandler</value> </property> <property> <name>yarn.resourcemanager.address</name> <value>master:8050</value> </property> <property> <name>yarn.resourcemanager.scheduler.address</name> <value>master:8030</value> </property> <property> <name>yarn.resourcemanager.resource-tracker.address</name> <value>master:8025</value> </property> #使用hadoop yarn運行pyspark時,不添加下面兩個參數會報錯 <property> <name>yarn.nodemanager.pmem-check-enabled</name> <value>false</value> </property> <property> <name>yarn.nodemanager.vmem-check-enabled</name> <value>false</value> </property> #下面三個參數是在配置azkaban時,定時任務一直處於preparing, 緣由是機器內存不夠 <property> <name>yarn.scheduler.maximum-allocation-mb</name> <value>12240</value> </property> <property> <name>yarn.scheduler.minimum-allocation-mb</name> <value>100</value> </property> <property> <name>yarn.nodemanager.resource.memory-mb</name> <value>12240</value> </property> </configuration>
5. 修改slave的配置文件 slave節點與master節點的配置大體相同,只是mapred-site.xml文件與master節點不相同,該配置爲
修改mapred-site.xml文件
<configuration> <property> <name>mapred.job.tracker</name> <value>master:54311</value> </property> </configuration>
6. 日誌文件修改 執行hadoop 命令報WARNING解決辦法 vim log4j.properties添加: log4j.logger.org.apache.hadoop.util.NativeCodeLoader=ERROR
7. 安裝並配置完成後返回master節點格式化namenode
cd /data/hadoop_data/hdfs/namenode
hadoop namenode -format
在master節點執行命令
start-all.sh //啓動
stop-all.sh //關閉
8. 如下是界面圖( 注: 在輸入url時,將hadoop-master-001換成咱們上面主機的域名master )
spark組件能夠經過編譯源代碼來得到,直接從官網下載(http://spark.apache.org/downloads), 點擊下圖方框的連接,找到本身須要的版本。
本次搭建所使用的版本是2.1.0 參考連接: http://dblab.xmu.edu.cn/blog/1086-2/ spark的搭建步驟:
採用源碼編譯獲得支持hive的spark版本;
進入下載目錄,執行命令 tar -zxvf spark-2.1.0.tar.gz 解壓spark的包
進入spark的根目錄,執行命令 ./dev/make-distribution.sh --name 2.7.3 --tgz -Pyarn -Phadoop-2.7 -Dhadoop.version=2.7.7 -Phadoop-provided -Phive -Phive-thriftserver -DskipTests 該命令開始編譯spark的源碼,最終會在根目錄下生成一個tgz的包 spark-2.1.0-bin-2.7.3.tgz
各個參數的解釋以下:
-DskipTests,不執行測試用例,但編譯測試用例類生成相應的class文件至target/test- classes下。
-Dhadoop.version 和-Phadoop: 本機上Hadoop的版本號,不加此參數時hadoop 版本爲1.0.4 。
-Pyarn :是否支持Hadoop YARN ,不加參數時爲不支持yarn 。
-Phive和-Phive-thriftserver:是否在Spark SQL 中支持hive ,不加此參數時爲不支持hive 。
–with-tachyon :是否支持內存文件系統Tachyon ,不加此參數時不支持tachyon 。
–tgz :在根目錄下生成 spark-$VERSION-bin.tgz ,不加此參數時不生成tgz 文件,只生成/dist 目錄。
–name :和–tgz結合能夠生成spark-$VERSION-bin-$NAME.tgz的部署包,不加此參數時NAME爲hadoop的版本號
將 spark-2.1.0-bin-2.7.3.tgz 包拷貝到其中一臺機器上解壓,解壓後的文件夾重命名爲spark,進入該目錄下的/conf文件夾下,這裏是spark的全部配置文件目錄,在這邊須要修改三個文件,分別是slaves, hive-site.xml 和 spark-env.sh文件;
修改~/.bashrc
export SPARK_HOME=/home/benhairui/Documents/workspace/spark export PATH=$PATH:$SPARK_HOME/bin
2. slaves配置文件修改,在該文件末尾添加slave節點,這裏是slave1和slave2.
slave1 slave2
修改spark-env.sh文件
#master實例綁定的ip地址,例如綁定到一個公網的ip export SPARK_MASTER_HOST=master #master實例綁定的端口(默認是7077) export SPARK_MASTER_PORT=7077 #scala的安裝路徑 export SCALA_HOME=/usr/share/scala-2.11 #java的安裝路徑 export JAVA_HOME=/usr/lib/jvm/java-8-openjdk-amd64 #hadoop的安裝路徑 export HADOOP_HOME=/home/benhairui/Documents/workspace/hadoop #hadoop的配置文件路徑 export HADOOP_CONF_DIR=/home/benhairui/Documents/workspace/hadoop/etc/hadoop #該參數的官方解釋: spark使用hadoop客戶端的libraries來訪問HDFS和YARN,spark1.4後「hadoop free」的spark包容許用戶 #鏈接任何的hadoop版本集羣,爲了使用這個版本,須要在spark-env.sh裏修改SPARK_DIST_CLASSPATH, 包含hadoop的jar包 #https://spark.apache.org/docs/latest/hadoop-provided.html,該連接有詳細的參數解釋 export SPARK_DIST_CLASSPATH=$(/home/benhairui/Documents/workspace/hadoop/bin/hadoop classpath)
spark測試 到此,spark的安裝結束,能夠經過下述的方式來簡單的驗證是否安裝成功:
1. 先經過命令行啓動hadoop集羣, start-all.sh
2. 經過命令行啓動spark集羣,start-all.sh spark啓動後master節點比沒啓動jps下多了一個"master"標識,以下:
而slave節點多了一個"worker"標識,以下:
後續的測試,能夠經過spark-shell鏈接spark集羣來,訪問hdfs的數據來進一步確認
./spark-shell --master spark://master:7077
參考連接: https://blog.csdn.net/Dante_003/article/details/72867493
hive的版本是2.3.6
由於hive on spark, 是與spark集羣作交互,所以,須要修改對spark的一些配置文件進行修改,主要涉及到hive-site.xml 和 spark-env.sh。
將spark裏的scala-library-2.11.8.jar、spark-network-common_2.11-2.1.1.jar、spark-core_2.11-2.1.1.jar包,拷貝到hive的lib文件夾中;同時下載mysql 的jdbc鏈接包mysql-connector-java-5.1.38.jar,也將其放入hive的lib包中。
修改hive-site.xml, 同時將其拷貝到spark的conf目錄下
<configuration> <!--jdbc --> <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://192.168.5.111:3306/hive2?createDatabaseIfNotExist=true&useUnicode=true&characterEncoding=UTF-8</value> </property> <property> <name>javax.jdo.option.ConnectionDriverName</name> <value>com.mysql.jdbc.Driver</value> </property> <property> <name>javax.jdo.option.ConnectionUserName</name> <value>benhairui</value> </property> <property> <name>javax.jdo.option.ConnectionPassword</name> <value>Mahairui123**</value> <description>password to use against metastore database</description> </property> <!--spark engine --> <property> <name>hive.execution.engine</name> <value>spark</value> </property> <property> <name>hive.enable.spark.execution.engine</name> <value>true</value> </property> <!--sparkcontext --> <property> <name>spark.master</name> <value>yarn-cluster</value> </property> <property> <name>spark.serializer</name> <value>org.apache.spark.serializer.KryoSerializer</value> </property> <!--下面的根據實際狀況配置 --> <property> <name>spark.executor.instances</name> <value>3</value> </property> <property> <name>spark.executor.cores</name> <value>4</value> </property> <property> <name>spark.executor.memory</name> <value>10240m</value> </property> <property> <name>spark.driver.cores</name> <value>2</value> </property> <property> <name>spark.driver.memory</name> <value>4096m</value> </property> <property> <name>spark.yarn.queue</name> <value>default</value> </property> <property> <name>spark.app.name</name> <value>myInceptor</value> </property> <!--事務相關 --> <property> <name>hive.support.concurrency</name> <value>true</value> </property> <property> <name>hive.enforce.bucketing</name> <value>true</value> </property> <property> <name>hive.exec.dynamic.partition.mode</name> <value>nonstrict</value> </property> <property> <name>hive.txn.manager</name> <value>org.apache.hadoop.hive.ql.lockmgr.DbTxnManager</value> </property> <property> <name>hive.compactor.initiator.on</name> <value>true</value> </property> <property> <name>hive.compactor.worker.threads</name> <value>1</value> </property> <property> <name>spark.executor.extraJavaOptions</name> <value>-XX:+PrintGCDetails -Dkey=value -Dnumbers="one two three" </value> </property> <!--其它 --> <property> <name>hive.server2.enable.doAs</name> <value>false</value> </property> <!-- 指定hive服務暴露出去的端口,默認是10000,有時候會不起做用,能夠直接顯示指定下 <property> <name>hive.server2.thrift.port</name> <value>11000</value> </property> <property> <name>hive.server2.thrift.bind.host</name> <value>localhost</value> </property> --> </configuration>
修改hive-env.sh
export HADOOP_HOME=/home/benhairui/Documents/workspace/hadoop export HIVE_CONF_DIR=/home/benhairui/Documents/workspace/hive/conf export HIVE_AUX_JARS_PATH=/home/benhairui/Documents/workspace/hive/lib
修改~/.bashrc
export HIVE_HOME=/home/benhairui/Documents/workspace/hive export PATH=$PATH:$HIVE_HOME/bin
修改spark的spark-env.sh, 在spark-env.sh裏添加下面配置
export HIVE_CONF_DIR=/home/benhairui/Documents/workspace/hive/conf export SPARK_CLASSPATH=$SPARK_CLASSPATH:/home/benhairui/Documents/workspace/hive/lib/mysql-connector-java-5.1.40-bin.jar
初始化數據庫
/opt/hive/bin/schematool -initSchema -dbType mysql
當出現下面的信息表示初始化成功
Starting metastore schema initialization to 2.0.0
Initialization script hive-schema-2.0.0.mysql.sql
Initialization script completed schemaTool completed
hive測試 啓動hive, 執行命令
hiveserver2 (./hive --service hiveserver2)
用beeline來鏈接hive2
beeline -u jdbc:hive2://localhost:10000
進入命令行後,就可使用hive的命令來進行建立和查詢表等。下面是個人查詢語句和結果:
固然,你也能夠去元信息所在的mysql數據庫中查看metastore的信息。
參考連接: https://blog.csdn.net/weixin_35852328/article/details/79327996
azkaban是一個任務調度系統,本次搭建的也是一個單機版的azkaban。
首先從github上clone azkaban的源碼: git clone https://github.com/azkaban/azkaban.git
azkaban是用gradle管理的,所以,用gradlew對源碼進行編譯和打包, 進入根目錄下,執行下面的命令: ./gradlew clean ./gradlew distTar 這樣,在根目錄下若干文件夾下的build/distribution下能夠看到各個發佈包.
拷貝azkaban-exec-server、azkaban-web-server下的tar包到目標文件夾下,並解壓,分別重命名爲executor和server, 並拷貝./azkaban-db/build/sql文件夾下的sql文件。 azkaban依賴於關係型數據庫,所以找一個mysql, 執行下述的命令: 進入mysql mysql> create database azkaban; mysql> use azkaban; Database changed mysql> source /home/hadoop/azkaban-2.5.0/create-all-sql-2.5.0.sql;
建立ssl配置 命令: keytool -keystore keystore -alias jetty -genkey -keyalg RSA
運行此命令後,會提示輸入當前生成 keystor的密碼及相應信息,輸入的密碼請勞記,信息以下:再次輸入新密碼:
您的名字與姓氏是什麼?
[Unknown]:
您的組織單位名稱是什麼?
[Unknown]:
您的組織名稱是什麼?
[Unknown]:
您所在的城市或區域名稱是什麼?
[Unknown]:
您所在的州或省份名稱是什麼?
[Unknown]:
該單位的兩字母國家代碼是什麼
[Unknown]: CN
CN=Unknown, OU=Unknown, O=Unknown, L=Unknown, ST=Unknown, C=CN 正確嗎?
[否]: y
輸入的主密碼
(若是和 keystore 密碼相同,按回車):
再次輸入新密碼:
完成上述工做後,將在當前目錄生成 keystore 證書文件,將keystore 考貝到 azkaban web服務器根目錄中的bin目錄下.如:cp keystore azkaban/server/bin
配置文件
注:先配置好服務器節點上的時區
一、先生成時區配置文件Asia/Shanghai,用交互式命令 tzselect 便可
二、拷貝該時區文件,覆蓋系統本地時區配置
進入executor/conf目錄下,修改azkaban.properties:
# Azkaban Personalization Settings #服務器名稱 azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index #默認根目錄 web.resource.dir=web/ default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=conf/azkaban-users.xml # Loader for projects executor.global.properties=conf/global.properties azkaban.project.dir=projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=true jetty.maxThreads=25 jetty.port=8081 # Where the Azkaban web server is located azkaban.webserver.url=http://master:8081 # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. # azkaban.webserver.external_hostname=myazkabanhost.com # azkaban.webserver.external_ssl_port=443 # azkaban.webserver.external_port=8081 job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban plugin settings azkaban.jobtype.plugin.dir=plugins/jobtypes # Azkaban mysql settings by default. Users should configure their own username and password. database.type=mysql mysql.port=3306 mysql.host=192.168.5.111 mysql.database=azkaban mysql.user=benhairui mysql.password=Mahairui123** mysql.numconnections=100 # Azkaban Executor settings executor.maxThreads=50 executor.flow.threads=30 executor.port=12321
6.進入server/conf目錄下,修改azkaban.properties:
# Azkaban Personalization Settings azkaban.name=Test azkaban.label=My Local Azkaban azkaban.color=#FF3601 azkaban.default.servlet.path=/index web.resource.dir=web/ default.timezone.id=Asia/Shanghai # Azkaban UserManager class user.manager.class=azkaban.user.XmlUserManager user.manager.xml.file=conf/azkaban-users.xml # Loader for projects executor.global.properties=conf/global.properties azkaban.project.dir=projects # Velocity dev mode velocity.dev.mode=false # Azkaban Jetty server properties. jetty.use.ssl=true jetty.maxThreads=25 jetty.port=8081 jetty.ssl.port=8443 jetty.keystore=keystore jetty.password=mahairui jetty.keypassword=mahairui jetty.truststore=keystore jetty.trustpassword=mahairui # Azkaban Executor settings executor.port=12321 # mail settings mail.sender= mail.host= # User facing web server configurations used to construct the user facing server URLs. They are useful when there is a reverse proxy between Azkaban web servers and users. # enduser -> myazkabanhost:443 -> proxy -> localhost:8081 # when this parameters set then these parameters are used to generate email links. # if these parameters are not set then jetty.hostname, and jetty.port(if ssl configured jetty.ssl.port) are used. # azkaban.webserver.external_hostname=myazkabanhost.com # azkaban.webserver.external_ssl_port=443 # azkaban.webserver.external_port=8081 job.failure.email= job.success.email= lockdown.create.projects=false cache.directory=cache # JMX stats jetty.connector.stats=true executor.connector.stats=true # Azkaban mysql settings by default. Users should configure their own username and password. database.type=mysql mysql.port=3306 mysql.host=192.168.5.111 mysql.database=azkaban mysql.user=benhairui mysql.password=Mahairui123** mysql.numconnections=100 #Multiple Executor azkaban.use.multiple.executors=true #azkaban.executorselector.filters=StaticRemainingFlowSize,MinimumFreeMemory,CpuStatus azkaban.executorselector.filters=StaticRemainingFlowSize,CpuStatus azkaban.executorselector.comparator.NumberOfAssignedFlowComparator=1 azkaban.executorselector.comparator.Memory=1 azkaban.executorselector.comparator.LastDispatched=1 azkaban.executorselector.comparator.CpuUsage=1
注: azkaban.executorselector.filters參數,其中MinimumFreeMemory過濾器會檢查executor主機空餘內存是否會大於6G,若是不足6G,則web-server不會將任務交由該主機執行,能夠將其去掉
7.用戶配置,修改web/conf目錄下的azkaban-users.xml文件。能夠爲其添加用戶,固然不加也是能夠的。
<azkaban-users> <user username="azkaban" password="azkaban" roles="admin" groups="azkaban" /> <user username="metrics" password="metrics" roles="metrics"/> #添加下面這行 <user username="admin" password="admin" roles="admin,metrics" /> <role name="admin" permissions="ADMIN" /> <role name="metrics" permissions="METRICS"/> </azkaban-users>
8.啓動測試
在web下執行
./bin/start-web.sh
在executor下執行
./bin/start-exec.sh
啓動後,在瀏覽器下輸入: https://服務器地址(這是就是master):8443便可訪問。以下圖:
而後輸入用戶名和密碼,即上面azkaban-users.xml裏的用戶名和密碼,便可訪問。 進入後,能夠上傳本身的調度任務,以下圖:
最後,直接點擊"Execute flow", 便可執行本身的依賴任務, 同時,能夠看到相關的DAG圖,以及直接結束後的日誌,以下圖:
注: 在執行任務調度的時候,可能會發生: "executor became inactive before setting up the flow 11"的錯誤,這個是官方的一個bug,咱們須要手動激活executor, 在命令行執行下面的命令:
curl http://${executorHost}:${executorPort}/executor?action=activate
至此,相關組件的搭建已經結束,若有問題,能夠直接留言,很是感謝觀看!