您好,登錄后才能下訂單哦!
這篇文章主要為大家展示了“Sqoop抽數到Hive表異常的示例分析”,內容簡而易懂,條理清晰,希望能夠幫助大家解決疑惑,下面讓小編帶領大家一起研究并學習一下“Sqoop抽數到Hive表異常的示例分析”這篇文章吧。
1.測試環境說明
CDH集群啟用了HDFS的HA
CM和CDH版本為5.14.2
2.問題描述
使用Sqoop抽取MySQL數據到Hive表時,抽取語句正常執行在數據Load到Hive表時報“Operation category READ is not supported in state standby”,執行的Sqoop抽數腳本如下:
export HADOOP_USER_NAME=hive
sqoop import \
--connect "jdbc:mysql://cdh02.fayson.com:3306/cm" \
--username cm \
--password password \
--table HOSTS \
--fields-terminated-by ',' \
--target-dir /user/hive/warehouse/test.db/hive_hosts \
--delete-target-dir \
--hive-import \
--hive-overwrite \
--hive-database test \
--hive-table hive_hosts \
--m 1
(可左右滑動)
在命令行執行上述Sqoop腳本,顯示作業正常執行
此時活動的NameNode節點為cdh02.fayson.com
將NameNode活動節點切換為cdh01.fayson.com
再次執行腳本,執行到“Loading datato table test.hive_hosts”,在這里Fayson在測試時會出現夯死現象很久沒有任何反應。
根據錯誤提示不能move hdfs數據目錄,查看兩個數據目錄都是正常訪問
3.異常分析及處理
1.根據異常提示出現了兩個HDFS訪問路徑,在集群HDFS已啟用了HA,是不應該再出現使用啟用HA之前NameNode節點的HDFS路徑
2.檢查Hive Metastore的庫及表元數據的Location地址,使用如下命令在HIveMetastore服務所在節點執行
[root@cdh01 ~]# export HIVE_CONF_DIR="/var/run/cloudera-scm-agent/process/`ls -1 /var/run/cloudera-scm-agent/process | grep HIVEMETASTORE| sort -n| tail -1`"
[root@cdh01 ~]# HADOOP_CREDSTORE_PASSWORD=$(strings /proc/$(ps -ef|grep HiveMetaStore|grep java|awk '{print $2}')/environ|grep CRED|awk -F= '{print $2}') hive --auxpath /usr/share/java/ --config $HIVE_CONF_DIR --service metatool -listFSRoot
(可左右滑動)
3.經檢查發現Hive Metastore的Location地址指向還是之前NameNode地址,定位問題可能出現在這里,下面我們來更新HiveMetastore NameNode的地址指向。
4.更新Hive Metastore的Location地址有兩種方式一種是在CM界面進行操作,一種是在命令行手動的進行更新
方式一:
登錄Clouder Manager管理界面進入Hive服務,首先停止Hive服務,然后在Hive的服務的菜單列表中執行“更新Hive Metastore NameNode”
更新完成后,啟動Hive服務,在Hive Metastore服務所在節點使用上面的命令進行查看驗證是否更新成功,如果這里更新不成功,可以使用方式二手動更新。
方式二:
在HiveMetastore服務所在節點執行如下命令更新Hive元數據Location地址
[root@cdh01 ~]# export HIVE_CONF_DIR="/var/run/cloudera-scm-agent/process/`ls -1 /var/run/cloudera-scm-agent/process | grep HIVEMETASTORE| sort -n| tail -1`"
[root@cdh01 ~]# HADOOP_CREDSTORE_PASSWORD=$(strings /proc/$(ps -ef|grep HiveMetaStore|grep java|awk '{print $2}')/environ|grep CRED|awk -F= '{print $2}') hive --auxpath /usr/share/java/ --config $HIVE_CONF_DIR --service metatool -updateLocation hdfs://nameservice1 hdfs://cdh01.fayson.com:8020
[root@cdh01 ~]# HADOOP_CREDSTORE_PASSWORD=$(strings /proc/$(ps -ef|grep HiveMetaStore|grep java|awk '{print $2}')/environ|grep CRED|awk -F= '{print $2}') hive --auxpath /usr/share/java/ --config $HIVE_CONF_DIR --service metatool -listFSRoot
(可左右滑動)
檢查更新結果
注意:使用手動方式更新Hie Metastore的NameNode指向時,第二條命令的最后兩個參數,hdfs://nameservice1為更新后值,hdfs://cdh01.fayson.com:8020為更新前的值。
4.Sqoop命令驗證
Sqoop命令正常執行
以上是“Sqoop抽數到Hive表異常的示例分析”這篇文章的所有內容,感謝各位的閱讀!相信大家都有了一定的了解,希望分享的內容對大家有所幫助,如果還想學習更多知識,歡迎關注億速云行業資訊頻道!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。