Hive 1.2.1SparkSqoop安装指南
目錄
目錄 1
1.?前言 1
2.?約定 2
3.?服務端口 2
4.?安裝MySQL 2
4.1.?安裝MySQL 2
4.2.?創建Hive元數據庫 4
5.?安裝步驟 5
5.1.?下載Hive?1.2.1二進制安裝包 5
5.2.?安裝Hive 5
5.3.?安裝MySQL-Connector 5
5.4.?修改配置 5
5.4.1.?修改/etc/profile或~/.profile 5
5.4.2.?修改其它配置文件 5
5.4.2.1.?修改hive-env.sh 6
5.4.2.2.?修改hive-site.xml 6
5.4.2.3.?修改hive-log4j.properties 7
5.4.2.4.?修改hive-exec-log4j.properties 7
6.?啟動運行 7
7.?遠程執行HSQL 8
8.?基本命令 8
9.?單點方案 9
10.?和Spark集成 9
11.?和Sqoop集成 9
11.1.?修改sqoop-env.sh 9
11.2.?修改sqoop-site.xml 10
11.3.?復制hadoop的jar文件 10
11.4.?驗證測試 10
12.?常見錯誤 11
13.?相關文檔 14
?
1.?前言
本文的安裝參照《Hive?0.12.0安裝指南》,內容來源于官方的:GettingStarted,將Hive?1.2.1安裝在Hadoop?2.7.1上。本文將Hive配置成Server模式,并且使用MySQL作為元數據數據庫,遠程連接MySQL。
關于Hadoop?2.7.1的安裝,請參見《Hadoop-2.7.1分布式安裝手冊》一文。
2.?約定
本文約定Hadoop被安裝在/data/hadoop/current,將Hive?1.2.1的安裝到目錄/data/hadoop/hive(實際是指向/data/hadoop/hive-1.2.1-bin的軟鏈接)。將MySQL?5.7.10安裝到目錄/data/mysql。在實際安裝部署時,可以指定為其它目錄。
3.?服務端口
| 10000 | hive.server2.thrift.port,執行hiveserver2時會啟動它 |
| 9083 | hive.metastore.uris,執行hive?--service?metastore時會啟動它 |
4.?安裝MySQL
由于單臺MySQL有單點問題,因此實際中需要配置成主備MySQL方式。
4.1.?安裝MySQL
本文MySQL被安裝在172.25.39.166機器上,Hive用MySQL來存儲元數據,因此需要先安裝好MySQL。這里安裝的是最新的MySQL?5.7.10,下載網址為:http://dev.mysql.com/downloads/mysql/,本文選擇是的“Linux?-?Generic”下的“Linux?-?Generic?(glibc?2.5)?(x86,?64-bit),?Compressed?TAR?Archive”,它的二進制安裝包名為mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz。
將二進制安裝包解壓后,可看到名為INSTALL-BINARY的文件,該文件有說明如何安裝MySQL,本文基本參照它進行的。
由于官方提供的二進制安裝包,編譯的時候指定的“--prefix”為“/usr/local/mysql”,所以最好將mysql安裝在/usr/local目錄下,否則安裝過程會容易遇到問題。但建立將數據目錄指定為一個足夠大的分區下的目錄。
當然data目錄也可以為軟鏈接方式到足夠大的分區目錄,并且推薦使用軟鏈接方式,否則在使用mysql命令時,經常需要指定參數“--datadir”,比如mysqld、mysqld_safe和mysql_ssl_rsa_setup等都需要指定“--datadir”。
如果不是安裝在/usr/local/mysql,則需要為mysqld指定--basedir、--character-sets-dir、--language、--lc-messages-dir、--plugin-dir等眾多參數值。
如果不能root用戶安裝,則還需要為mysqld指定--slow-query-log-file、--socket、--pid-file、--plugin-dir和--general-log-file等參數值。
這些參數的默認值,都可以通過執行MySQL的“bin/mysqld?--verbose?--help”查看到。
| #?MySQL安裝目錄為/usr/local/mysql,數據目錄實際為/data/mysql/data #?注意需以root用戶安裝MySQL,如果不能root用戶安裝,容易遇到安裝麻煩 #?并請注意5.7.6之前的版本安裝略有不同! ? #?新建mysql用戶組 groupadd?mysql #?新建mysql用戶,并設置為不能作為linux登錄用戶 useradd?-r?-g?mysql?-s?/bin/false?mysql ? #?進入到mysql安裝目錄 cd?/usr/local #?解壓二進制安裝包 tar?xzf?mysql-5.7.10-linux-glibc2.5-x86_64.tar.gz #?建立易記的、與版本無關的短鏈接 ln?-s?mysql-5.7.10-linux-glibc2.5-x86_64?mysql ? #?進入到mysql目錄 cd?mysql ? #?創建數據目錄 mkdir?-p?/data/mysql/data #?建立數據目錄軟鏈接,讓指向/usr/local/mysql/data指向/data/mysql/data ln?-s?/data/mysql/data?/usr/local/mysql/data ? #?設置目錄權限 chmod?770?/data/mysql/data chown?-R?mysql?/data/mysql/data chgrp?-R?mysql?/data/mysql/data chown?-R?mysql?. chgrp?-R?mysql?. ? #?初始化(成功執行完mysqld后,會提供一個臨時的root密碼,請務必記住) #?另外需要注意臨時密碼會過期,所以需要盡量修改root密碼 #?進入MySQL?Cli后,執行下列命令即可修改成新密碼: #?SET?PASSWORD?FOR?'root'@'localhost'?=?PASSWORD('new_password'); bin/mysqld?--initialize?--user=mysql?--explicit_defaults_for_timestamp #?安裝和配置SSL bin/mysql_ssl_rsa_setup ? #?重置目錄權限 chown?-R?root?. chown?-R?mysql?/data/mysql/data ? #?啟動mysql bin/mysqld_safe?--user=mysql?& ? #?查看端口是否已起來(不修改配置和不指定參數--port,默認端口號為3306) netstat?-lpnt|grep?3306 ? #?停止MySQL support-files/mysql.server?stop ? #?設置mysql隨著系統自啟動 cp?support-files/mysql.server?/etc/init.d/mysql.server |
?
以上使用的都是MySQL默認配置,如果需要定制化,可以通過修改文件my.cnf來達成。MySQL?5.7.10不帶my.cnf,只有個support-files/my-default.cnf。
通過執行命令“support-files/my-default.cnf”,可以了解到MySQL搜索my.cnf的順序依次為:/etc/my.cnf?/etc/mysql/my.cnf?/usr/local/mysql/etc/my.cnf?~/.my.cnf,這樣可以復制一份my-default.cnf,然后再修改,如:cp?support-files/my-default.cnf?/etc/my.cnf。
4.2.?創建Hive元數據庫
創建數據庫hive:
| create?database?if?not?exists?hive; |
?
創建數據庫用戶hive:
| create?user?hive?identified?by?'hive2016'; |
?
授權可以訪問數據庫hive的IP和用戶,其中localhost的實際IP為172.25.39.166:
| grant?all?on?hive.*?to?'hive'@'localhost'?identified?by?'hive2016'; grant?all?on?hive.*?to?'hive'@'172.25.39.166'?identified?by?'hive2016'; grant?all?on?hive.*?to?'hive'@'172.25.40.171'?identified?by?'hive2016'; |
?
進入hive數據庫:
1)?本機進入:mysql?-uhive?-phive2016
2)?非本機進入:mysql?-uhive?-h172.25.39.166?-phive2016
?
注意如果配置了MySQL主主同步或其它同步,則如果同步的庫不包含mysql,則創建庫和用戶需要分別在不同的MySQL上操作一次。
5.?安裝步驟
5.1.?下載Hive?1.2.1二進制安裝包
下載網址:http://hive.apache.org/downloads.html,下載后的包名為:apache-hive-1.2.1-bin.tar.gz,然后將apache-hive-1.2.1-bin.tar.gz上傳到/data目錄下。
5.2.?安裝Hive
1)?切換到/data目錄:cd?/data
2)?解壓二進制安裝包:tar?xzf?apache-hive-1.2.1-bin.tar.gz
3)?改個名:mv?apache-hive-1.2.1-bin?hive-1.2.1
4)?建立軟鏈接:ln?-s?hive-1.2.1?hive
5.3.?安裝MySQL-Connector
MySQL-Connector下載網址:http://dev.mysql.com/downloads/connector/。
選擇“Connector/J”,接著選擇“Platform?Independent”,本文下載的是“mysql-connector-java-5.1.38.tar.gz”。
壓縮包“mysql-connector-java-5.1.38.tar.gz”中有個mysql-connector-java-5.1.38-bin.jar,解壓后將mysql-connector-java-5.1.38-bin.jar上傳到Hive的lib目錄下,這個是MySQL的JDBC驅動程序。
5.4.?修改配置
5.4.1.?修改/etc/profile或~/.profile
設置環境變量HIVE_HOME,并將Hive加入到PATH中:
| export?HIVE_HOME=/data/hadoop/hive export?PATH=$HIVE_HOME/bin:$PATH |
5.4.2.?修改其它配置文件
進入/data/hadoop/hive/conf目錄,可以看到如下:
| hadoop@VM-40-171-sles10-64:~/hive/conf>?ls hive-default.xml.template??hive-exec-log4j.properties.template hive-env.sh.template???????hive-log4j.properties.template |
?
可以看到4個模板文件,復制并重命名成配置文件:
| cp?hive-env.sh.template?hive-env.sh cp?hive-default.xml.template?hive-site.xml cp?hive-log4j.properties.template?hive-log4j.properties cp?hive-exec-log4j.properties.template?hive-exec-log4j.properties |
5.4.2.1.?修改hive-env.sh
如果之前沒有設置好HADOOP_HOME環境變量,則可在hive-env.sh中,進行設置:
| HADOOP_HOME=/data/hadoop/current |
5.4.2.2.?修改hive-site.xml
1)?修改javax.jdo.option.ConnectionURL
將值設置為:
jdbc:mysql://172.25.39.166:3306/hive?useSSL=false,
注意加上“useSSL=false”,另外還有諸于參數characterEncoding=UTF-8等。
2)?修改javax.jdo.option.ConnectionDriverName
將值設置為:com.mysql.jdbc.Driver。
3)?修改javax.jdo.option.ConnectionUserName
將值設置為訪問hive數據庫的用戶名hive:<value>hive</value>。
4)?修改javax.jdo.option.ConnectionPassword
將值設置為訪問hive數據庫的密碼:<value>hive2016</value>。
5)?修改hive.metastore.schema.verification
該值試情況進行修改。
6)?修改hive.zookeeper.quorum
將值設置為:10.12.154.77,10.12.154.78,10.12.154.79,ZooKeeper被安裝在這三臺機器上。建議使用機器名,而不是IP,因為機器退役可能導致IP變換。
7)?修改hive.metastore.uris
將值設置為:thrift://172.25.40.171:9083,9083為Hive元數據的RPC服務端口。
8)?修改hive.metastore.warehouse.dir
將值設置為:/data/hadoop/hive/warehouse,注意啟動前,需要創建好該目錄(mkdir?/data/hadoop/hive/warehouse)。
9)?修改hive.server2.thrift.bind.host
該值默認為localhost,如果需要在其它機器遠程訪問Hive,則需要將它改成IP地址,本文將它改成172.25.40.171,可以考慮為0.0.0.0。
10)?修改hive.exec.scratchdir
這一步可選,可直接使用默認值/tmp/hive。設置為:/data/hadoop/hive/tmp或其它,并創建好目錄。
11)?修改hive.exec.local.scratchdir
設置為:/data/hadoop/hive/tmp/scratch或其它,并創建好目錄。
12)?修改hive.downloaded.resources.dir
設置為:/data/hadoop/hive/tmp/resources或其它,并創建好目錄。
13)?修改hive.querylog.location
設置為:/data/hadoop/hive/tmp/querylog或其它,并創建好目錄。
14)?修改hive.server2.logging.operation.log.location
設置為:/data/hadoop/hive/tmp/operation或其它,并創建好目錄。
5.4.2.3.?修改hive-log4j.properties
修改日志文件存放目錄,將日志目錄由/tmp/${user.name}改為/data/hadoop/hive/logs:
| hive.log.dir=/data/hadoop/hive/logs |
?
然后創建好目錄/data/hadoop/hive/logs。
5.4.2.4.?修改hive-exec-log4j.properties
修改日志文件存放目錄,將日志目錄由默認的/tmp/${user.name}改為/data/hadoop/hive/logs/exec:
| hive.log.dir=/data/hadoop/hive/logs/exec |
?
然后創建好目錄/data/hadoop/hive/logs/exec。
6.?啟動運行
1)?初始化metastore
安裝配置好后,在啟動Hive服務端之前,需要在服務端執行一次“schematool?-dbType?mysql?-initSchema”,以完成對metastore的初始化。
如果配置了MySQL主主同步,則只需要一臺hive機器上執行,重復執行會報錯。
2)?啟動metastore
執行命令:hive?--service?metastore?&
3)?啟動Hive服務
執行:hiveserver2?&。
4)?進入Hive命令行操作界面(類似于mysql)
執行:hive
?
除了使用hive命令行操作界面之外,hiveserver2還提供了beeline(hive是用戶名,hive2016是密碼,可以從HiveServer2+Clients獲得更多信息):
| hadoop@VM-40-171-sles10-64:~/hive/bin>?./beeline? Beeline?version?1.2.1?by?Apache?Hive beeline>?!connect?jdbc:hive2://172.25.40.171:10000?hive?hive2016?org.apache.hive.jdbc.HiveDriver Connecting?to?jdbc:hive2://172.25.40.171:10000 SLF4J:?Class?path?contains?multiple?SLF4J?bindings. SLF4J:?Found?binding?in?[jar:file:/data/hadoop/hadoop-2.7.1/share/hadoop/common/lib/slf4j-log4j12-1.7.5.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:?Found?binding?in?[jar:file:/data/hadoop/hive-1.2.1-bin/lib/slf4j-log4j12-1.6.1.jar!/org/slf4j/impl/StaticLoggerBinder.class] SLF4J:?See?http://www.slf4j.org/codes.html#multiple_bindings?for?an?explanation. SLF4J:?Actual?binding?is?of?type?[org.slf4j.impl.Log4jLoggerFactory] Connected?to:?Hive?(version?1.2.1) Driver:?Hive?(version?1.2.1) Transaction?isolation:?TRANSACTION_REPEATABLE_READ 0:?jdbc:hive2://172.25.40.171:10000>?select?*?from?invites?limit?2; +------+----------+-------+ |?foo??|???bar????|??ds???| +------+----------+-------+ |?474??|?val_475??|?2014??| |?281??|?val_282??|?2014??| +------+----------+-------+ 2?rows?selected?(1.779?seconds) 0:?jdbc:hive2://172.25.40.171:10000>? |
7.?遠程執行HSQL
將hive/bin、hive/lib、hive/conf和hive/examples打包,如:tar?czf?hive-bin.tar.gz?hive/bin?hive/lib?hive/conf?hive/examples。
然后將hive-bin.tar.gz上傳到其它機器,借助beeline即可遠程執行HSQL(用hive可能會遇到問題,本文在操作時,使用hive,在執行HSQL時總會卡住,日志也沒有記錄特別原因,暫未去定位)。
8.?基本命令
以下內容來自官網(GettingStarted),注意命令不區分大小寫:
| CREATE?TABLE?pokes?(foo?INT,?bar?STRING); CREATE?TABLE?invites?(foo?INT,?bar?STRING)?PARTITIONED?BY?(ds?STRING); SHOW?TABLES; SHOW?TABLES?'.*s'; DESCRIBE?invites; DROP?TABLE?pokes; |
?
Hive的安裝目錄下有個examples子目錄,存儲了示例用到的數據文件等。測試往表invites中加載數據,將文件../examples/files/kv2.txt加載到表invites中:
| LOAD?DATA?LOCAL?INPATH?'../examples/files/kv2.txt'?OVERWRITE?INTO?TABLE?invites?PARTITION?(ds='2014'); |
?
可以通過“select?*?from?invites;”來檢驗加載情況,或者執行“select?count(1)?from?invites;”。
9.?單點方案
可通過部署兩個hive來解決單點,元數據庫采用MySQL,MySQL和hive部署在相同機器上,兩個MySQL配置成主主同步。
hive為一主一熱備的方式,最好保證同一時刻只有一個hive提供服務,雖然很多情況下,兩個hive都提供服務也能正常工作。
10.?和Spark集成
Spark集成Hive非常簡單,只需以下幾步:
1)?在spark-env.sh中加入HIVE_HOME,如:export?HIVE_HOME=/data/hadoop/hive
2)?將Hive的hive-site.xml和hive-log4j.properties兩個文件復制到Spark的conf目錄下。
?
完成后,再次執行spark-sql進入Spark的SQL?Cli,運行命令show?tables即可看到在Hive中創建的表。
示例:
./spark-sql?--master?yarn?--driver-class-path?/data/hadoop/hive/lib/mysql-connector-java-5.1.38-bin.jar
11.?和Sqoop集成
以sqoop-1.4.6.bin__hadoop-2.0.4-alpha為例,支持增量導入,不但可以將數據導入到Hive中,還可以往HBase導數據,也可以將數據從DB導入到HDFS存儲。總之,Sqoop功能十分強大,但這里僅簡單介紹。
從Sqoop的官網(下載網址:http://www.apache.org/dyn/closer.lua/sqoop/1.4.6)下載sqoop-1.4.6.bin__hadoop-2.0.4-alpha.tar.gz。
解壓,然后進入Sqoop的conf目錄,完成以下修改即可:
11.1.?修改sqoop-env.sh
復制一份sqoop-env-template.sh,命名為sqoop-env.sh。在sqoop-env.sh中設置以下環境變量:
1)?HADOOP_COMMON_HOME
值為Hadoop的安裝目錄,示例:export?HADOOP_COMMON_HOME=/data/hadoop
2)?HADOOP_MAPRED_HOME
值為hadoop-common-*.tar文件所在目錄,位于Hadoop安裝目錄之下。
示例:export?HADOOP_MAPRED_HOME=/data/hadoop/share/hadoop/common
3)?HBASE_HOME
值為HBase的安裝目錄,示例:export?HBASE_HOME=/data/hbase
4)?HIVE_HOME
值為Hive的安裝目錄,示例:export?HIVE_HOME=/data/hive
5)?ZOOCFGDIR
值為Zookeeper的配置目錄,示例:export?ZOOCFGDIR=/data/zookeeper/conf
11.2.?修改sqoop-site.xml
復制一份sqoop-site-template.xml,命名為sqoop-site.xml,可不做任何修改。
11.3.?復制hadoop的jar文件
這一步可先不操作,但如果遇到“Please?check?your?configuration?for?mapreduce.framework.name?and?the?correspond?server?addresses”錯誤,則需要將hadoop-mapreduce-client-common-2.7.1.jar,hadoop-mapreduce-client-core-2.7.1.jar、hadoop-mapreduce-client-jobclient-2.7.1.jar和hadoop-mapreduce-client-shuffle-2.7.1.jar復制到sqoop的lib目錄。
11.4.?驗證測試
1)?列出MySQL數據庫
| ./sqoop?list-databases?--connect?jdbc:mysql://127.0.0.1:3306/?--username?zhangsan?--password?zhangsan2016 |
?
2)?根據MySQL表創建Hive表
| ./sqoop?create-hive-table?--connect?jdbc:mysql://127.0.0.1:3306/test?--username?zhangsan?--password?zhangsan2016?--table?t_test?--hive-table?t_test_2016 |
?
如果Hive表需要分區,可以通過參數--hive-partition-key和--hive-partition-value?來指定。
?
如果需覆蓋已存在的Hive表,加上參數“--hive-overwrite”即可。“--hive-partition-key”值為分區名,默認為string型,“–hive-partition-value”為分區的值。
?
3)?將數據從MySQL導入到Hive
| ./sqoop?import?--connect?jdbc:mysql://127.0.0.1:3306/test?--username?zhangsan?--password?'zhangsan2016'?--table?t_test?--hive-import?-m?6?--hive-table?t_test_2016?--direct |
?
注意為運行sqoop的機器授權訪問MySQL,可能也需要為運行MapReduce的機器授權。
建議帶上參數“--direct”,表示使用快速模式,比如它會利用MySQL的工具mysqldump導出數據。
“-m”表示啟用多少個map并行導入數據,默認是4個,最好不要將數字設置為高于集群的最大Map數。
“–table”用來指定要導入的DB表名,“--hive-import”表示從DB導入數據到Hive。還可以借助參數“--query”使用SQL有條件的從DB中導出。
?
如果需要指定字符集,使用參數“--default-character-set”,如:--default-character-set?UTF-8。
4)?增量從MySQL往Hive導數據
| ./sqoop?import?--connect?jdbc:mysql://127.0.0.1:3306/test?--username?zhangsan?--password?'zhangsan2016'??--table?t_test?--hive-import?--hive-table?t_test_2016?--split-by?f_id?--incremental?lastmodified?--check-column?f_donate_time?--last-value?'2016-03-01?00:00:00' |
建議增量時,不要帶參數“-m”,因為如指定了“-m”,對應的導入會在hdfs上差生相應的中間結果,當下一次再次執行job時,則會報“output?directory?is?exist”錯誤。
12.?常見錯誤
1)?Please?check?your?configuration?for?mapreduce.framework.name?and?the?correspond?server?addresses
在運行sqoop從MySQL往Hive導數據時,如果報這個錯誤,一是要檢查mapred-site.xml中的“mapreduce.framework.name”是否為yarn。其次可以嘗試將hadoop的share/hadoop/mapreduce目錄下的四個文件:hadoop-mapreduce-client-common-2.7.1.jar,hadoop-mapreduce-client-core-2.7.1.jar、hadoop-mapreduce-client-jobclient-2.7.1.jar和hadoop-mapreduce-client-shuffle-2.7.1.jar復制到sqoop的lib目錄下。
2)?TIMESTAMP?with?implicit?DEFAULT?value?is?deprecated
執行MySQL的“bin/mysqld?--initialize?--user=mysql”時報的錯誤。
原因是從MySQL?5.6版本開始,timestamp的默認值已被標為deprecated,即如果類型為timestamp的字段,如果沒有明確聲明默認值為NULL,則默認為NOT?NULL。如果設置timestamp字段為NULL,則自動存儲當前的timestamp。
3)?Can't?find?error-message?file?'/usr/local/mysql/share/errmsg.sys'
執行MySQL的“bin/mysqld?--initialize?--user=mysql?--explicit_defaults_for_timestamp”時報的錯誤。
這可能是因為之前有執行過,導致data目錄不為空,通過“bin/mysqld?--verbose?--help|grep?datadir”可以查看到默認的數據目錄為/var/lib/mysql/。需要保證/var/lib/mysql/目錄為空。或者通過指定參數--datadir改變數據目錄,如“bin/mysqld?--initialize?--user=mysql?--explicit_defaults_for_timestamp?--datadir=/data/mysql/data”。
4)?Can't?find?error-message?file?'/usr/local/mysql/share/errmsg.sys'
對于錯誤:
Can't?find?error-message?file?'/usr/local/mysql/share/errmsg.sys'.?Check?error-message?file?location?and?'lc-messages-dir'?configuration?directive.
從官網下載的MySQL默認安裝目錄為/usr/local/mysql,如果實際為其它目錄,則建議通過參數--basedir指定,否則會遇到不少安裝問題。通過執行“bin/mysqld?--verbose?--help|grep?basedir”即可看到“--basedir”的默認值為/usr/local/mysql/。
5)?Failed?to?connect?to?the?MetaStore?Server
如果運行hiveserver2,遇到下列錯誤后,推薦打開DEBUG日志級別,以更查看更詳細的信息,將日志配置文件hive-log4j.properties中的“hive.root.logger=WARN,DRFA”改成“hive.root.logger=DEBUG,WARN,DRFA”即可。
| 2014-04-23?06:00:04,169?WARN??hive.metastore?(HiveMetaStoreClient.java:open(291))?-?Failed?to?connect?to?the?MetaStore?Server... 2014-04-23?06:00:05,173?WARN??hive.metastore?(HiveMetaStoreClient.java:open(291))?-?Failed?to?connect?to?the?MetaStore?Server... 2014-04-23?06:00:06,177?WARN??hive.metastore?(HiveMetaStoreClient.java:open(291))?-?Failed?to?connect?to?the?MetaStore?Server... 2014-04-23?06:00:07,181?WARN??hive.metastore?(HiveMetaStoreClient.java:open(291))?-?Failed?to?connect?to?the?MetaStore?Server... 2014-04-23?06:00:08,185?WARN??hive.metastore?(HiveMetaStoreClient.java:open(291))?-?Failed?to?connect?to?the?MetaStore?Server... 2014-04-23?06:00:09,194?ERROR?service.CompositeService?(CompositeService.java:start(74))?-?Error?starting?services?HiveServer2 org.apache.hive.service.ServiceException:?Unable?to?connect?to?MetaStore! ????????at?org.apache.hive.service.cli.CLIService.start(CLIService.java:85) ????????at?org.apache.hive.service.CompositeService.start(CompositeService.java:70) ????????at?org.apache.hive.service.server.HiveServer2.start(HiveServer2.java:73) ????????at?org.apache.hive.service.server.HiveServer2.main(HiveServer2.java:103) ????????at?sun.reflect.NativeMethodAccessorImpl.invoke0(Native?Method) ????????at?sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ????????at?sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ????????at?java.lang.reflect.Method.invoke(Method.java:483) ????????at?org.apache.hadoop.util.RunJar.main(RunJar.java:212) |
?
修改后,再次運行hiveserver2,日志變詳細了,猜測是metastore沒有起來,可以通過執行“hive?--service?metastore”來啟動metastore。
| 2014-04-23?06:04:27,053?INFO??hive.metastore?(HiveMetaStoreClient.java:open(244))?-?Trying?to?connect?to?metastore?with?URI?thrift://172.25.40.171:9083 2014-04-23?06:04:27,085?WARN??hive.metastore?(HiveMetaStoreClient.java:open(288))?-?Failed?to?connect?to?the?MetaStore?Server... org.apache.thrift.transport.TTransportException:?java.net.ConnectException:?拒絕連接 ????????at?org.apache.thrift.transport.TSocket.open(TSocket.java:185) ????????at?org.apache.hadoop.hive.metastore.HiveMetaStoreClient.open(HiveMetaStoreClient.java:283) ????????at?org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:164) ????????at?org.apache.hadoop.hive.metastore.HiveMetaStoreClient.<init>(HiveMetaStoreClient.java:104) ????????at?org.apache.hive.service.cli.CLIService.start(CLIService.java:82) ????????at?org.apache.hive.service.CompositeService.start(CompositeService.java:70)? ????????at?org.apache.hive.service.server.HiveServer2.start(HiveServer2.java:73) ????????at?org.apache.hive.service.server.HiveServer2.main(HiveServer2.java:103) ????????at?sun.reflect.NativeMethodAccessorImpl.invoke0(Native?Method) ????????at?sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ????????at?sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ????????at?java.lang.reflect.Method.invoke(Method.java:483) ????????at?org.apache.hadoop.util.RunJar.main(RunJar.java:212) |
?
6)?Version?information?not?found?in?metastore
執行“./hive?--service?metastore”報下面這樣的錯誤原因是未對metastore進行初始化,需要執行一次“schematool?-dbType?mysql?-initSchema”。
| SLF4J:?Actual?binding?is?of?type?[org.slf4j.impl.Log4jLoggerFactory] MetaException(message:Version?information?not?found?in?metastore.?) ????????at?org.apache.hadoop.hive.metastore.ObjectStore.checkSchema(ObjectStore.java:5638) ????????at?org.apache.hadoop.hive.metastore.ObjectStore.verifySchema(ObjectStore.java:5622) ????????at?sun.reflect.NativeMethodAccessorImpl.invoke0(Native?Method) ????????at?sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ????????at?sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ????????at?java.lang.reflect.Method.invoke(Method.java:483) ????????at?org.apache.hadoop.hive.metastore.RetryingRawStore.invoke(RetryingRawStore.java:124) ????????at?com.sun.proxy.$Proxy2.verifySchema(Unknown?Source) ????????at?org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.getMS(HiveMetaStore.java:403) ????????at?org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.createDefaultDB(HiveMetaStore.java:441) ????????at?org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.init(HiveMetaStore.java:326) ????????at?org.apache.hadoop.hive.metastore.HiveMetaStore$HMSHandler.<init>(HiveMetaStore.java:286) ????????at?org.apache.hadoop.hive.metastore.RetryingHMSHandler.<init>(RetryingHMSHandler.java:54) ????????at?org.apache.hadoop.hive.metastore.RetryingHMSHandler.getProxy(RetryingHMSHandler.java:59) ????????at?org.apache.hadoop.hive.metastore.HiveMetaStore.newHMSHandler(HiveMetaStore.java:4060) ????????at?org.apache.hadoop.hive.metastore.HiveMetaStore.startMetaStore(HiveMetaStore.java:4263) ????????at?org.apache.hadoop.hive.metastore.HiveMetaStore.main(HiveMetaStore.java:4197) ????????at?sun.reflect.NativeMethodAccessorImpl.invoke0(Native?Method) ????????at?sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) ????????at?sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ????????at?java.lang.reflect.Method.invoke(Method.java:483) ????????at?org.apache.hadoop.util.RunJar.main(RunJar.java:212) |
7)?java.net.URISyntaxException:?Relative?path?in?absolute?URI:?${system:java.io.tmpdir%7D/$%7Bsystem:user.name%7D
解決辦法:將hive-site.xml中所有的system:java.io.tmpdir都換成絕對路徑,hive-1.2.1共有4處。
8)?Establishing?SSL?connection?without?server's?identity?verification?is?not?recommended
問題現象:
Wed?Feb?17?10:39:37?CST?2016?WARN:?Establishing?SSL?connection?without?server's?identity?verification?is?not?recommended.?According?to?MySQL?5.5.45+,?5.6.26+?and?5.7.6+?requirements?SSL?connection?must?be?established?by?default?if?explicit?option?isn't?set.?For?compliance?with?existing?applications?not?using?SSL?the?verifyServerCertificate?property?is?set?to?'false'.?You?need?either?to?explicitly?disable?SSL?by?setting?useSSL=false,?or?set?useSSL=true?and?provide?truststore?for?server?certificate?verification.
解決辦法是hive-site.xml中的配置項javax.jdo.option.ConnectionURL值需要加上“useSSL=false”,如:
jdbc:mysql://127.0.0.1:3306/hive?characterEncoding=UTF-8;useSSL=false。
9)?SPARK_CLASSPATH?was?detected
SPARK_CLASSPATH?was?detected?(set?to?'/data/hadoop/hive/lib/mysql-connector-java-5.1.38-bin.jar:').
This?is?deprecated?in?Spark?1.0+.
Please?instead?use:
?-?./spark-submit?with?--driver-class-path?to?augment?the?driver?classpath
?-?spark.executor.extraClassPath?to?augment?the?executor?classpath
意思是不推薦在spark-env.sh中設置環境變量SPARK_CLASSPATH,可以改成如下推薦的方式:
./spark-sql?--master?yarn?--driver-class-path?/data/hadoop/hive/lib/mysql-connector-java-5.1.38-bin.jar
13.?相關文檔
《HBase-0.98.0分布式安裝指南》
《Hive?1.2.1安裝指南》
《ZooKeeper-3.4.6分布式安裝指南》
《Hadoop?2.3.0源碼反向工程》
《在Linux上編譯Hadoop-2.7.1》
《Accumulo-1.5.1安裝指南》
《Drill?1.0.0安裝指南》
《Shark?0.9.1安裝指南》
?
更多,敬請關注技術博客:http://aquester.cublog.cn。
轉載于:https://www.cnblogs.com/aquester/p/9891544.html
總結
以上是生活随笔為你收集整理的Hive 1.2.1SparkSqoop安装指南的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 安卓四大组件总览
- 下一篇: Permissions for id_r