Apache Kylin 部署之不完全指南


1. 引言

Apache Kylin(麒麟)是由eBay開源的分布式分析引擎,提供Hadoop之上的SQL查詢接口及多維分析(OLAP)能力以支持超大規模數據。底層存儲用的是HBase,數據輸入與cube building用的是Hive,中間數據存儲用的是HDFS。搭建環境:

Kylin version = 1.2
Hive version = 0.13.1-cdh5.3.2
HBase version = 0.98.6+cdh5.3.2
Hadoop version = 2.5.0-cdh5.3.2

本文提供的是半分布式安裝——HBase環境只在本機搭建;已略去Hadoop環境搭建過程,將主要介紹Hive、HBase、Kylin的搭建步驟。

2. Hive部署

解壓包tar zxvf hive-0.13.1-cdh5.3.2.tar.gz,然后mv到指定目錄mv hive-0.13.1-cdh5.3.2 <desc-dir>/,指定HIVE_HOME,在.bashrc中添加

export HIVE_HOME=/<desc-dir>/hive-0.13.1-cdh5.3.2/
export PATH=$PATH:$HIVE_HOME/bin:

source后,可以輸入hive命令進行表操作;但是還未配置Hive的元數據庫。cd ${HIVE_HOME}/conf,創建配置文件cp hive-default.xml.template hive-site.xml,在hive-site.xml文件中配置mysql作為元數據庫,需修改以下內容:

<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>hive</value>
  <description>username to use against metastore database</description>
</property>

<property>
  <name>javax.jdo.option.ConnectionPassword</name>
  <value>hive</value>
  <description>password to use against metastore database</description>
</property>

元數據庫在mysql中的database為hive,Driver為com.mysql.jdbc.Driver,用戶名與密碼均為hive;需在mysql中配置Hive元數據庫:

mysql -u root -p

mysql> CREATE DATABASE hive;

-- 創建 hive 用戶,並賦予訪問 hive 數據庫的權限
mysql> GRANT ALL PRIVILEGES ON hive.* TO 'hive'@'localhost' IDENTIFIED BY 'hive';
mysql> FLUSH PRIVILEGES;

-- 設置 binary log 的格式:
mysql> set global binlog_format=MIXED;

此外還需要添加mysql jdbc jar 包:

tar xvzf mysql-connector-java-5.1.37.tar.gz
mv mysql-connector-java-5.1.37/mysql-connector-java-5.1.37-bin.jar $HIVE_HOME/lib

Kylin用 HCatalog 讀取Hive表的,而HCatalog用 property hive.metastore.uris 創建HiveMetaStoreClient 得到元信息。因此,我們還需修改hive-site.xml:

<property>
  <name>hive.metastore.uris</name>
  <value>thrift://localhost:9083</value>
  <description>Thrift URI for the remote metastore. Used by metastore client to connect to remote metastore.</description>
</property>

開啟metastore 服務:

nohup hive --service metastore -p 9083 &

3. HBase 部署

與Hive 搭建步驟相類似,解壓文件mv到指定目錄,然后在.bashrc中配置環境變量:

tar zxvf hbase-0.98.6-cdh5.3.2.tar.gz
mv hbase-0.98.6-cdh5.3.2 <desc-dir>/
--.bashrc
export HBASE_HOME=/<desc-dir>//hbase-0.98.6-cdh5.3.2/
export PATH=$PATH:$HIVE_HOME/bin:$HBASE_HOME/bin

以root權限開啟HBase服務:

sudo start-hbase.sh

4. Kylin 部署

解壓文件mv到指定目錄,然后在.bashrc中配置環境變量KYLIN_HOME。此外,還需要修改Kylin的部分配置信息,cd ${KYLIN_HOME}/conf 修改kylin.properites:

#部署服務器ip,便於其他機器訪問
kylin.rest.servers=ip:7070

#kylin在hdfs存儲路徑
kylin.hdfs.working.dir=<hdfs-dir>

#依賴jar包地址
kylin.job.mr.lib.dir=<lib hdfs-dir>

在每一台機器上可能Hive的部署目錄不一致,導致諸如此類exception(因此需要配置 kylin.job.mr.lib.dir):

java.lang.RuntimeException: java.lang.ClassNotFoundException: Class org.apache.hive.hcatalog.mapreduce.HCatInputFormat not found
    at org.apache.hadoop.conf.Configuration.getClass(Configuration.java:2199)
    at org.apache.hadoop.mapreduce.task.JobContextImpl.getInputFormatClass(JobContextImpl.java:184)
...

kylin_job_conf.xml配置隊列權限:

<property>
    <name>mapreduce.job.queuename</name>
    <value>...</value>
    <description>the queue name</description>
</property>

(最新版本1.5.1同時需要在hive-site.xml 添加)配置完成后,運行./bin/find-hive-dependency.sh看Hive環境是否配置正確,可能需要手動設置HCAT_HOME;./bin/kylin.sh start即可開啟kylin服務了。


番外

Kylin如何添加登錄用戶

官方doc給出解決思路:Kylin是采用Spring security framework做用戶認證的,需要配置${KYLIN_HOME}/tomcat/webapps/kylin/WEB-INF/classes/kylinSecurity.xml 的sandbox,testing部分

<beans profile="sandbox,testing">
	<scr:authentication-manager alias="authenticationManager">
		<scr:authentication-provider>
			<scr:user-service>
				...
				<scr:user name="ADMIN" password="$2a$10$o3ktIWsGYxXNuUWQiYlZXOW5hWcqyNAFQsSSCSEWoC/BRVMAUjL32" authorities="ROLE_MODELER, ROLE_ANALYST, ROLE_ADMIN" />
				<scr:user name="xxx" password="xxx" authorities="ROLE_MODELER, ROLE_ANALYST, ROLE_ADMIN" />
				...

password需要spring加密:

<dependency>
	<groupId>org.springframework.security</groupId>
	<artifactId>spring-security-core</artifactId>
	<version>4.0.0.RELEASE</version>
</dependency>
String password = "123456"; 
org.springframework.security.crypto.password.PasswordEncoder encoder
   = new org.springframework.security.crypto.bcrypt.BCryptPasswordEncoder();
String encodedPassword = encoder.encode(password);  
System.out.print(encodedPassword);


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM