hive3.0.0的一些筆記

hgs19921112發表於2018-09-06
Hive只在一個節點上安裝即可
1.上傳tar包
2.解壓
	tar -zxvf hive-0.9.0.tar.gz -C /cloud/
3.安裝mysql資料庫(切換到root使用者)(裝在哪裡沒有限制,只有能聯通hadoop叢集的節點)
	mysql安裝僅供參考,不同版本mysql有各自的安裝流程
		rpm -qa | grep mysql
		rpm -e mysql-libs-5.1.66-2.el6_3.i686 --nodeps
		rpm -ivh MySQL-server-5.1.73-1.glibc23.i386.rpm 
		rpm -ivh MySQL-client-5.1.73-1.glibc23.i386.rpm 
	修改mysql的密碼
	/usr/bin/mysql_secure_installation
	(注意:刪除匿名使用者,允許使用者遠端連線)
	登陸mysql
	mysql -u root -p
4.配置hive
	(a)配置HIVE_HOME環境變數  vi conf/hive-env.sh 配置其中的$hadoop_home
	
	(b)配置後設資料庫資訊   vi  hive-site.xml 
	新增如下內容:
<configuration>
<property>
<name>javax.jdo.option.ConnectionURL</name>
<value>jdbc:mysql://localhost:3306/hive?createDatabaseIfNotExist=true</value>
<description>JDBC connect string for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionDriverName</name>
<value>com.mysql.jdbc.Driver</value>
<description>Driver class name for a JDBC metastore</description>
</property>
<property>
<name>javax.jdo.option.ConnectionUserName</name>
<value>root</value>
<description>username to use against metastore database</description>
</property>
<property>
<name>javax.jdo.option.ConnectionPassword</name>
<value>root</value>
<description>password to use against metastore database</description>
</property>
</configuration>
	
5.安裝hive和mysq完成後,將mysql的連線jar包複製到$HIVE_HOME/lib目錄下
	如果出現沒有許可權的問題,在mysql授權(在安裝mysql的機器上執行)
	mysql -uroot -p
	#(執行下面的語句  *.*:所有庫下的所有表   %:任何IP地址或主機都可以連線)
	GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
	FLUSH PRIVILEGES;
6. Jline包版本不一致的問題,需要複製hive的lib目錄中jline.2.12.jar的jar包替換掉hadoop中的 
/home/hadoop/app/hadoop-2.6.4/share/hadoop/yarn/lib/jline-0.9.94.jar
6. 初始化後設資料
  schematool -dbType mysql -initSchema
  schematool -dbType mysql -info
啟動hive
bin/hive
----------------------------------------------------------------------------------------------------
	
	CREATE [EXTERNAL] TABLE [IF NOT EXISTS] table_name 
   [(col_name data_type [COMMENT col_comment], ...)] 
   [COMMENT table_comment] 
   [PARTITIONED BY (col_name data_type [COMMENT col_comment], ...)] 
   [CLUSTERED BY (col_name, col_name, ...) 
   [SORTED BY (col_name [ASC|DESC], ...)] INTO num_buckets BUCKETS] 
   [ROW FORMAT row_format] 
   [STORED AS file_format] 
   [LOCATION hdfs_path]
6.建表(預設是內部表)
	create table trade_detail(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t';
	建分割槽表
	create table td_part(id bigint, account string, income double, expenses double, time string) partitioned by (logdate string) row format delimited fields terminated by '\t';
	建外部表
	create external table td_ext(id bigint, account string, income double, expenses double, time string) row format delimited fields terminated by '\t' location '/td_ext';
	
7.建立分割槽表
	普通表和分割槽表區別:有大量資料增加的需要建分割槽表
	create table book (id bigint, name string) partitioned by (pubdate string) row format delimited fields terminated by '\t'; 
	分割槽表載入資料
	load data local inpath './book.txt' overwrite into table book partition (pubdate='2010-08-22');
	
	load data local inpath '/root/data.am' into table beauty partition (nation="USA");
8.分桶表
	設定: set hive.enforce.buckting=true;
		set mapred.reduce.tasks=x;
	order by 會被限制:
		set hive.mapred.mode=nostrict;
		create table test_buket(id int ,name string ) clustered by (id) sorted by (id) into 4 buckets row format delimited fields terminated  by ',';
	
	select nation, avg(size) from beauties group by nation order by avg(size);
	新增分割槽:alter table mytest  add partition (country='Japan');
	刪除分割槽:alter table mytest drop partition (country='Japan');
	新增列:alter table mytest add columns  (age int);
	刪除列:
	修改列名:alter table mytest change age old_age int;
	插入資料:insert overwrite|into table mytest01 select id,name ,null from mytest;
	匯出資料:insert overwrite|into local directory '/home/exp.bcp' select sum(id) from mytest;
	匯出資料到hdfs:insert overwrite local directory 'hdfs://data134:9000/output-sort' select sum(id) from mytest;
	
	select語法:
		SELECT [ALL | DISTINCT] select_expr, select_expr, ... 
		FROM table_reference
		[WHERE where_condition] 
		[GROUP BY col_list [HAVING condition]] 
		[CLUSTER BY col_list 
		  | [DISTRIBUTE BY col_list] [SORT BY| ORDER BY col_list] 
		] 
		[LIMIT number]
		
		set mapred.reduce.tasks=xx;
		set mapred.map.tasks=xx;
		set -v;#檢視所有配置的引數
		SET mapreduce.framework.name=local; 本地模式跑map-reduce
		
		本地執行 mapreduce
			SET mapreduce.framework.name=local;
			set mapred.local.dir='/home/tmp';
		hive 日誌目錄配置:
			$HIVE_HOME/conf/hive-log4j.properties
			hive.log.dir=<other_location>
		注:1、order by 會對輸入做全域性排序,因此只有一個reducer,會導致當輸入規模較大時,需要較長的計算時間。
		2、sort by不是全域性排序,其在資料進入reducer前完成排序。因此,如果用sort by進行排序,並且設定mapred.reduce.tasks>1,則sort by只保證每個reducer的輸出有序,不保證全域性有序。
		3、distribute by根據distribute by指定的內容將資料分到同一個reducer。
		4、Cluster by 除了具有Distribute by的功能外,還會對該欄位進行排序。因此,常常認為cluster by = distribute by + sort by
hiveserver2連結:
      執行hiveserver2   
		!connect jdbc:hive2://ip:10000
		beeline -u jdbc:hive2://ip:10000 -n root
		
問題:
	1.
		Error: Could not open client transport with JDBC Uri: jdbc:hive2://192.168.249.134:10000: Failed to open new session: 
		java.lang.RuntimeException: org.apache.hadoop.ipc.RemoteException(org.apache.hadoop.security.authorize.AuthorizationException):
		User: root is not allowed to impersonate mysql 
	解決方法:在hadoop的core-site.xml中新增如下內容
		<property>
		  <name>hadoop.proxyuser.root.groups</name>
		  <value>*</value>
		</property>
		<property>
		  <name>hadoop.proxyuser.root.hosts</name>
		  <value>*</value>
		</property>
		
經典面試題:
	data:
		訪客	月份	訪問次數
		A	2015-01	5
		A	2015-01	15
		B	2015-01	5
		A	2015-01	8
		B	2015-01	25
		A	2015-01	5
		A	2015-02	4
		A	2015-02	6
		B	2015-02	10
		B	2015-02	5
	級聯計算累加訪問量:
	sql:
	select a.username,a.mouth ,a.gt,sum(b.gt)from 
	(select username,mouth,sum(gt) gt from test group by username,mouth) a ,
	(select username,mouth,sum(gt) gt from test group by username,mouth) b 
	where a.username = b.username and a.mouth>=b.mouth
	 group by a.username,a.mouth
	 order by a.username,a.mouth;
	結果:
		A	2015-01	33	33
		A	2015-02	10	43
		B	2015-01	30	30
		B	2015-02	15	45
	
	


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/31506529/viewspace-2213713/,如需轉載,請註明出處,否則將追究法律責任。

相關文章