相關文章鏈接
CentOS7安裝CDH 第二章:CentOS7各個軟件安裝和啟動
CentOS7安裝CDH 第四章:CDH的版本選擇和安裝方式
CentOS7安裝CDH 第五章:CDH的安裝和部署-CDH5.7.0
CentOS7安裝CDH 第六章:CDH的管理-CDH5.12
CentOS7安裝CDH 第七章:CDH集群Hadoop的HA配置
CentOS7安裝CDH 第八章:CDH中對服務和機器的添加與刪除操作
1. 靜態資源池
在CDH中,一般情況下不建議使用靜態資源池,在CDH中默認的資源池是動態資源池,為什么不建議使用靜態資源池,原因如下:
假設給NodeManager分配了4G內存,剛剛開始使用的時候使用了3G,一段時間后任務增多,使用到了4G內存,當任務再增多時,靜態資源池會OOM,但動態資源池會從其他地方調集資源過來接着使用。
2. 動態資源池的三種默認使用池
1、使用池已在運行時指定 ,如果該池不存在則加以創建:
hadoop jar -Dmapreduce.job.queuename=etl xxx.jar
假如有資源池就使用etl,沒有創建etl
2、使用池 root.users.[username] ,如果該池不存在則加以創建:
hadoop jar xxxx.jar
以root來提交 root.users.root
以hdfs來提交 root.users.hdfs
3、使用池 root.default:
此規則始終滿足。不會使用后續規則
3. 使用動態資源池
3.1. 動態資源池的其中2種性質
1、根據多個項目一個大的資源池的性質:
A項目(spark streaming),B項目(spark sql/hive)
一個項目:
spark streaming 10%
hive 30%
spark sql 60%
---Dmapreduce.job.queuename=root.sparkstreaming
2、根據一個項目一個大的資源池性質:
生產項目product,開發項目develop, 測試項目qa, 默認資源池
人員:
product1、product2: product
develop1、develop2: develop
qa1、qa2: qa
3.2. 配置動態資源池示例
1、創建資源池product,develop,qa和default,這些都是root的子資源池,其中內存和CPU可以自己設置,但一般不設置,就只設置權重就可以了,記得修改后要刷新動態資源池:
2、創建我們自己的放置規則:
當product1用戶提交hadoop jar xxxx.jar命令時,是使用的哪個資源池?
product1用戶提交的時候,取用戶組是product,拼接root.product
此時判斷root.product池在不在系統配置里?
假如在,就使用root.product,假如不在,第二條規則
3、配置CDH集群的Java Home目錄:
在所有主機界面的配置選項中,使用安裝JDK建議使用tar包解壓安裝,解壓的目錄為/usr/java下,配置好Java Home目錄后請到CDH主界面更新配置,如果不更新那該資源就不會生效。
4、開啟HDFS權限檢查(dfs.permissions):
5、創建用戶組和用戶:
6、開啟資源管理器ACL和設置相應的用戶或者用戶組:
管理ACL的格式為:" 以逗號分隔的用戶列表+空格+以逗號分隔的用戶組列表" ,例如 "user1,user2 group1,group2"
7、不允許未聲明的池:
8、不使用默認隊列時的 Fair Scheduler 用戶:
9、生效配置,重啟服務:
或點擊電源按鈕。
10、提交訪問控制:
對root用戶進行設置:
對其他用戶進行設置,以下以develop舉例,其他類似:
在動態資源池中主要刷新動態資源池就可以生效了,不需要重啟服務。
3.3. 使用動態資源池示例
1、創建用戶和用戶組:
2、在HDFS中創建目錄:
3、給創建的目錄授權:
hdfs dfs -chmod -R 777 /example
4、使用product1用戶上傳一個文件到創建的目錄下:
5、使用product1用戶在HDFS中創建一個文件夾:
6、使用product1用戶創建一個測試文件夾,並上傳到/example/input/目錄下:
7、進入到hadoop的跟目錄下,並找到hadoop自帶的測試jar包:
8、使用product1用戶執行此jar包下的wordcount程序:
hadoop jar \
/opt/cloudera/parcels/CDH/lib/hadoop-mapreduce/hadoop-mapreduce-examples-2.6.0-cdh5.16.1.jar \
wordcount \
/example/input \
/example/output1
錯誤一:/user目錄訪問權限問題,可以通過修改HDFS的/user目錄權限解決
修改前:
修改命令(需使用hdfs用戶來修改):
[hdfs@bigdata01 ~]$ hdfs dfs -chmod -R 777 /user/
修改后:
注:該文件列表中user文件夾可以進行修改,但一些業務數據的文件夾,比如hbase文件夾就不能進行修改了。
錯誤二:用戶根無法向隊列root.default提交應用程序
此錯誤為沒有將任務提交到product資源池中,可以將default資源池池設置成所有用戶都可以訪問即可,還可以進行其他設置,請去百度查看。
3.4. 提交一個spark程序中遇到的問題
1、當在CDH中安裝spark2后,提交spark程序的命令為spark2-submit \;
2、提交任務命令如下:
cd /opt/cloudera/parcels/SPARK2/lib/spark2/examples/jars
spark2-submit \
--master yarn \
--queue $QUEUE_NAME \
--class org.apache.spark.examples.GroupByTest \
spark-examples_2.11-2.2.0.cloudera4.jar
3、錯誤一
17/10/21 13:18:48 INFO spark.SparkContext: Successfully stopped SparkContext
Exception in thread "main" java.lang.IllegalArgumentException:
Required executor memory (1024+384 MB) is above the max threshold (1049 MB) of this cluster!
Please check the values of 'yarn.scheduler.maximum-allocation-mb' and/or 'yarn.nodemanager.resource.memory-mb'.
at org.apache.spark.deploy.yarn.Client.verifyClusterResources(Client.scala:334)
at org.apache.spark.deploy.yarn.Client.submitApplication(Client.scala:168)
需要在yarn中配置yarn.nodemanager.resource.memory-mb參數
4、錯誤二
job的日志 HDFS:
User [dr.who] is not authorized to view the logs for container_e25_1508567262904_0002_01_000001 in log file [i-bsbhj3uw_8041]
此時是沒有權限訪問hdfs中的日志,需要在hdfs的配置文件中查找core-site,然后添加如下配置: