前言
上一篇《HDP 2.5安裝搭建部署》主要寫了一些關於安裝的步驟,但不是每次都能順利的安裝成功了,不可避免總是會報很多錯誤,這裏總結一些錯誤的解決方法。
MySQL
mysql數據庫驅動找不到錯誤
以下命令默認以root用戶運行
# yum install mysql-connector-java -y
# ambari-server setup --jdbc-db=mysql --jdbc-driver=/usr/share/java/mysql-connector-java.jar
Sqoop2
使用基於HDP2.5使用sqoop2抽取數據庫表數據到HDFS上面也會遇到很多問題。這裏記錄一下。
啓動報錯
org.apache.sqoop.common.SqoopException: CLIENT_0004:Unable to find valid Kerberos ticket cache (kinit)
這個是因爲sqoopUrl設置的問題,原來設置爲:
http://master:12000/sqoop
需要改爲
http://master:12000/sqoop/
很坑,就差一個斜槓。
mapreduce
啓動報錯
Caused by: java.net.URISyntaxException: Illegal character in path at index 11: /hdp/apps/${hdp.version}/mapreduce/mapreduce.tar.gz#mr-framework
這個是因爲mapreduce框架路徑設置的問題,進入HDP Web控制檯,點擊右邊的
MapReduce2——>Configs——>Advanced展開mapred-site屬性設置,
找到mapreduce.application.framework.path屬性,將其值由/hdp/apps/${hdp.version}/mapreduce/mapreduce.tar.gz#mr-framework
改爲/usr/hdp/${hdp.version}/hadoop/mapreduce.tar.gz#mr-framework
,
然後將在HDFS上創建對應路徑目錄,如:/usr/hdp/2.6.0.3-8/hadoop/
之後將mapreduce.tar.gz這個文件上傳到該目錄下
最後在重啓服務即可。
如果還不行的話,可以嘗試將hdp.version改爲實際的版本名,並且重啓ambari-server。
yarn
啓動sqoop2報錯
Caused by: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException): User: yarn is not allowed to impersonate lu
這個是因爲hadoop2之後的權限問題導致,本地提交的job想要yarn代理來跑,但是yarn又不允許給主機用戶代理,所以就會報這個錯誤了,進入HDP Web控制檯
HDFS——>Configs——>Advanced
在下面找到Custom core-site展開,添加以下屬性配置,然後重啓服務即可
hadoop.proxyuser.yarn.hosts=*
hadoop.proxyuser.yarn.groups=*
Oozie
問題1
使用Oozie調度sqoop的時候需要注意jobTracker的值不一定就是8021或8032,網上和官方文檔有有一定的誤導性,如果使用的是HDP2.5的話,其集成的是Hadoop 2.x,那麼jobTracker的值其實是yarn.resourcemanager.address
對應的值,在HDP2.5中它是master:8050,在CDH中默認是8032。master爲hadoop ResourceManager host主機名,在hdp web控制檯可通過
YARN——>Configs——>Advanced——>Advanced yarn-site,然後展開找到
yarn.resourcemanager.address
屬性即可。
問題2
Oozie調度Sqoop1的時候mapreduce應用可以成功跑完,但是最後job卻被killed掉了,報錯信息如下:
Launcher ERROR, reason: Main class [org.apache.oozie.action.hadoop.SqoopMain], exit code [1]
很簡短,但是找半天最後很無語。這個問題可能跟MySQL的jdbc驅動版本有關,一開始使用的是5.1.25,如下:
後來全部替換爲5.1.29然後重啓服務就好了。。
替換的地方有如下:
中間數字是hdp的版本,可根據不同的版本號進行調整
/usr/hdp/2.5.3.0/oozie/oozie-server/webapps/oozie/WEB-INF/lib/
/usr/hdp/2.5.3.0/oozie/libext/
/usr/hdp/2.5.3.0/oozie/share/lib/oozie/
/usr/hdp/2.5.3.0/oozie/share/lib/sqoop/
/usr/hdp/2.5.3.0/sqoop/lib/
下面兩個路徑是在hadoop hdfs文件系統上的路徑,需要上傳新的jar包到該路徑
hdfs://e5:8020/user/oozie/share/lib/lib_20170412010303/oozie/
hdfs://e5:8020/user/oozie/share/lib/lib_20170412010303/sqoop/
我這裏jar包是通過Maven來下載的~
問題3
調度啓動sqoop job,出現類找不到異常,報錯信息如下:
Launcher exception: java.lang.ClassNotFoundException: Class org.apache.oozie.action.hadoop.SqoopMain not found
這裏是有一個jar包沒有上傳到hdfs上面,找到下面這個jar包:
/usr/hdp/2.5.3.0/oozie/libserver/oozie-sharelib-sqoop-4.2.0.2.6.0.3-8.jar
然後將其上傳到
hdfs://e5:8020/user/oozie/share/lib/lib_20170412010303/oozie/
然後刷新sharelib或者重啓服務
刷新命令
# oozie admin -oozie http://e5:11000/oozie -sharelibupdate
這裏建議將oozie相關的sharelib jar包都上傳上去,可能後面會有用到,避免再次報這個錯。
HBase
集羣HBase RegionServers服務啓動報錯:
問題1
Caused by: ClassNotFoundException: org.apache.hadoop.fs.FileSystem
這個是因爲沒有將hadoop-common.jar添加到hbase的classpath中,導致的錯誤。
登陸HDP web控制檯,點擊左邊的HBase——>Configs——>Advanced
展開Advanced hbase-env找到# Extra Java CLASSPATH elements. Optional.
在下面添加以下內容:
export HBASE_CLASSPATH=${HBASE_CLASSPATH}:/usr/hdp/current/hadoop-client/hadoop-common.jar
重啓HBase服務即可。
問題2
Caused by: java.lang.ClassNotFoundException: org.apache.hadoop.util.PlatformName
這個問題與上面的類似,同樣是classpath缺少jar包。
步驟如上,添加hadoop-auth.jar即可。
export HBASE_CLASSPATH=${HBASE_CLASSPATH}:/usr/hdp/current/hadoop-client/hadoop-common.jar:/usr/hdp/current/hadoop-client/hadoop-auth.jar
問題3
Caused by: java.io.IOException: No FileSystem for scheme: hdfs
問題原因同上,添加hadoop-hdfs.jar到classpath即可。
export HBASE_CLASSPATH=${HBASE_CLASSPATH}:/usr/hdp/current/hadoop-client/hadoop-common.jar:/usr/hdp/current/hadoop-client/hadoop-auth.jar:/usr/hdp/current/hadoop-hdfs-client/hadoop-hdfs.jar
Hue
hdp集成hue後,oozie Dashboard 打開報錯:
User [hue] not defined as proxyuser
這個需要Oozie添加hue用戶代理,
Oozie——>Configs——>Custom oozie-site
添加以下屬性,重啓Oozie服務即可:
oozie.service.ProxyUserService.proxyuser.hue.groups=*
oozie.service.ProxyUserService.proxyuser.hue.hosts=*